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();
}
}
推荐阅读
-
django项目中的ajax分页和条件查询。
-
MyBatis中使用RowBounds对查询结果集进行分页
-
mybatis查询语句的背后之参数解析
-
Mybatis自查询递归查找子
-
PHP查询数据库中满足条件的记录条数(两种实现方法)
-
MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页
-
asp.net实现的MVC跨数据库多表联合动态条件查询功能示例
-
java封装前端查询条件通用版
-
MyBatis从入门到精通(十二):使用collection标签实现嵌套查询
-
序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询 多表关联查询