查询和删除
批量查询
@Test public void testSelectByBatch() { //批量查询 List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3)); users.forEach(System.out::println); }
按条件查询之一 使用map操作,按两个字段查询,可以看到自动为我们拼接了sql查询语句
@Test public void testSelectByBatchIds() { HashMap<String, Object> map = new HashMap<>(); map.put("name", "龙师傅"); map.put("age", 25); List<User> userList = userMapper.selectByMap(map); userList.forEach(System.out::println); }
分页查询
1、配置分页插件
public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor(); //注册乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); //分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } //使用分页插件时,设置为false, --> setUseGeneratedShortKey(false) @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.setUseGeneratedShortKey(false); } }
2、测试,直接使用 page 对象
//测试分页查询 @Test public void testPage() { Page<User> userPage = new Page<>(3, 3); userMapper.selectPage(userPage, null); userPage.getRecords().forEach(System.out::println); }
删除
物理删除:从数据库中直接删除
逻辑删除:在数据库中没有删除,而是通过一个变量来让它失效! deleted=0 ->deleted=1
基本删除
//删除 @Test public void TestDeleteById() { userMapper.deleteById(1367843260306825217L); } //通过ID批量删除 @Test public void testDeleteByIds() { userMapper.deleteBatchIds(Arrays.asList(1367833264080838657L, 1367843450782863363L)); } //通过map删除 @Test public void testDeleteMap() { HashMap<String, Object> map = new HashMap<>(); map.put("name", "龙师傅"); userMapper.deleteByMap(map); }
逻辑删除:
1、数据库添加字段 deleted
2、实体类添加字段和注解
3、配置
步骤1、在application.yml中配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
步骤2: 实体类字段上加上@TableLogic
注解
@TableLogic
private Integer deleted;
4、测试,可以看到,它虽然执行的是删除操作,但背后却是更新 deleted,数据还在数据库中,这就是逻辑删除
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)