查询
Map条件
@Test public void testMap(){ Map map = new HashMap(); map.put("cname","测试"); map.put("password","123456"); List list = customerMapper.selectByMap(map); list.forEach(System.out::println); }
QueryWrapper
wrapper介绍
- Wrapper : 条件构造抽象类,最顶端父类
- AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
- QueryWrapper : Entity 对象封装操作类,不是用lambda语法
- UpdateWrapper : Update 条件封装,用于Entity对象更新操作
- AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
- LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
- LambdaUpdateWrapper : Lambda 更新封装Wrapper
- 如果想进行复杂条件查询,那么需要使用条件构造器 Wapper,涉及到如下方法
拼凑条件相关关键字
条件查询
- 基本多条件查询
@Test public void testWrapper(){ // 拼凑条件 QueryWrapper<Customer> queryWrapper = new QueryWrapper(); // 1)模糊查询 queryWrapper.like("cname","测试"); // 2)等值查询 queryWrapper.eq("password","777"); // 3)批量查询 queryWrapper.in("cid",1,2,3,4); // 查询 List<Customer> list = customerMapper.selectList(queryWrapper); list.forEach(System.out::println); }
条件判断
@Test public void findCondition2() { Customer customer = new Customer(); customer.setPassword("777"); customer.setCname("888"); customer.setIdList(Arrays.asList(2,3,4)); customer.setCid(3); //条件查询 QueryWrapper<Customer> queryWrapper = new QueryWrapper<>(); // 1) 等值查询 queryWrapper.eq( customer.getPassword()!=null ,"password", customer.getPassword()); // 2) 模糊查询 queryWrapper.like(customer.getCname() != null , "cname",customer.getCname()); // 3) in语句 queryWrapper.in(customer.getIdList() != null , "cid",customer.getIdList()); // 4) 大于等于 queryWrapper.ge(customer.getCid() != null , "cid" , customer.getCid()); //查询 List<Customer> list = customerMapper.selectList(queryWrapper); //list.forEach(customer-> System.out.println(customer)); list.forEach(System.out::println); }
条件更新
- 基本更新
@Test public void testWrapperUpdate(){ // 数据 Customer customer = new Customer(); customer.setCname("测试888"); // 拼凑条件 QueryWrapper<Customer> queryWrapper = new QueryWrapper(); queryWrapper.in("cid",1,2,3,4); // 更新 int result = customerMapper.update(customer, queryWrapper); System.out.println(result); }
分页
内置插件
- 主体插件: MybatisPlusInterceptor,该插件内部插件集:
- 分页插件: PaginationInnerInterceptor
- 多租户插件: TenantLineInnerInterceptor
- 动态表名插件: DynamicTableNameInnerInterceptor
- 乐观锁插件: OptimisticLockerInnerInterceptor
- sql性能规范插件: IllegalSQLInnerInterceptor
- 防止全表更新与删除插件: BlockAttackInnerInterceptor
配置类
package com.czxy.mp.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { /** * 配置插件 * @return */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); // 分页插件 mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return mybatisPlusInterceptor; } /** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除) * @return */ @Bean public ConfigurationCustomizer configurationCustomizer() { return configuration -> configuration.setUseDeprecatedExecutor(false); } }
分页
@Test public void testPage(){ // 分页数据 int pageNum = 1; int pageSize = 3; Page<Customer> page = new Page<>(pageNum , pageSize); page.setSearchCount(true); // 查询 customerMapper.selectPage(page, null); // 分页数据 System.err.println("当前页码:" + page.getCurrent()); System.err.println("每页显示记录数:" + page.getSize()); System.err.println("总页数:" + page.getPages()); System.err.println("总记录数:" + page.getTotal()); System.err.println("是否有下一页:" + page.hasNext()); System.err.println("是否有上一页:" + page.hasPrevious()); // 分页数据列表 page.getRecords().forEach(System.err::println); }
常见注解
表名注解:@TableName
主键注解:@TableId
字段注解(非主键):@TableField
属性 | 描述 |
value | 数据库字段名 |
fill | 字段自动填充策略 FieldFill.INSERT 插入时填充字段 FieldFill.UPDATE 更新时填充字段 FieldFill.INSERT_UPDATE 插入和更新时填充字段 |
常见配置
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #输出日志 map-underscore-to-camel-case: true #驼峰命名 global-config: db-config: id-type: auto #全局配置,id自动增强 table-prefix: tmp_ #表名前缀 type-aliases-package: com.czxy.mp.domain #别名包扫描路径 mapper-locations: classpath*:/mapper/**/*.xml #映射文件位置