在spring boot项目引入mybatis plus后的的案例实践

2023-12-21

前景提要

1、项目背景

一个spring boot + mybatis的项目,分页一直是PageHelper。

2、为什么要引入mybatis plus

1、简化单表的crud

2、对mybatis plus进行简单的设计,以满足现有系统的规范,方便开发

实践中出现的问题

1、版本不兼容

当我在尝试使用较早一些的稳定版本的时候,发现了mybatis和mybatis plus包出现了冲突的情况,然后切换了高版本的,问题解决

2、mybatis plus的分页对象无法使用

根据文档的使用方法添加后,无法使用,因为已经存在的mybatis的分页,当配置了这个分页插件时,你需要在mybatis plus中额外添加以下配置,以保证使用的是自己的Interceptor()

configuration.addInterceptor(mybatisPlusInterceptor());

如何使用mybatis plus

在引入相关依赖,配置完数据源,包扫描,以及mp的MybatisConfiguration的相关基础配置后,我们进入到使用上。

1、最关键的创建数据库对应的映射实体,也就是对象,例如:

@Data
@TableName("pro_biweekly_task_mst")
public class DoubleWeekTaskMst extends BaseByMybatisPlusVO {

    @TableId(value = "",type = IdType.AUTO)
    private Integer id;

    private Integer projectId;

    private String isFinish;

    private String classification;

    @TableField(select = false)
    private String description;

}

简单介绍一下上面出现的注解的含义

@Data:自动添加get()、set()、toString()方法,保证代码的整洁

@TableName():数据库对应的表名

@TableId(value = "",type = IdType.AUTO):当前表的主键id,IdType.AUTO的意思是自动递增

@TableField(select = false):设置这个字段相关的东西,这里select = false的意思是查询时忽略掉这个字段,用来设置表中没有,但是又需要设置返回的字段。

2、mapper层对象的编写

@Mapper
public interface ComExamQuestionMapper extends BaseMapper<ComExamQuestionMst> {
}

如上述代码,mapper接口去继承一个BaseMapper<上面创建的实体>,此时去注入一个上面的mapper对象,就已经可以看到一堆方法了

使用的话可以看文档,也可以直接看BaseMapper

3、service层的编写

@Service
public class ComExamQuestionOptionService extends ServiceImpl<ComExamQuestionOptionMapper, ComExamQuestionOptionMst> implements IService<ComExamQuestionOptionMst> {

}

主要就是先继承一个ServiceImpl<刚刚写的mappser,刚刚写的映射实体>,然后实现一个IService<刚刚写的映射实体>,就完成了,当然了,如果说是项目分层比较严格的,可以把接口和实现分开写,就是你的接口去继承IService<刚刚写的映射实体>,然后你的实现去继承自己的接口,中间有一个中间人的意思,这个也是程序设计的原则之一、依赖倒置原则。

4、快速生成代码结构

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>最新版本</version>
</dependency>
FastAutoGenerator.create("url", "username", "password")
    .globalConfig(builder -> {
        builder.author("baomidou") // 设置作者
            .enableSwagger() // 开启 swagger 模式
            .fileOverride() // 覆盖已生成文件
            .outputDir("D://"); // 指定输出目录
    })
    .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
        int typeCode = metaInfo.getJdbcType().TYPE_CODE;
        if (typeCode == Types.SMALLINT) {
            // 自定义类型转换
            return DbColumnType.INTEGER;
        }
        return typeRegistry.getColumnType(metaInfo);

    }))
    .packageConfig(builder -> {
        builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名
            .moduleName("system") // 设置父包模块名
            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径
    })
    .strategyConfig(builder -> {
        builder.addInclude("t_simple") // 设置需要生成的表名
            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
    })
    .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
    .execute();

官方文档 简介 | MyBatis-Plus

小结

mybatis plus还是很好用的,对比以前,当我要写一个需求时,可能是一个方法一直传递到mapper.xml中去写sql了,然后是需要联表的联表,需要返回的字段就写一个新的对象Po返回就行了,感觉在代码的实现上是可以顺着写的,想到哪写到哪。但是mybatis plus不太一样,他先把所有的表映射实体都建完了,单表的crud也都解决了,这个时候我更多的可以像面向对象一样,需要对哪个对象操作,就直接去注入它,去操作它的方法,不需要再去xml中写查询,写添加,写修改,写删除,但是在面对多表的联合它也帮不上忙,还是只能老老实实去写xml。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在spring boot项目引入mybatis plus后的的案例实践 的相关文章

随机推荐

  • ArkTS @Observed、@ObjectLink状态装饰器的使用

    作用 Observed ObjectLink装饰器用于在涉及嵌套对象或者数组元素为对象的场景中进行双向数据同步 状态的使用 1 嵌套对象 我们将父类设置为 Observed状态 这个时候 子应该设置 ObjectLink才能完成数据的双向绑
  • 测试开发 | 个性化推荐引领社交媒体新潮流:定制化互动,畅享个性世界

    在信息爆炸的数字时代 社交媒体的个性化推荐技术正成为用户互动体验的亮点 通过先进的算法和智能化系统 个性化推荐技术为用户提供了更加精准 贴近兴趣的内容 为用户创造了一个充满个性 丰富多彩的社交空间 1 定制化内容 满足个性需求 个性化推荐技
  • 框架网页中如何查看中心网页源码

    框架网页分框架和中心显示页面 直接浏览器右键 显示源码 看到的是框架的网页 方法 假设 框架网址是 a com menu index php 假设 单击菜单后显示的center网页是 manage user php 则我们知道最终中心网页的
  • QT中网络编程之发送Http协议的Get和Post请求

    文章目录 HTTP协议 GET请求 POST请求 QT中对HTTP协议的处理 1 QNetworkAccessManager 2 QNetworkRequest 3 QNetworkReply QT实现GET请求和POST请求
  • 我该如何解除微软账户儿童模式?

    之前注册微软账户时把日期填成小于14岁的了 现在出现由于你的家庭安全设置 你不能使用 Google Chrome 您可以访问以下网页 https account microsoft com family home lang 首先登陆后点击添
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • 23年12月AI烟火识别系统应用案例-北京梅兰芳故居防火系统

    AI烟火识别智能视频分析系统在文化遗产保护领域的应用 尤其是在梅兰芳故居防火系统的部署 是现代科技与传统文化保护结合的典范 这篇文章将详细介绍富维烟火识别系统的设计 实施及其在23年12月在北京梅兰芳故居中的应用 背景介绍 nbsp 梅兰芳
  • http通信 axios VS fetch

    基本用法 GET 两者都是基于Promise 所以可以使用 then 也可以使用async await fetch需要手动对相应内容进行转换 axios会根据响应头类型 进行自动转换 所以axios的代码更加简洁 axios get htt
  • netty源码:(28)ChannelPromise

    ChannelPromise是ChannelFuture的子接口 它是可写入的 其父接口Promise定义如下 ChannelPromise有个默认的实现类 DefaultChannelPromise 它的setSuccess方法用来调用所
  • Microsoft Family Safety Microsoft 家庭安全将人员添加到你的家庭组

    在 创建家庭组 后 通过添加家庭成员来浏览 Microsoft 家庭安全 的功能和权益 如果某人已是家庭组成员 则在加入另一个组之前 他们必须 退出该组或从该组中删除 他们还可以 创建一个新的 Microsoft 帐户 以与新的家庭组相关联
  • 大模型ChatGLM简介及应用情景

    本节介绍生成模型GLM系列模型的新成员 中英双语对话模型ChatGLM ChatGLM分为6B和130B 默认使用ChatGLM 6B 两种 主要区别在于其模型参数不同 ChatGLM是一个开源的 支持中英双语问答的对话语言模型 并针对中文
  • WaterBench: Towards Holistic Evaluation of Watermarks for Large Language Models

    本文是LLM系列文章 针对 WaterBench Towards Holistic Evaluation of Watermarks for Large Language Models 的翻译 WaterBench 面向大型语言模型水印的整
  • 【vue】$bus 跨组件调用方法

    1 新建bus js import Vue from vue 使用 Event Bus const bus new Vue export default bus 2 main js引用 import bus from libs bus Vu
  • 什么是DLNA

    DLNA旨在解决个人PC 消费电器 移动设备在内的无线网络和有线网络的互联互通 使得数字媒体和内容服务的无限制的共享和增长成为可能 DLNA的口号是Enjoy your music photos and videos anywhere an
  • LLaVA和LLaVA-Plus视觉指令微调及工具使用构建多模态智能体

    认识和理解视觉内容 以及基于人类指令对视觉世界进行推理 长久以来一直是一个具有挑战性问题 得益于大规模预训练 OpenAI 的 GPT 4V 展示了在自然语言处理任务和复杂视觉理解中令人印象深刻的能力 智源社区邀请到了LLaVA的一作柳昊天
  • 测试开发 | 智能辅助在心理健康治疗中的革新:倾听、理解、支持的新时代

    随着科技的迅速发展 智能辅助技术正在逐渐渗透到心理健康治疗领域 为个体提供更为智能 个性化的支持 这种创新性的结合为心理健康领域带来了新的可能性 使治疗更加灵活 高效 并为患者提供了更全面的关怀 1 虚拟治疗环境 智能辅助技术通过虚拟治疗环
  • 航空港务数据大屏为航空港的可持续发展提供有力支撑!

    随着经济的发展 不断加建与扩建民用机场 空港行业规模不断扩大 在不断引进和消化发达国家先进技术的同时 中国深入开展了对新技术和新材料的研究 极大地丰富和发展了中国的机场建设技术 且各项机场建设计划均已落实推进 行业在经济发展的推动下欣欣向荣
  • 在vue3的setup语法糖中为什么无法直接使用useRouter().currentRoute

    在vue3的setup语法糖中为什么无法直接使用useRouter currentRoute 问题 在setup语法糖中 不能直接使用useRouter xx
  • 测试开发 | 创业与人工智能的密切关系

    随着科技的迅猛发展 人工智能 AI 已经逐渐渗透到各个领域 为创业者带来了前所未有的机遇与挑战 在这个数字化转型的时代 创业与人工智能的密切关系日益凸显 成为推动创新和持续发展的关键因素 1 人工智能为创业提供新的商业模式 人工智能技术的不
  • 在spring boot项目引入mybatis plus后的的案例实践

    前景提要 1 项目背景 一个spring boot mybatis的项目 分页一直是PageHelper 2 为什么要引入mybatis plus 1 简化单表的crud 2 对mybatis plus进行简单的设计 以满足现有系统的规范