欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis Example条件查询

程序员文章站 2022-03-01 17:23:56
...

一.Criterion

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

 

二.Criteria

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

oredCriteria

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

其他

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

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

 

三.对象类型

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

测试user对象:

<if test="_parameter != null">

测试user对象的属性:

<if test="name != null">

 

四.map类型

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

 

五.mapper接口:

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

sql映射:

  <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

 

六.实例:

//封装查询条件
UserExample example = new UserExample();
//创建一个 Criteria,来拼装查询条件
UserExample.Criteria criteria1 = example.createCriteria();
criteria1.andNameLike("%e%");
criteria1.andAgeBetween(10,30);

UserExample.Criteria criteria2 = example.createCriteria();
criteria2.andNameLike("%o%");

example.or(criteria2);

@Test
public void testMBG() throws IOException {
   SqlSession sqlSession = getSqlSessionFactory().openSession(true);
   try {
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);

       //封装查询条件
       UserExample example = new UserExample();
       //创建一个 Criteria,来拼装查询条件
       UserExample.Criteria criteria1 = example.createCriteria();
       criteria1.andNameLike("%e%");

       UserExample.Criteria criteria2 = example.createCriteria();
       criteria2.andNameLike("%o%");
       example.or(criteria2);
       // 此时 sql 语句被拼接为 select id,name,age,d_id from users where (name like ?) or (name like ?)
       mapper.selectByExample(example);
example.or(criteria2);
   } finally {
      sqlSession.close();
   }
}

 

相关标签: mybatis