您的位置:

mybatisplus模糊查询详解

一、模糊查询关键字

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月份的用户。