Criteria

包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系。

oredCriteria

Example内有一个成员叫oredCriteria,是Criteria的集合,就想其名字所预示的一样,这个集合中的Criteria是由OR连接的,是逻辑或关系。oredCriteria就是ORed Criteria。

or()方法,会产生一个新的Criteria对象,添加到oredCriteria中,并返回这个Criteria对象,从而可以链式表达,为其添加Criterion。

查询条件1:a=? and (b=? or c=?) 不支持

查询条件2:(a=? and b=?) or (a=? and c=?) 支持

 

基本概念

Criterion

Criterion是最基本、最底层的Where条件,用于字段级的筛选,field用于指代字段名字

列举如下:

只有一个条件,不需要其他参考值
field IS NULL
field IS NOT NULL

与一个参考值进行算数运算
field > value
field >= value
field = value
field <> value
field <= value
field < value

与一个参考值进行模糊查询,参值中的%,?只能在构造查询条件时手动指定。

field LIKE value
field NOT LIKE value

介于两个参考值之间

field BETWEEN value AND secondValue

在或不在一个参考值集合中,item来自于value集合

field IN (item, item, item,...)
field NOT IN (item, item, item, ...)

MyBatis Generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。理论上通过Example类可以构造你想到的任何筛选条件。

 

用法

示例来自 官方文档

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)  

 

其他

Example类的distinct字段用于指定DISTINCT查询。

orderByClause字段用于指定ORDER BY条件,这个条件没有构造方法,直接通过传递字符串值指定。

 

MyBatis 常用方法

MyBatis 数据源配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">   
    <property name="driverClassName" value="${jdbc.driverClassName}" />   
    <property name="url" value="${jdbc.url}" />   
</bean>   

<!-- 加载myBatis-config.xml配置文件,以及扫描myBatis/目录下每个DAO对应的SQL配置的XML文件 -->  
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
	<property name="dataSource" ref="dataSource" />  
	<property name="configLocation" value="classpath:myBatis-config.xml" />  
	<property name="mapperLocations" value="classpath:mybatis/*.xml" />  
</bean>  

<!-- 将basePackage下的interface,转换为spring bean,service中可以直接 注入使用 -->  
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
	<property name="basePackage" value="com.test.my.dal.dao"></property>  
</bean>  

 

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">  
<configuration>  
    <settings>  
        <!-- 是否启用 数据中 a_column 自动映射 到 java类中驼峰命名的属性。[默认:false] -->  
        <setting name="mapUnderscoreToCamelCase" value="true" />  
    </settings>  
    <typeAliases>  
        <!-- 映射关系 -->  
        <typeAlias alias="UserPojo" type="com.test.my.dal.dao.domain.UserPojo" />  
    </typeAliases>  
    <mappers></mappers>  
</configuration>  

 

 

参考推荐

MyBatis Generator 生成的example 如何使用 and or 简单混合查询

MyBatis 常用方法推荐