一、模糊查询关键字
mybatisplus模糊查询可以使用关键字like,like是SQL语言中模糊查询的关键字,其使用方式如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张%");
List<User> userList = userMapper.selectList(queryWrapper);
以上代码查询名字以张开头的用户。
如果想查询包含“张”的用户,可以将“%”放在两个参数中间:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "%张%");
List<User> userList = userMapper.selectList(queryWrapper);
注意:like查询不支持前后模糊查询,例如查询“开发工程师”中包含“工程师”的记录,需要使用下面解释的SQL的like。
二、模糊查询like
mybatisplus还支持SQL的like查询,可以通过在like参数前加入“CONCAT('%', ?, '%')”实现:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.apply("CONCAT('%', name, '%') like {0}", "工程师");
List<User> userList = userMapper.selectList(queryWrapper);
三、模糊查询分页排序
mybatisplus模糊查询支持分页,通过Page分页参数可以轻松实现:
Page<User> userPage = new Page<>(1, 10);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张%");
queryWrapper.orderByAsc("age");
List<User> userList = userMapper.selectPage(userPage, queryWrapper).getRecords();
以上代码查询名字以张开头的用户并且按照年龄升序排序。
四、模糊查询特殊符号
mybatisplus模糊查询使用特殊符号“{}”来提供查询条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "{%张%}")
.or().like("name", "{%李%}");
List<User> userList = userMapper.selectList(queryWrapper);
五、模糊查询两个字段
mybatisplus模糊查询可以同时查询两个字段,如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张%")
.or().like("email", "121%");
List<User> userList = userMapper.selectList(queryWrapper);
以上代码查询名字以张开头或者邮箱包含121的用户。
六、模糊查询问题
mybatisplus模糊查询可能存在忽略大小写的问题,我们可以通过配置来解决,如下:
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new HamsterJdbcInterceptor());
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setPlugins(interceptor);
//xml中的配置
<databaseIdProvider type="DB_VENDOR">
<property name="Vendor">mysql</property>
</databaseIdProvider>
<globalConfig>
<sqlInjector>
<!-- 内置插件SqlLogic,使用方法和:@see com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill -->
<ref bean="mybatisSqlInjector" />
</sqlInjector>
<globalConfig>
<!-- 逻辑删除字段 -->
<!-- 逻辑已删除值(默认为 1) -->
<property name="logicDeleteValue" value="1" />
<!-- 逻辑未删除值(默认为 0) -->
<property name="logicNotDeleteValue" value="0" />
</globalConfig>
</globalConfiguration>
以上代码实现忽略大小写查询。
七、模糊查询notlike
mybatisplus模糊查询可以使用notlike查询,如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLike("name", "张%");
List<User> userList = userMapper.selectList(queryWrapper);
以上代码查询名字不以张开头的用户。
八、模糊查询不区分大小写
mybatisplus模糊查询可以使用忽略大小写的查询方式,如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张%").setCaseInsensitive(true);
List<User> userList = userMapper.selectList(queryWrapper);
以上代码查询名字以张开头,忽略大小写。
九、模糊时间查询
mybatisplus模糊查询可以使用时间范围查询,如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张%")
.between("create_time", "2021-06-01 00:00:00", "2021-06-30 23:59:59");
List<User> userList = userMapper.selectList(queryWrapper);
以上代码查询名字以张开头,并且创建时间在2021年6月份的用户。