SSM框架学习记录-MyBatisPlus_day01

1.入门案例与简介

MybatisPlus是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率

未使用MybatisPlus时,在dao接口中的代码如下:

@Mapper
public interface UserDao {
        @Select("select * from user where id=#{id}")
        public User getById(Long id);
}

使用MybatisPlus后,代码如下(依旧可以和MyBatis一样写SQL):

@Mapper
public interface UserDao extends BaseMapper<User> {
}

注意:

  • dao接口要想被容器扫描到,有两种解决方案:
    • dao接口上添加@Mapper注解,并且确保dao处在引导类所在包或其子包中(缺点是需要在每个dao接口中添加注解)
    • 在引导类上添加@MapperScan注解,指定包下的所有dao接口都能被扫描到

代码参考MybatisPlus_01_quickstart


2.标准数据层开发

代码参考MybatisPlus_01_quickstart中的Mybatisplus01QuickstartApplicationTests.java

注意:

  • 使用分页的前需要先配置拦截器,具体代码见MpConfig.java

SSM框架学习记录-MyBatisPlus_day01_第1张图片

3.DQL编程控制

MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。在查询所有和分页查询的时候,都有看到Wrapper类,该类就是用来构建查询条件的

代码参考MybatisPlus_02_dql中的Mybatisplus02DqlApplicationTests.java


条件查询

  • 三种使用方式
  • 并且与或者关系
  • null判定

查询投影

  • 查询指定字段
  • 聚合和分组查询

查询条件

  • 等值查询
  • 范围查询
  • 模糊查询
  • 排序查询

映射匹配兼容性

  • 当表的列名和模型类的属性名不一致,会导致数据封装不到模型对象,MyBatisPlus提供了注解@TableField,使用该注解可以实现模型类属性名和表的列名之间的映射关系:
public class User {
    @TableField(value = "pwd")  // pwd是表中字段名称
    private String password;
	...
}
  • 当模型类中多了数据库表不存在的字段,会导致生成的SQL语句中在select的时候查询了数据库不存在的字段,解决方案是使用@TableField的属性exist
public class User {
    // 设置该字段是否在数据库表中存在,如果设置为false则不存在,生成sql语句查询的时候,就不会再查询该字段
	...
    @TableField(exist = false)
    private Integer online;
}
  • 查询表中数据时,为了避免把敏感数据返回给前端,需要限制哪些字段默认不要进行查询,解决方案是使用@TableField的属性select
public class User {
	// 该属性设置默认是否需要查询该字段的值,true(默认值)表示默认查询该字段,false表示默认不查询该字段
    @TableField(value = "pwd",select = false)
    private String password;
	... 
}
  • 表的名称和模型类的名称不一致,导致查询失败,解决方案是使用@TableName来设置表与模型类之间的对应关系:
@TableName("tbl_user")
public class User {
	...
}

4.DML编程控制

代码参考MybatisPlus_03_dml中的Mybatisplus03DmlApplicationTests.java


id生成策略控制

新增成功后,主键ID是很长串的内容,更想要的是按数据库表字段进行自增长,在解决这个问题之前,先来分析下ID该如何选择哪种生成策略:

  • 日志:自增(如1,2,3,4,……)
  • 购物订单:特殊规则(如FQ23948AK3843)
  • 外卖单:关联地区日期等信息(如10 04 20200314 34 91)
  • 关系表:可省略id

在主键上添加@TableId即可设置主键生成策略(也可以在配置文件中设置全局配置)


多记录操作

使用deleteBatchIdsselectBatchIds方法


逻辑删除

对于删除操作业务问题有两种方式:

  • 物理删除:业务数据从数据库中丢弃,执行的是delete操作
  • 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的是update操作

MyBatisPlus进行逻辑删除的步骤如下:

  • 数据库表添加deleted
  • 实体类添加属性:
public class User {
	...
    // 逻辑删除字段,标记当前记录是否被删除
    // value为正常数据的值,delval为删除数据的值
    @TableLogic(value = "0" ,delval = "1")
    private Integer deleted;
}
  • 运行删除方法:
// 底层运行的是update tbl_user set deleted=1 where id=? and deleted=0
void testDelete(){
	userDao.deleteById(1L);
}
// 如果运行查询操作,底层运行的是select * from tbl_user where deleted=0(即也会自动添加一个未被删除的条件)

注意:

  • 如果要查询所有数据(包括逻辑删的数据),需要自己在dao层中写SQL语句
  • 如果每个表都要有逻辑删除字段,可以在配置文件中设置全局配置

乐观锁

MyBatisPlus实现乐观锁的步骤如下:

  • 数据库表添加列(如version)
  • 在模型类中添加对应的属性:
public class User {
   ...
   @Version
   private Integer version;
}
  • 添加乐观锁的拦截器:具体见MpConfig.java
  • 执行更新操作

参考


https://www.bilibili.com/video/BV1Fi4y1S7ix?p=105-118

你可能感兴趣的:(框架学习,javaee,mybatis-plus)