[mybatis]动态sql_if_where_trim判断&OGNL
Posted 唐火
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[mybatis]动态sql_if_where_trim判断&OGNL相关的知识,希望对你有一定的参考价值。
OGNL
if
要求:查询员工,要求,携带了哪个字段查询条件就带上这个字段的值
//携带了哪个字段查询条件就带上这个字段的值
public List<Employee> getEmpsByConditionIf(Employee employee);
<!-- public List<Employee> getEmpsByConditionIf(Employee employee);-->
<select id="getEmpsByConditionIf" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee
where
<!--test,判断表达式(OGNL)
OGNL参照PPT或者官方文档
c:if test
从参数中取值进行判断
遇见特殊符号应该去写转义字符;
-->
<if test = "id!=null">
id = #id
</if>
<if test = "lastName!=null && lastName!=""">
and last_name like #lastName
</if>
<if test="email!=null and email.trim()!=""">
and email = #email
</if>
<!--ognl会进行字符串与数字的转换判断 "0"==0 -->
<if test="gender==0 or gender==1">
and gender = #gender
</if>
</select>
@Test
public void test04() throws IOException
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
try
EmployeeMapperDynamicSQL mapper = sqlSession.getMapper(EmployeeMapperDynamicSQL.class);
Employee employee = new Employee(3,"%e%","jerry@qq.com",null);
List<Employee> emps = mapper.getEmpsByConditionIf(employee);
for (Employee emp:emps)
System.out.println(emp);
finally
sqlSession.close();
- 查询的时候,如果某些条件没带,sql的拼装可能出现问题
解决方法,使用where
where
- 第一种方法
给where后面加上1=1,以后的条件都and xxx
- 第二种方法
mybatis使用where标签来将所有的查询条件包括在内。mybatis就会将where标签中拼接的sql,多出来的and或者or去掉,where只会去掉第一个多出来的and或者or。
<!-- public List<Employee> getEmpsByConditionIf(Employee employee);-->
<select id="getEmpsByConditionIf" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee
<where>
<if test = "id!=null">
id = #id
</if>
<if test = "lastName!=null && lastName!=""">
and last_name like #lastName
</if>
<if test="email!=null and email.trim()!=""">
and email = #email
</if>
<!--ognl会进行字符串与数字的转换判断 "0"==0 -->
<if test="gender==0 or gender==1">
and gender = #gender
</if>
</where>
</select>
trim
后面多出的and或者or where标签不能解决
- prefix = “”:前缀;trim标签体中整个字符串拼串后的结果。
- prefix给拼串后的整个字符串加一个前缀
- prefixOverrides = “”:前缀覆盖;去掉整个字符串多余的字符
- suffix = “”:给拼串后的整个字符串加一个后缀
- suffixOverrides = “”:后缀覆盖;去掉整个字符串后面多余的字符
<!-- public List<Employee> getEmpsByConditionIf(Employee employee);-->
<select id="getEmpsByConditionIf" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee
<trim prefix="where" suffixOverrides="and">
<if test = "id!=null">
id = #id and
</if>
<if test = "lastName!=null && lastName!=""">
last_name like #lastName and
</if>
<if test="email!=null and email.trim()!=""">
email = #email and
</if>
<!--ognl会进行字符串与数字的转换判断 "0"==0 -->
<if test="gender==0 or gender==1">
gender = #gender
</if>
</trim>
</select>
以上是关于[mybatis]动态sql_if_where_trim判断&OGNL的主要内容,如果未能解决你的问题,请参考以下文章