Mybatis-Plus实现CRUD
Mybatis-Plus实现CRUD
- 通用 CRUD 封装**BaseMapper (opens new window)**接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
- 参数 Serializable为任意类型主键 Mybatis-Plus
不推荐使用复合主键约定每一张表都有自己的唯一
id 主键- 对象 Wrapper为 条件构造器
1 Insert增加
插入一条记录
- int insert(T entity);
//测试增加
@Test
public void testInsert(){
User user = new User(null,"jack",30,"jack@qq.com");
userMapper.insert(user);
}
此时,代码会出现异常。因为User类并没有设置ID,那么MP会使用ID生成策略自动生成一个ID。
这个ID是由
雪花算法
得到的,类型为Long类型,而实体类在中ID为Integer类型
2 ID生成策略
通过**@TableId(type = IdType.AUTO)** 注解进行指定
主键类型 | 参数说明 |
---|---|
AUTO(0) | 数据库ID自增(数据库使用自增) |
NONE(1) | 该类型为未设置主键类型(将跟随全局) |
INPUT(2) | 用户手动输入ID |
ID_WORKER(3) | 全局唯一ID (idWorker ) |
UUID(4) | 全局唯一ID (UUID) |
ID_WORKER_STR(5) | 符串全局唯一ID (idWorker 的字符串表示) |
3 Delete删除
根据 ID 删除
- int deleteById(Serializable id)
删除(根据ID 批量删除)
- int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList)
//测试删除
@Test
public void testdeleteById(){
userMapper.deleteById(6);
}
//测试批量删除
@Test
public void testdeleteBatchIds(){
Integer[] ids = {1,2,3,4};
userMapper.deleteBatchIds(Arrays.asList(ids));
}
4 逻辑删除
在开发中有些数据不能直接从数据库中进行删除。用户删除数据有时候管理员还需要查看!!!
那么在实际的开发中可以实现
逻辑删除
实现:
- 在数据库中添加deleted字段(0表示未删除、1表示删除)
- 在实体上添加
@TableLogic
注解
@TableLogic
private Integer deleted;
//测试逻辑删除
@Test
public void testLogicDeleteById(){
userMapper.deleteById(1);
}
# 执行sql语句为:
UPDATE user SET deleted=1 WHERE id=? AND deleted=0
添加逻辑删除属性后,查询中都会自动带上条件
where deleted = 0
5 Update修改
根据 ID 修改(参数为实体类对象)
- int updateById(@Param(Constants.ENTITY) T entity);
//测试修改
@Test
public void testUpdateById(){
User user = new User(5,"rose",30,"rose@qq.com");
userMapper.updateById(user);
}
6 Select查询
根据 ID 查询
T selectById(Serializable id);
查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
//测试根据id查询
@Test
public void testselectById(){
User user = userMapper.selectById(1);
System.out.println(user);
}
//查询(根据ID 批量查询)
@Test
public void testselectBatchIds(){
List<User> userList = userMapper.selectBatchIds(Arrays.asList(1, 2, 3, 4));
userList.forEach(System.out::println);
}
//根据 entity 条件,查询全部记录
@Test
public void testselectList(){
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
//根据 Wrapper 条件,查询总记录数
@Test
public void testselectCount(){
Integer count = userMapper.selectCount(null);
System.out.println(count);
}