老司机学习MyBatis之动态SQL使用trim自定义字符串截取

一、前言

前面一个章节讲到,如果where标签里面,and或者or写在后面,最后字符串拼串后,如果最后一个条件没有加上,可能会出现SQL多出 and或者or 的情形。那我们是不是没有办法解决这种问题的产生,事实上MyBatis为我们提供了另外一种标签trim,可以简单粗暴的解决这个问题,下面我们通过案例来看看如何实现?

二、案例

我们先来看看前面使用where标签时的情景


现在我们对上面的XML做如下改造


在EmpMapper.java文件中增加findEmpByConditionsTrim方法

/**
* 根据部门ID查询该部门下的所有员工信息
* @param id
 * @return
 */
public Emp findEmpByConditionsTrim(Emp emp);

修改MybatisTest类,增加测试方法testFindEmpByConditionTrim

@Test
public void testFindEmpByConditionTrim() throws IOException {
	SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
	SqlSession openSession = sqlSessionFactory.openSession();
	try {
		EmpMapper mapper = openSession.getMapper(EmpMapper.class);
		Emp emp = new Emp(null,"queen","[email protected]",null);
		Emp empFind = mapper.findEmpByConditionsTrim(emp);
		System.out.println(empFind);
	} finally {
		openSession.close();
	}
 
}

测试方法,控制台打印结果如下

2017-08-12 22:07:23,773 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsTrim]-[DEBUG] ==>  Preparing: select id,emp_name empName,emp_email empEmail, dept_id deptId from t_emp where emp_name=? and emp_name=? 
2017-08-12 22:07:23,825 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsTrim]-[DEBUG] ==> Parameters: queen(String), queen(String)
2017-08-12 22:07:23,865 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsTrim]-[DEBUG] <==      Total: 1
Emp [id=1, empName=queen, [email protected], deptId=1]

如上,SQL打印正常,即使拼串过程中and或者or写在后面,也能够实现自定义的截取规则,大家可以试着将suffixOverrides=”and”去掉,然后测试一下,会报错哟。



=======欢迎大家拍砖,小手一抖,多多点赞哟!=======

版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。


猜你喜欢

转载自blog.csdn.net/gaomb_1990/article/details/80640218