mybatis createcriteria和or的区别说明

createcriteria和or的区别

mybatis generator插件生成的example中,有createcriteria和or方法,他们有什么区别呢?

通过源码,能很清楚的看出差别

createcriteria,当没有规则时,则加入到现有规则,但有规则时,不再加入到现有规则,只是返回创建的规则

public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
 }

or,创建的规则,加入到规则集中,并且是or的关系

public Criteria or() {
    Criteria criteria = createCriteriaInternal();
    oredCriteria.add(criteria);
    return criteria;
}

mybatis中Example的and和or

能用Example代码解决的,我都不会去写个SQL放在项目里。我希望让代码尽量优雅、易读,所以这里记录一下关于MyBatis中Example的and和or的使用,主要是如下两种场景:

  • where (条件1 and 条件2) or (条件3 and 条件4)
  • where (条件1 and 条件2) and (条件3 or 条件4)

where (条件1 and 条件2) or (条件3 and 条件4)

//条件1 and 条件2
example.createCriteria()
        .andEqualTo("isDeleted",IsDeleted.NOT_DELETED)
        .andEqualTo("name", projectCatalogEntity.getName());
//or (条件3 and 条件4)
example.or(example.createCriteria()
        .andEqualTo("isDeleted",IsDeleted.NOT_DELETED)
        .andEqualTo("code", projectCatalogEntity.getCode()));

WHERE ( is_deleted = ? and name = ? ) or ( is_deleted = ? and code = ? )

where (条件1 and 条件2) and (条件3 or 条件4)

//条件1 and 条件2
example.createCriteria()
        .andEqualTo("isDeleted",IsDeleted.NOT_DELETED))
        .andEqualTo("parentId", projectCatalogEntity.getParentId());
//and (条件3 or 条件4)
example.and(example.createCriteria()
        .andEqualTo("name", projectCatalogEntity.getName())
        .orEqualTo("code", projectCatalogEntity.getCode()));

WHERE ( is_deleted = ? and parent_id = ? ) and ( name = ? or code = ? )

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

(0)

相关推荐

  • mybatis insert foreach循环插入方式

    mybatis insert foreach循环插入 @Insert("<script>" + "insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values\n" + "<foreach collection=\"photoList\" item=\"item\" index=\"index\&q

  • 解析Mybatis Porxy动态代理和sql解析替换问题

    JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Mybatis之前,原生的 JDBC 有几个步骤:导入 JDBC 驱动包,通过 DriverManager 注册驱动,创建连接,创建 Statement,增删改查,操作结果集,关闭连接 过程详解 首先进行类的加载,通过 DriverManager 注册驱动 Class.forName("com.mysql.jdbc.Driver"); Connection connection

  • 解析Mybatis SqlSessionFactory初始化原理

    目录 引言 SqlSessionFactory 不使用 XML 构建 SqlSessionFactory SqlSessionFactoryBuilder 拓展 引言 现在内卷越来越严重,关于常用的ORM框架Mybatis,小编准备了三篇文章,分别将介绍SqlSessionFactory初始化原理.SqlSession执行流程,Mybatis代理模式运行方式与最终总结,这是第一篇,感兴趣的朋友可以持续关注. SqlSessionFactory 每个基于 MyBatis 的应用都是以一个 SqlS

  • MyBatis-Plus使用ActiveRecord(AR)实现CRUD

    目录 1.什么是ActiveRecord(AR)? 2.通过AR实现CRUD 1.1 insert 1.2 update 1.3 delete 1.4 select 1.什么是ActiveRecord(AR)? ActiveRecord 是什么: 每一个数据库表应该对应创建一个实体类,类的每一个对象的实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的方法Field; ActiveRecord 负责把自己持久化. 在 ActiveRecord 中封装了对数据库的访问,通过对象自己实

  • Mybatis中and和循环or混用操作(or转换成in)

    Mybatis and和循环or混用 这次项目用到一个and和or混用的场景 , 因为用到多个or(循环), 没想到好的办法 最终转换成用 IN实现: 场景 用left join链接多个表, 多个条件and筛选, 其中状态(state)条件筛选出多个可选状态的条目, 本来想用and 和 or 但是 or的条件是个数组参数, 需要遍历states , 可能0个可能多个, 拼了半天没有成功 , 最后发现用 IN 和FOREACH就可以了 DAO层接口 List<OrderInfoForm> sel

  • mybatis框架order by作为参数传入时失效的解决

    mybatis order by作为参数传入失效 mxl中的语句如下 <select id="statToday" resultType="com.dahua.la.business.model.vo.StatSysResultVO"> select a, b, count(1) as total from table where a is not null and b is not null and operateTime >= #{startT

  • Mybatis一级缓存和结合Spring Framework后失效的源码探究

    1.在下面的案例中,执行两次查询控制台只会输出一次 SQL 查询: mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"

  • mybatis createcriteria和or的区别说明

    createcriteria和or的区别 mybatis generator插件生成的example中,有createcriteria和or方法,他们有什么区别呢? 通过源码,能很清楚的看出差别 createcriteria,当没有规则时,则加入到现有规则,但有规则时,不再加入到现有规则,只是返回创建的规则 public Criteria createCriteria() { Criteria criteria = createCriteriaInternal(); if (oredCriter

  • 浅谈mybatis中的#和$的区别 以及防止sql注入的方法

    mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的

  • 浅谈mybatis中的#和$的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord

  • Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from user where name = "dato"; select * from user where name = #{name}; select * from user where name = '${name}'; 一般情况下,我们都不会注意到这里面有什么不一样的地方.因为这些sql都可以

  • MyBatis中#{}和${}有哪些区别

    目录 前言 #{} 和 ${} 的区别 #{} 和 ${} 的实例:假设传入参数为 1 实例步骤一 实例步骤二 实例步骤三 #{} 和 ${} 的大括号中的值 #{} 和 ${} 在使用中的技巧和建议 总结 前言 在MyBatis 的映射配置文件中,动态传递参数有两种方式: 1.#{} 占位符 2.${} 拼接符 #{} 和 ${} 的区别 区别1 #{} 为参数占位符 ?,即sql 预编译 ${} 为字符串替换,即 sql 拼接 区别2. #{}:动态解析 -> 预编译 -> 执行 ${}:

  • MyBatis ofType和javaType的区别说明

    目录 ofType和javaType的区别 MyBatis笔记 javatype和ofType ofType和javaType的区别 JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是 映射到list集合属性中pojo的类型 . pojo类: public class User {      private int id ;      private String username ;      private Str

  • mybatis collection和association的区别解析

    目录 1.collection标签 1.1 相关代码和运行结果 1.2 collection部分源码解析 1.3 <collection>和<association>的相同的和不同点 最后 1.collection标签 说到mybatis的collection标签,我们肯定不陌生,可以通过它解决一对多的映射问题,举个例子一个用户对应多个系统权限,通过对用户表和权限表的关联查询我们可以得到好多条记录,但是用户信息这部分在多条记录中是重复的,只有权限不同,我们需要把这多条权限记录映射到

  • Mybatis中#{}和${}传参的区别及#和$的区别小结

    最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是 select * from table where name = '小李',就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果

  • mybatis中${}和#{}取值的区别分析

    mybatis作为一个轻量级的ORM框架,应用广泛,其上手使用也比较简单:一个成熟的框架,必然有精巧的设计,值得学习. 在使用mybatis框架时,在sql语句中获取传入的参数有如下两种方式: ${paramName} #{paramName} 那如何理解这两种传参方式呢?如下带你走近背后的奥义. 先来回顾下原生Jdbc查询: public static void main(String[] args) throws Exception { // sql语句 String sql = "sele

  • mybatis 模糊查询的实现方法

    mybatis 模糊查询的实现方法 mybatis的逆向助手确实好用,可以省去很多编写常规sql语句的时间,但是它没办法自动生成模糊查询语句,但开发中模糊查询是必不可少的,所以,需要手动对mapper编写模糊查询功能. 这里先明确MyBatis/Ibatis中#和$的区别: 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解

随机推荐