mybatis mapper.xml 区间查询条件详解

 更新时间:2021年09月30日 11:34:36   作者:倾-尽  
这篇文章主要介绍了mybatis mapper.xml 区间查询条件详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis mapper.xml 区间查询条件

对 null 和 ” 分开进行判断

<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.test.entity.TestQuery">
SELECT 
    *
    FROM
    test s
    WHERE 1=1

    <!-- 创建时间 -->
    <if test="createTime!=null and createTime!=''">
        AND s.create_time = #{createTime,jdbcType=TIMESTAMP}
    </if>
    <!-- 开始创建时间,结束创建时间都不为空 -->
    <if test="beginCreateTime!=null and beginCreateTime!='' and endCreateTime!=null and endCreateTime!=''">
        AND s.create_time &gt;= #{beginCreateTime,jdbcType=TIMESTAMP}
        AND s.create_time &lt;= #{endCreateTime,jdbcType=TIMESTAMP}
    </if>
    <!-- 开始不为空,结束为空 null -->
    <if test="beginCreateTime!=null and beginCreateTime!='' and endCreateTime==null">
        AND s.create_time &gt;= #{beginCreateTime,jdbcType=TIMESTAMP}
    </if>
    <!-- 开始不为空,结束为空 '' -->
    <if test="beginCreateTime!=null and beginCreateTime!='' and endCreateTime==''">
        AND s.create_time &gt;= #{beginCreateTime,jdbcType=TIMESTAMP}
    </if>
    <!-- 开始为空 null,结束不为空 -->
    <if test="beginCreateTime==null  and endCreateTime!=null and endCreateTime!=''">
        AND s.create_time &lt;= #{endCreateTime,jdbcType=TIMESTAMP}
    </if>
    <!-- 开始为空 '',结束不为空 -->
    <if test="beginCreateTime==''  and endCreateTime!=null and endCreateTime!=''">
        AND s.create_time &lt;= #{endCreateTime,jdbcType=TIMESTAMP}
    </if>

</select>

tk mybatis通用mapper,复杂and or条件查询

需求:where查询,需要支持(a or b or c) and d

也就是a、b、c三个条件是或的关系,然后再与d相与。

尝试后,可以通过以下方式处理:

方式1:Weekend语法

     Weekend<User> weekend = new Weekend<>(User.class);
        //关键字查询部分
        String keyword = pageReq.getKeyword();
        WeekendCriteria<User, Object> keywordCriteria = weekend.weekendCriteria();
        if (StringUtils.isNotEmpty(keyword)) {
            keywordCriteria.orLike(User::getUserName, keyword).orLike(User::getPoliceNo, keyword).orLike(User::getRealName, keyword);
        //此处不需要再用下面这一句了,不然上面这个条件组合会重复一次
            //weekend.and(keywordCriteria)
        }
        //部门查询部分
        Example example = new Example(User.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("departmentId", departmentId);
        weekend.and(criteria);

        PageHelper.startPage(pageReq.getPageIndex(), pageReq.getPageSize());
        List<User> users = userMapper.selectByExample(weekend);

ps:上面,其中Weekend是高版本的通用mapper版本才有,而且需要java8语法支持。

方式2:通用example语法

        Example e = new Example(User.class);
        Example.Criteria c = e.createCriteria();

        //关键字查询部分
        String keyword = pageReq.getKeyword();
        if (StringUtils.isNotEmpty(keyword)) {
            c.orEqualTo("userName", keyword).orEqualTo("policeNo",keyword).orEqualTo("realName",keyword);
        }
        //部门查询部门
        Example.Criteria criteria = e.createCriteria();
        criteria.andEqualTo("departmentId", departmentId);
        e.and(criteria);

        PageHelper.startPage(pageReq.getPageIndex(), pageReq.getPageSize());
        List<User> users = userMapper.selectByExample(e);

执行的sql为:

WHERE (
  user_name = ? 
  OR police_no = ? 
  OR real_name = ?
) 
AND (department_id = ?)

总结下来,就是,

每个条件组合(a/b/c) (d)各自创建自己的cirteria,再用and或者or方法去连接

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java学习笔记之eclipse+tomcat 配置

    java学习笔记之eclipse+tomcat 配置

    俗话说:工欲善其事必先利其器,既然要学习java,首先把java的开发环境捣鼓一下吧,这里我们来谈谈eclipse+tomcat的配置方法。
    2014-11-11
  • Java使用ChatGPT的API详解

    Java使用ChatGPT的API详解

    OpenAI API 几乎可以应用于任何涉及理解或生成自然语言或代码的任务。本文将带你们介绍Java如何使用ChatGPT的API,感兴趣的同学可以跟着小编一起来学习
    2023-04-04
  • jsp中存取session值简单介绍

    jsp中存取session值简单介绍

    这篇文章主要介绍了jsp中存取session值简单介绍,涉及request和session的域操作等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java PDF 添加数字签名的实现方法

    Java PDF 添加数字签名的实现方法

    这篇文章主要介绍了Java PDF 添加数字签名的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • java外卖订餐系统小项目

    java外卖订餐系统小项目

    这篇文章主要为大家详细介绍了java外卖订餐系统小项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Kafka多节点分布式集群搭建实现过程详解

    Kafka多节点分布式集群搭建实现过程详解

    这篇文章主要介绍了Kafka多节点分布式集群搭建实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java使用BeanUtils.copyProperties踩坑经历

    java使用BeanUtils.copyProperties踩坑经历

    最近在做个项目,踩了个坑特此记录一下,本文主要介绍了使用BeanUtils.copyProperties踩坑经历,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • java-SSH2实现数据库和界面的分页

    java-SSH2实现数据库和界面的分页

    本文主要是介绍SSH2实现数据库和界面的分页的代码,分页在web应用中是经常要做的事情,实用性比较大,有需要的朋友可以来了解一下。
    2016-10-10
  • java学习之一维数组中重复元素的去除

    java学习之一维数组中重复元素的去除

    关于一维数组中有重复的元素该怎么剔除,作为java初学者的我整理出不调用任何特殊库的基础方法,这种思想在其他语言也适用,有需要的朋友可以借鉴参考下
    2021-09-09
  • 解决Required request body is missing错误的问题

    解决Required request body is missing错误的问题

    这篇文章主要介绍了解决Required request body is missing错误的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论