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

目录
  • mybatis mapper.xml 区间查询条件
    • 对 null 和 ” 分开进行判断
  • tk mybatis通用mapper,复杂and or条件查询
    • 方式1:Weekend语法
    • 方式2:通用example语法

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方法去连接

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

(0)

相关推荐

  • 利用MyBatis进行不同条件的like模糊查询的方法

    之前一直是用MyBatis进行SQL查询时,一般都是用Generator逆向生产的代码来进行查询. 现在遇到了一个业务问题,我们需要进行对不同的条件分别进行模糊查询,首先我想到的就是根据对需要进行模糊查询的字段进行判断,然后调用Example的方式进行查询条件的注入. 对于String类型的数据可以有Like查询这个方法,但是Integer或者Long这种数据类型的话就没有了,得需要自己动手写. 但是呢,我利用Generator生成的代码Example方式进行模糊查询时确无法实现,原因不太清楚,

  • 在mybatis中使用mapper进行if条件判断

    目的: 在使用mybatis框架中mapper文件有自动生成,但有时需要自己添加sql语句进行开发,当遇到需要使用 if进行条件判断的时候该怎么写? 查询sql语句如下: <select id="queryData" parameterType="com.pojo.QueryDetailReq" resultType="com.pojo.MxDataInfo"> select * from db_trd.tb_trd_secu_ord

  • 利用MyBatis实现条件查询的方法汇总

    SQL映射文件 Mybatis真正强大的是在于它的SQL映射语句,也是它的流弊之处. 它的功能强大,SQL映射文件的配置却比较简单. 使用SQL映射文件可以减少50%以上的代码量. Mybatis专注于SQL,对于开发人员来说可极大限度地进行SQL调优,以保证性能,下面是SQL映射文件的几个顶级元素配置 1.mapper 它是映射文件的根节点,只有一个属性就是 namespace(命名空间)它的作用是区分不同的mapper,里面的参数是全局唯一的,绑定DAO层接口,即面向接口编程 namespa

  • mybatis实现mapper配置并查询数据的思路详解

    mapper开发 开发规范: 2.mapper.java接口中的方法名和mapper.xml中statement的id一致 3.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致. 4.mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致. 首先创建一个entity 创建mapper文件: 创建实现: 创建mapper映射文件: 最后在sqlCon

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

    目录 mybatis mapper.xml 区间查询条件 对 null 和 " 分开进行判断 tk mybatis通用mapper,复杂and or条件查询 方式1:Weekend语法 方式2:通用example语法 mybatis mapper.xml 区间查询条件 对 null 和 " 分开进行判断 <select id="selectByExample" resultMap="BaseResultMap" parameterType=

  • MyBatis Mapper代理使用方法详解

    MyBatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 下文重点给大家介绍mapper代理使用方法. 一.开发人员需要完成的任务: mapper.xml映射文件和mapper.java 二.开发规范

  • Mybatis中Mapper映射文件使用详解

    紧接上文所述,在这篇文章中我将对Mapper映射文件进行详细的说明. Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.delete.select(增删改查);cache.cache-ref.resultMap.parameterMap.sql. 下

  • Mybatis Generator最完美配置文件详解(完整版)

    最近没做项目,重新整理了一个最完整的Mybatis Generator(简称MBG)的最完整配置文件,带详解,再也不用去看EN的User Guide了: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

  • 基于Spring + Spring MVC + Mybatis 高性能web构建实例详解

    一直想写这篇文章,前段时间痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/Eliteams/quick4j 点击打开 源码地址:https://gi

  • Mybatis分页插件的实例详解

    Mybatis分页插件的实例详解 1.前言: 我们知道,在MySQL中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的.但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了. 可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了. 如果你也在用Mybati

  • MyBatis 执行动态 SQL语句详解

    大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中: <select id="executeSql" resultType="map"> ${_parameter} </select> 你可以如下调用: sqlSession.selectList("executeSql", "select * from sysuser where enabled

  • mybatis trim标签的使用详解

    mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 "where"."set"以及"values(" 等前缀,或者添加")"等后缀,可用于选择性插入.更新.删除或者条件查询等操作. 以下是trim标签中涉及到的属性: 属性 描述 prefix 给sql语句拼接的前缀 suffix 给sql语句拼接的后缀 prefixOverrides 去除sql语句前面的关键字或者字符,该关键

  • MyBatis Plus中代码生成器使用详解

    按照官网上实例尝试了一下,感觉MyBatis plus中代码生成器还是很强大的,以下是测试的总结: 使用MybatisPlus的主要依赖 引入plus依赖(苞米豆) <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </depe

  • mybatis plus in方法使用详解

    如果是List类型的String,例如:List<String>这种类型的,就直接放值就可以了,本文讲的是当你查询到的是一个list集合如何遍历取值,否则要写sql和接口就显得很麻烦. 步骤如下: //查询到list集合 List<User> userList = userService.selectById(id); //结果集 List<String> resultList = new ArrayList<>(); //遍历集合取值 userList .

随机推荐