mybatis Example条件查询

转自 http://blog.51cto.com/tianxingzhe/1741268


Criterion是最基本,最底层的Where条件,用于字段级的筛选


  • Criteria

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

oredCriteria

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

其他

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

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


代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import  java.io.IOException;
import  java.io.Reader;
import  java.util.ArrayList;
import  java.util.List;
 
import  org.apache.ibatis.io.Resources;
import  org.apache.ibatis.session.SqlSession;
import  org.apache.ibatis.session.SqlSessionFactory;
import  org.apache.ibatis.session.SqlSessionFactoryBuilder;
import  org.apache.log4j.pattern.ClassNamePatternConverter;
import  org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
 
import  cn.itcast.ssm.mapper.ItemsMapper;
import  cn.itcast.ssm.po.ItemsExample;
 
public  class  Student {
 
     public  static  void main( String [] args) throws IOException {
 
         /*方式一  */
         ItemsExample itemsExample1 =  new  ItemsExample();
 
         itemsExample1. or ().andIdEqualTo( 5 ).andNameIsNotNull();
         itemsExample1. or ().andPicEqualTo( "xxx" ).andPicIsNull();
 
         List< Integer > fieldValues =  new  ArrayList< Integer >();
         fieldValues.add( 8 );
         fieldValues.add( 11 );
         fieldValues.add( 14 );
         fieldValues.add( 22 );
         itemsExample1. or ().andIdIn(fieldValues);
         itemsExample1. or ().andIdBetween( 5 9 );
 
         /*  方式二 criteria1与criteria2是or的关系 */
 
         ItemsExample itemsExample2 =  new  ItemsExample();
         ItemsExample.Criteria criteria1 = itemsExample2.createCriteria();
         criteria1.andIdIsNull();
         criteria1.andPriceEqualTo((float)  3 );
 
         ItemsExample.Criteria criteria2 = itemsExample2.createCriteria();
         criteria2.andNameIsNull();
         criteria2.andIdGreaterThanOrEqualTo( 5 );
         itemsExample2. or (criteria2);
 
         //方式一和方式二是等价的
         
         
         // spring获取mapper代理对象
         ApplicationContext applicationContext =  new  ClassPathXmlApplicationContext( "classpath:applicationContext.xml" );
         ItemsMapper itemsMapper = (ItemsMapper) applicationContext.getBean( "itemsMapper" );
         itemsMapper.countByExample(itemsExample2);
 
         // 获取SqlSessionFactory
         String  resource =  "SqlMapConfig.xml" ;
         Reader reader = Resources.getResourceAsReader(resource);
         SqlSessionFactory sqlMapper =  new  SqlSessionFactoryBuilder().build(reader);
         // 获取SqlSession
         SqlSession sqlSession = sqlMapper.openSession();
 
     }
}


JavaBeans类的成员变量一般称为属性(property)。对每个属性访问权限一般定义为privateprotected,而不是定义为public的。注意:属性名必须以小写字母开头。 

对每个属性,一般定义两个public方法,它们分别称为访问方法(getter)和修改方法(setter),允许容器访问和修改bean的属性。 

      public String getColor();

      public void setColor(String);

一个例外是当属性是boolean类型时,访问器方法应该定义为isXxx()形式。


对象类型

虽然可以明确的引用对象的属性名了,但如果要在if元素中测试传入的user参数,仍然要使用_parameter来引用传递进来的实际参数,因为传递进来的User对象的名字是不可考的。如果测试对象的属性,则直接引用属性名字就可以了。

测试user对象:

?
1
< if  test = "_parameter != null" >

测试user对象的属性:

?
1
< if  test = "name != null" >


map类型

传入map类型,直接通过#{keyname}就可以引用到键对应的值。使用@param注释的多个参数值也会组装成一个map数据结构,和直接传递map进来没有区别。

mapper接口:

?
1
int  updateByExample( @Param ( "user" ) User user,  @Param ( "example" ) UserExample example);

sql映射:

?
1
2
3
4
5
6
7
   < update  id = "updateByExample"  parameterType = "map"  >
     update tb_user
     set id = #{user.id,jdbcType=INTEGER},
     ...
     < if  test = "_parameter != null"  >
       < include  refid = "Update_By_Example_Where_Clause"  />
     </ if >

注意这里测试传递进来的map是否为空,仍然使用_parameter

猜你喜欢

转载自blog.csdn.net/samrtian/article/details/79933273
今日推荐