(1)MyBatis-简单查询-分页查询
(2)MyBatisPlus删除与逻辑删除
(1)MyBatis-简单查询-分页查询
1.1通过多个id批量查询
完成了动态sql的foreach的功能
//多个id批量查询 |
1.2简单的条件查询
通过map封装查询条件
注意:map中的key对应数据库中的列名。如:数据库user_id,实体类是userId,这时map的key需要填写user_id
//简单条件查询 |
- 分页
2.1分页插件
MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能
2.1.1添加分页插件
配置类中添加@Bean配置
/** |
2.1.2测试selectPage分页
测试:最终通过page对象获取相关数据
//分页查询 |
测试selectMapsPage分页
当指定了特定的查询列时,希望分页结果列表只返回被查询的列,而不是很多null值
测试selectMapsPage分页:结果集是Map
@Test public void testSelectMapsPage() { //Page不需要泛型 Page<Map<String, Object>> page = newPage<>(1, 5); Page<Map<String, Object>> pageParam = userMapper.selectMapsPage(page, null); List<Map<String, Object>> records = pageParam.getRecords(); records.forEach(System.out::println); System.out.println(pageParam.getCurrent()); System.out.println(pageParam.getPages()); System.out.println(pageParam.getSize()); System.out.println(pageParam.getTotal()); System.out.println(pageParam.hasNext()); System.out.println(pageParam.hasPrevious()); } |
(2)MyBatisPlus删除与逻辑删除
1.1根据id删除记录
@Test public void testDeleteById(){ int result = userMapper.deleteById(5L); system.out.println(result); } |
1.2批量删除
@Test public void testDeleteBatchIds() { int result = userMapper.deleteBatchIds(Arrays.asList(8, 9, 10)); system.out.println(result); } |
1.3简单条件删除
@Test public void testDeleteByMap() { HashMap<String, Object> map = new HashMap<>(); map.put("name", "Helen"); map.put("age", 18); int result = userMapper.deleteByMap(map); system.out.println(result); } |
逻辑删除
2.1物理删除和逻辑删除
物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
逻辑删除的使用场景:
可以进行数据恢复
有关联数据,不便删除
2.2 逻辑删除实现流程
2.2.1数据库修改
添加 deleted字段
ALTERTABLE `user` ADD COLUMN `deleted` boolean DEFAULT false |
2.2.2实体类修改
添加deleted 字段,并加上 @TableLogic 注解
@TableLogic private Integer deleted; |
如果加上了自动填充,需要在配置类中的插件添加自动填充属性
2.2.3配置(可选)
application.properties 加入以下配置,此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1 mybatis-plus.global-config.db-config.logic-not-delete-value=0 |
先添加一条数据:
逻辑 删除:
底层的执行语句是更新操作:
测试
测试后发现,数据并没有被删除,deleted字段的值由0变成了1
测试后分析打印的sql语句,是一条update
注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作
修改:
测试逻辑删除后的查询
MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断
@Test public void testLogicDeleteSelect() { List<User> users = userMapper.selectList(null); users.forEach(System.out::println); } |
只查询出来6条数据,如果配置了逻辑删除他只会查询delete=0的数据,没有删的数据