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 神器”指的是两个知名的Java持久层框架——myBatis和iBatis。这两个框架在Java开发中扮演着重要角色,它们简化了数据库操作,让开发者能够更加专注于业务逻辑,而不是底层的SQL查询。 ...
在Mybatis中,我们经常需要处理复杂的SQL查询,其中涉及到多条件筛选,这些条件可能是可选的,并且可能需要在`AND`与`OR`之间灵活切换。标题和描述所提及的问题是关于如何在Mapper.xml文件中处理字符串形式的参数,...
CREATE OR REPLACE PROCEDURE get_users_by_cursor (cursor OUT SYS_REFCURSOR) AS BEGIN OPEN cursor FOR SELECT * FROM users; END; / ``` 这个存储过程会打开一个游标并返回`users`表中的所有记录。 在MyBatis...
//keywords 为输入 逻辑查询关键词 public List countList(String keywords) { //逻辑语句转换 String title = ExpToSqlUtils.expToSql(keywords, title, like , 1); //查询结果 List list = testMapper....
用户可以编写动态SQL,根据传入参数改变SQL的执行逻辑。例如,你可以使用`<if>`、`<choose>`、`<when>`、`<otherwise>`等标签实现条件判断,或使用`<foreach>`遍历集合进行批量操作。 2. **mybatis2_1_properties**...
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...
MyBatis 的动态 SQL 功能使得开发者不必过于关注 SQL 的细节,而更多地专注于业务逻辑本身,从而提升了开发效率。 在实际项目中,我们还需要注意 SQL 注入的问题。MyBatis 提供了预编译的 SQL 语句和参数绑定机制,...
2. `<where>`:用于构建WHERE子句,可以避免重复的AND或OR开头,提高SQL的规范性。当没有条件时,它会自动忽略开头的AND,避免生成无效的"WHERE AND"。 3. `<choose>`(when/otherwise):类似于Java的switch语句,...
- ****:自动处理 where 关键词及多余 and/or 的问题。 - ****:用于更新操作,处理 set 关键词及多余的逗号。 - ****:灵活处理前后缀及多余符号。 - ****:循环遍历集合。 #### 示例代码 - **<if> 示例**: ...
至于文件"mybatis-generator-testor",这可能是修改版MBG的一个测试项目或者测试用例。它可能包含了用于验证修改版MBG功能的数据库配置、MBG的配置文件以及预期生成的代码模板。通过运行这个测试,开发者可以确保...
Example类可以生成基于字段的查询条件,而Criteria API则可以构建更复杂的逻辑条件。 5. **MyBatis缓存** MyBatis支持一级缓存(SqlSession级别)和二级缓存(Mapper级别),通过缓存机制可以提高数据访问性能。...
`<where>`标签则用于动态构建where子句,并且能够智能处理SQL中的AND和OR。如果where子句中没有条件成立,那么where标签不会生成任何SQL代码,避免了逻辑错误。 此外,Mybatis的动态SQL还包括`<choose>`, `<when>`,...
它们支持and、or、eq、ne、like等条件,使得动态SQL编写变得简单。 四、高级特性 1. 自动填充:MP支持字段自动填充,如创建时间、更新时间等,只需在实体类中定义注解@TableField(fill = FieldFill.INSERT)。 2. ...
在Oracle数据库中,存储...这使得Java应用程序可以灵活地利用数据库提供的复杂逻辑,同时保持MyBatis的简单易用性。注意,实际应用中可能需要考虑事务管理、异常处理等其他方面的问题,以确保程序的健壮性和稳定性。
QueryWrapper还支持逻辑运算符,如`and`、`or`,可以组合多个条件进行查询。例如: ```java queryWrapper.and(wrapper -> wrapper.eq("name", "张三").or().eq("name", "李四")); ``` 这段代码将查询名字为"张三...
8. **自定义全局配置**:通过配置Mybatis-plus的全局配置类,可以设置诸如逻辑删除、是否开启SQL日志等功能。例如,设置逻辑删除的字段和值: ```java @Bean public GlobalConfig globalConfig() { ...
- **where**:动态添加 WHERE 子句,并自动处理第一个单词(如 "AND" 或 "OR")。 - **foreach**:循环遍历集合,用于 IN 子句等。 - **sql** 片段:复用 SQL 代码块,提高重用性和可读性。 综上所述,MyBatis ...
Wrapper还支持and、or、not等逻辑操作,以及between、isNull、isNotNull等特殊条件。例如: ```java QueryWrapper<User> wrapper = new QueryWrapper(); wrapper.and(w -> w.eq("name", "张三").or().eq("age", 18)...
这样,查询和插入操作在逻辑上是分离的,避免了MySQL的限制。修改后的XML映射文件如下: ```xml insert into chat_messages ( from_user_id, to_user_id, message, status, messages_type, cover_image, ...