介绍
官网介绍:简介 | MyBatis-Plus
作用:提高单表CRUD操作的效率
快速开始
实现下列功能:
- 新增用户功能
- 根据id查询用户
- 根据id批量查询用户
- 根据id更新用户
- 根据id删除用户
引入MybatisPlus的起步依赖
MyBatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能,并且实现了自动装配效果。
因此我们可以用MybatisPlus的starter代替Mybatis的starter,也就是说,引入了下面这个依赖后就可以同时使用Mybatis和MybatisPlus:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency>定义Mapper
自定义的Mapper继承MybatisPlus提供的BaseMapper接口:
public interface UserMapper extends BaseMapper<User> { }这个Mapper里什么都不用写,User是自定义的实体类,对应user表
演示(基于单元测试)
@SpringBootTest class UserMapperTest { @Autowired private UserMapper userMapper; @Test void testInsert() { User user = new User(); user.setId(5L); user.setUsername("Lucy"); user.setPassword("123"); user.setPhone("18688990011"); user.setBalance(200); user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}"); user.setCreateTime(LocalDateTime.now()); user.setUpdateTime(LocalDateTime.now()); userMapper.insert(user); } @Test void testSelectById() { User user = userMapper.selectById(5L); System.out.println("user = " + user); } @Test void testQueryByIds() { List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L)); users.forEach(System.out::println); } @Test void testUpdateById() { User user = new User(); user.setId(5L); user.setBalance(20000); userMapper.updateById(user); } @Test void testDeleteUser() { userMapper.deleteById(5L); } }新增用户功能:userMapper.insert(user);
根据id查询用户:userMapper.selectById(5L);
根据id批量查询用户:userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));
根据id更新用户:userMapper.updateById(user);
根据id删除用户:userMapper.deleteById(5L);
解释
mp如何找到数据库中对应的表以及表内字段的?——3个约定
1.类名驼峰转下划线作为表名
例:类名User->表名user;类名UserInfo->表名user_info
2.名为id的字段作为主键
3.变量名驼峰转下划线作为表的字段名
例:类内变量名username->表内字段名username;类内变量名createTime->表内字段名create_time
常用注解
如果实体类和对应的表不满足3个约定,则需要用到注解来进行配置
MybatisPlus中比较常用的几个注解如下:
- @TableName:用来指定表名
- @Tableld:用来指定表中的主键字段信息
- @TableField:用来指定表中的普通字段信息
@TableName
当实体类的类名和表名不满足约定时,在实体类上添加@TableName("表名")
@TableId
当实体类中主键对应的变量名不为id时,在该变量名上添加@TableId(value = "id")
@TableId还有3种type属性:
IdType枚举:
- AUTO:数据库自增长
- INPUT:通过set方法自行输入
- ASSIGN_ID(默认):分配 ID,接口ldentifierGenerator的方法nextld来生成id,默认实现类为DefaultldentifierGenerator雪花算法
@TableField
使用@TableField的常见场景:
- 成员变量名与数据库字段名不一致:@TableField("数据库字段名")
- 成员变量名以is开头,且是布尔值:@TableField("数据库字段名")
- 成员变量名与数据库关键字冲突(转义):@TableField("`数据库字段名`")
- 成员变量不是数据库字段:@TableField(exist = false)
常用配置
官网:配置 | MyBatis-Plus
大部分并不需要我们去配置,走默认就行,如果需要配置,可以查看官网或者通过idea的提示进行配置