这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战
前言
Mybatis像汽车,但是加持了MybatisPlus
绝对是绝对是加装了氮气的超跑.
在没有使用MybatisPlus
之前,在查询单表的时候要不默默的写sql代码,要不用代码生成器生成基础的代码,一旦参数有多种匹配方式,那么要不copy一份重写,要不加一个if条件,还是比较难受的.
但是一旦用了MybatisPlus
那仿佛是另一个世界.
MybatisPlus集成项目请看SpringBoot基础之集成MybatisPlus
前置基础信息
SQL
1 | less复制代码CREATE TABLE `student` ( |
Bean
1 | ruby复制代码@Data |
MyBatisPlus增强配置-字段自动填充
正常来说,createTime
和createBy
和del_flag
和租户等信息在输入插入的时候就需要赋值,而updateTime
和updateBy
在数据变动的时候就需要重新赋值,对于这种模式固定的字段,可以使用MyBatisPlus
的字段自动填充功能,让程序自动帮助我们做.
需要变动的位置,添加一个配置类,需要在Bean上需要的字段上添加注解
需要填充的字段上加注解@TableField(
例子如上图的Student
@TableField(fill = FieldFill.INSERT)
在新增会自动填充该字段,如果字段有值,则不会覆盖
@TableField(fill = FieldFill.INSERT_UPDATE)
在新增和更新都会自动填充该字段,如果字段有值则会覆盖
@TableField(fill = FieldFill.UPDATE)
在更新会自动填充该字段,如果字段有值则会覆盖
字段自动填充配置类
在配置类中,自定义配置每一个需要自动填充数据的字段的填充规则
1 | typescript复制代码@Slf4j |
数据逻辑删除
业务系统中大部分表不会真正的删除,所以需要使用某一个字段,定义是否伪删除. 只有调用MybatisPlus
自带的方法且定义了删除字段的才会伪删除,否则会真删除.对于自己写的sql需要自行处理.
此处使用del_flag来定义是否伪删除,0是没有删除1是删除
application.yml
1 | yaml复制代码mybatis-plus: |
Bean类上
1 | arduino复制代码/** |
官网介绍自从3.3.0开始,在application.yml
中配置了全局后, 可以不用再Bean上的字段配置@TableLogic
单表增删改查使用
controller层使用增删改查
1 | less复制代码@RestController |
service层使用增删改查
增删改查
1 | less复制代码@Service |
Service
中自带默认的Mapper对象即baseMapper
,等同于这里的studentMapper
单表条件查询示例
lambda语法
查询info
等于zouzdc
的list
1 | perl复制代码 List<Student> zouzdc = studentService.lambdaQuery().eq(Student::getInfo, "zouzdc").list(); |
查询info
等于zouzdc
的一个对象
1 | ini复制代码Student zouzdc = studentService.lambdaQuery().eq(Student::getInfo, "zouzdc").one(); |
对于非唯一数据,直接使用one(),可能会出现非一条数据报错,可以使用last()
拼接参数获取第一条数据
更新id=1
的info
字段
1 | perl复制代码 studentService.lambdaUpdate().set(Student::getInfo,"zdc").eq(Student::getId,1).update(); |
删除info
是’zouzdc’的数据
1 | csharp复制代码studentService.lambdaUpdate().set(Student::getInfo,"zouzdc").remove() |
更多的条件构造请参看官方文档 中条件构造器
一节
变种语法 不建议使用
1 | perl复制代码 List<Student> zouzdc1 = studentService.list(new QueryWrapper<Student>().lambda().eq(Student::getInfo, "zouzdc")); |
分页查询
分页配置类
1 | less复制代码@Configuration |
lambda模式分页
1 | perl复制代码 |
混合模式分页
Service层
1 | scss复制代码 public Page<StudentDto> listPage(StudentDto vo){ |
Mapper层
1 | less复制代码Page<StudentDto> listPage(@Param("page") Page<Student> page, @Param("ew") QueryWrapper<Student> wrapper); |
@Param("ew")
是固定的默认的
XML层
1 | csharp复制代码<select id="listPage" resultType="zdc.enterprise.dto.StudentDto"> |
这种写法是在service
层写sql形式的where条件,然后通过${ew.customSqlSegment}
拼接到xml中sql的后面.会自带where
还有更多写法…自己研究吧
1 | arduino复制代码作者:ZOUZDC |
本文转载自: 掘金