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

前景提要

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、最关键的创建数据库对应的映射实体,也就是对象,例如:

java 复制代码
@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层对象的编写

java 复制代码
@Mapper
public interface ComExamQuestionMapper extends BaseMapper<ComExamQuestionMst> {
}

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

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

3、service层的编写

java 复制代码
@Service
public class ComExamQuestionOptionService extends ServiceImpl<ComExamQuestionOptionMapper, ComExamQuestionOptionMst> implements IService<ComExamQuestionOptionMst> {

}

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

4、快速生成代码结构

java 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>最新版本</version>
</dependency>
java 复制代码
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。

相关推荐
YA3336 分钟前
java设计模式七、代理模式
java·设计模式·代理模式
helloworddm20 分钟前
Orleans 自定义二进制协议在 TCP 上层实现的完整过程
java·网络协议·tcp/ip
超级大只老咪1 小时前
蓝桥杯知识点大纲(JavaC组)
java·算法·蓝桥杯
Yiii_x1 小时前
如何使用IntelliJ IDEA进行Java编程
java·课程设计·ai编程
阿杰AJie1 小时前
如何在程序中避免出现大量if和case
java·后端
摇滚侠1 小时前
Spring Boot3零基础教程,云服务停机不收费,笔记71
java·spring boot·笔记
摇滚侠2 小时前
Spring Boot3零基础教程,监听 Kafka 消息,笔记78
spring boot·笔记·kafka
豐儀麟阁贵2 小时前
5.5类的主方法
java·开发语言
不光头强2 小时前
maven进阶
java·maven
智海观潮2 小时前
聊聊Spark的分区
java·大数据·spark