`

[转]Mybatis的or逻辑

阅读更多
Mybatis代码生成器生成的Example中的Criteria可以用来组装sql语句。其中or逻辑的组装有点不好理解。
 
Criteria
Criteria包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系。
 
oredCriteria
Example内有一个成员叫oredCriteria,是Criteria的集合,就想其名字所预示的一样,这个集合中的Criteria是由OR连接的,是逻辑或关系。oredCriteria就是ORed Criteria。
 
使用or逻辑的两个例子:
1.
TestTableExample example = new TestTableExample();
 
  example.or()
    .andField1EqualTo(5)
    .andField2IsNull();
 
  example.or()
    .andField3NotEqualTo(9)
    .andField4IsNotNull();
 
  List<Integer> field5Values = new ArrayList<Integer>();
  field5Values.add(8);
  field5Values.add(11);
  field5Values.add(14);
  field5Values.add(22);
 
  example.or()
    .andField5In(field5Values);
 
  example.or()
    .andField6Between(3, 7);
 
or()方法会产生一个新的Criteria对象,添加到oredCriteria中,并返回这个Criteria对象,从而可以链式表达,为其添加Criterion。产生的动态SQL是这样的:
where (field1 = 5 and field2 is null)
     or (field3 <> 9 and field4 is not null)
     or (field5 in (8, 11, 14, 22))
     or (field6 between 3 and 7)
 
===
2.
ViewPsmsgconsultExample example=new ViewPsmsgconsultExample();  
ViewPsmsgconsultExample.Criteria criteria=example.createCriteria();  
criteria.andToidEqualTo(mctid);  
criteria.andStatusEqualTo("0");  
          
ViewPsmsgconsultExample.Criteria criteria2=example.createCriteria();  
criteria2.andToidEqualTo(mctid);  
criteria2.andLaststatusEqualTo("0");  
example.or(criteria2);  
psmsgconsultDao.countByExample(example);  
 
select count(*) from VIEW_PSMSGCONSULT WHERE ( TOID = ? and STATUS = ? ) or( TOID = ? and LASTSTATUS = ? )
 
这两种方式得到的结果一样的,写法上有些不同。要运行时查看生成的详细sql语句,使用下面log4j的配置
 
 
log4j.rootLogger=debug,...
 
...
 
###显示SQL语句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
转自:http://ljhzzyx.blog.163.com/blog/static/38380312201412043525595/
分享到:
评论

相关推荐

    myBatis or ibatis 神器

    标题中的“myBatis or ibatis 神器”指的是两个知名的Java持久层框架——myBatis和iBatis。这两个框架在Java开发中扮演着重要角色,它们简化了数据库操作,让开发者能够更加专注于业务逻辑,而不是底层的SQL查询。 ...

    mybatis Mapper.xml中传参多选 字符串形式逗号分隔 AND中拼接OR.rar

    在Mybatis中,我们经常需要处理复杂的SQL查询,其中涉及到多条件筛选,这些条件可能是可选的,并且可能需要在`AND`与`OR`之间灵活切换。标题和描述所提及的问题是关于如何在Mapper.xml文件中处理字符串形式的参数,...

    逻辑表达式& | ! 转sql逻辑查询 and or not 逻辑表达式转sql逻辑查询 使用mybatis @SelectProvider

    //keywords 为输入 逻辑查询关键词 public List countList(String keywords) { //逻辑语句转换 String title = ExpToSqlUtils.expToSql(keywords, title, like , 1); //查询结果 List list = testMapper....

    mybatis小练习

    用户可以编写动态SQL,根据传入参数改变SQL的执行逻辑。例如,你可以使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签实现条件判断,或使用`&lt;foreach&gt;`遍历集合进行批量操作。 2. **mybatis2_1_properties**...

    springmybatis

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...

    mybatis之动态SQL

    MyBatis 的动态 SQL 功能使得开发者不必过于关注 SQL 的细节,而更多地专注于业务逻辑本身,从而提升了开发效率。 在实际项目中,我们还需要注意 SQL 注入的问题。MyBatis 提供了预编译的 SQL 语句和参数绑定机制,...

    mybatis关联/级联以及动态sql

    2. `&lt;where&gt;`:用于构建WHERE子句,可以避免重复的AND或OR开头,提高SQL的规范性。当没有条件时,它会自动忽略开头的AND,避免生成无效的"WHERE AND"。 3. `&lt;choose&gt;`(when/otherwise):类似于Java的switch语句,...

    mybatis笔记

    - ****:自动处理 where 关键词及多余 and/or 的问题。 - ****:用于更新操作,处理 set 关键词及多余的逗号。 - ****:灵活处理前后缀及多余符号。 - ****:循环遍历集合。 #### 示例代码 - **&lt;if&gt; 示例**: ...

    mybatis-generator 修改版

    至于文件"mybatis-generator-testor",这可能是修改版MBG的一个测试项目或者测试用例。它可能包含了用于验证修改版MBG功能的数据库配置、MBG的配置文件以及预期生成的代码模板。通过运行这个测试,开发者可以确保...

    springboot整合mybatis调用oracle存储过程

    CREATE OR REPLACE PROCEDURE get_users_by_cursor (cursor OUT SYS_REFCURSOR) AS BEGIN OPEN cursor FOR SELECT * FROM users; END; / ``` 这个存储过程会打开一个游标并返回`users`表中的所有记录。 在MyBatis...

    MyBatis自定义映射 级联属性操作.zip

    Example类可以生成基于字段的查询条件,而Criteria API则可以构建更复杂的逻辑条件。 5. **MyBatis缓存** MyBatis支持一级缓存(SqlSession级别)和二级缓存(Mapper级别),通过缓存机制可以提高数据访问性能。...

    Mybatis Plus 自定义批量插入或批量更新(根据唯一索引)

    Mybatis Plus 是 Mybatis 的一个扩展工具,它在 Mybatis 的基础上提供了许多便捷的功能,包括自动 CRUD 操作、条件构造器、批量操作等。在实际的项目开发中,批量插入和批量更新是常见的数据处理场景,尤其是在处理...

    Mybatis复杂映射开发开源架构源码2021.pdf

    `&lt;where&gt;`标签则用于动态构建where子句,并且能够智能处理SQL中的AND和OR。如果where子句中没有条件成立,那么where标签不会生成任何SQL代码,避免了逻辑错误。 此外,Mybatis的动态SQL还包括`&lt;choose&gt;`, `&lt;when&gt;`,...

    Mybatis-Plus实战

    它们支持and、or、eq、ne、like等条件,使得动态SQL编写变得简单。 四、高级特性 1. 自动填充:MP支持字段自动填充,如创建时间、更新时间等,只需在实体类中定义注解@TableField(fill = FieldFill.INSERT)。 2. ...

    mybatis调用orclae存储过程

    在Oracle数据库中,存储...这使得Java应用程序可以灵活地利用数据库提供的复杂逻辑,同时保持MyBatis的简单易用性。注意,实际应用中可能需要考虑事务管理、异常处理等其他方面的问题,以确保程序的健壮性和稳定性。

    Mybatis-plus.zip

    8. **自定义全局配置**:通过配置Mybatis-plus的全局配置类,可以设置诸如逻辑删除、是否开启SQL日志等功能。例如,设置逻辑删除的字段和值: ```java @Bean public GlobalConfig globalConfig() { ...

    mybatis的开发

    - **where**:动态添加 WHERE 子句,并自动处理第一个单词(如 "AND" 或 "OR")。 - **foreach**:循环遍历集合,用于 IN 子句等。 - **sql** 片段:复用 SQL 代码块,提高重用性和可读性。 综上所述,MyBatis ...

    Mybatis plus无介绍快使用,Wrapper条件构造器的使用附源码(五)

    Wrapper还支持and、or、not等逻辑操作,以及between、isNull、isNotNull等特殊条件。例如: ```java QueryWrapper&lt;User&gt; wrapper = new QueryWrapper(); wrapper.and(w -&gt; w.eq("name", "张三").or().eq("age", 18)...

Global site tag (gtag.js) - Google Analytics