mybatis-plus常用注解和方法

发布时间 2023-03-26 13:17:33作者: 啊我今天学什么

初识mybatis-plus

  • 简介
    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

  • 那么它是怎么增强的呢?
    其实就是它已经封装好了一些crud方法,我们不需要再写SQL语句了,直接调用这些方法就行(单表操作)。

注意:

  1. POM文件中将mybatis依赖换成mybatis plus (不能同时存在,避免冲突)。
  2. DAO层中你要创建的Mapper类必须继承BaseMapper,通过继承BaseMapper接口来实现dao接口功能的增强(也就是说你可以开始使用myabtis-plus提供的封装好的CRUD方法了)

快速开始:

//User类
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private Date bir;
}
//编写 Mapper 包下的 UserMapper接口
public interface UserMapper extends BaseMapper<User> {

}

现有一张 User 表,我要查找User表中的所有数据

//添加测试类,进行功能测试:
@SpringBootTest
public class SampleTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testSelect() {
      //使用mybatis-plus提供的selectList方法测试,null是无查询条件
      //通过selectList查出user表中的所有数据
        List<User> userList = userMapper.selectList(null);
        for (User user : userList) {
              System.out.println(user.toString());
          }
    }
}

但是注意!你并没写任何SQL语句,你也没有指定selectList方法去查询哪个数据表,那么它是如何完成java类和数据表的映射呢?

它其实是默认通过Java类名去对应数据库的表名,找不到对应的表名就会报错。但是这样很不灵活,如果我Java类名和我要查询的表名不一样那我就没法干活了吗?
mybatis-plus的开发者当然也知道这个问题,上面说的只是它的默认映射规则,真正开发时我们会用注解来解决Java类名和对应数据库的表名映射问题。

1. 常用的注解

@TableName

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类

比如说java类名是User但要查询的数据表是sys_user,我们就用这个注解来联系它们,这样就不会因为找不到对应的表而报错了。

@TableName("sys_user")//也可以写成@TableName(value="sys_user")
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

@TableId

  • 描述:主键注解
  • 使用位置:实体类主键字段
属性 类型 必须指定 默认值 描述
value string Java类id名 主键字段名
type 枚举类 idType.NONE 指定主键类型
@TableName("sys_user")
public class User {
  //两个参数不一定非要写,看情况
  @TableId(value="uid",type=IdType.AUTO)//表主键为uid,自增
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

IdType:

描述
AUTO 数据库 ID 自增
NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
ASSIGN_ID 分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)

@TableField

  • 描述:字段注解(非主键)
@TableName("sys_user")
public class User {
    @TableId(value="uid",type=IdType.AUTO)//表主键为uid,自增
    private Long id;
    @TableField(value="nickname")
    private String name;
    private Integer age;
    private String email;

    @TableField(exist=false)//不映射数据表中的任何字段
     private String aaaa;
}
属性 类型 必须指定 默认值 描述
value string Java类id名 数据库字段名
exist Boolean true 是否为数据表字段

如果我的Java类中有一个要用的属性但是和数据表字段无关,而mybatis-plus会自动匹配,然后报错,这时候exist属性就派上了用场。当exist默认为true,说明对应Java属性是数据表字段,如果不是数据表字段,则设为false,便不会被自动匹配数据表字段名。

2. 常用的方法

https://www.bilibili.com/video/BV1pK411W7Hu/?p=4&spm_id_from=pageDriver&vd_source=d6b43fe5a17f1824e85b234397b588bc