一、前言
前面一个章节讲到,如果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”去掉,然后测试一下,会报错哟。
=======欢迎大家拍砖,小手一抖,多多点赞哟!=======
版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。