1.1 if+where的用法
多条件查询
以上是根据商品名称以及供应商的id是否支付进行的多条件查询,
元素中的test属性表示为:当test后面的表达式满足条件时会追加元素中的条件,从而达到动态查询的状态。
修改后测试结果依然正确:
总结:where元素主要用来简化SQL语句中的where条件判断,并能智能的处理and和or,不必担心多余关键字导致的语法错误。
where元素标签会自动识别其标签内是否有返回值,若有就插入一个where。此外,若该标签返回的内容是以and后者or开头的,会自动剔除。
1.2 if+trim的用法
trim元素也会自动识别其标签内是否有返回值,若有就会插入某些前缀,也可在其后面加入某些后缀。与之对应的属性是:prefix和suffix;
trim可把包含内容首部的内容覆盖掉,或者把尾部的某些内容覆盖掉,与之对应的属性是:prefixOverrides和suffixOverrides;
执行结果正常!
trim元素的属性:
prefix:前缀,作用是通过自动识别是否有返回值,如果有就加上某些前缀,如此处的where
suffix:后缀,作用是在trim包含的内容上加上后缀。
prefixOverrides:对于trim包含内容的首部进行指定内容的忽略(如此处的“and”).
suffixOverrides:对于trim包含内容的尾部进行制定内容的忽略。
1.3 if+set的用法
set元素主要用于根性操作,它的用法跟where类似,在包含的语句乾输出一个set,若包含的语句是以“,”结尾,则会自动把逗号忽略掉。在配合if就可以实现动态的更新需要更新的字段了,不需要更新的字段,则可以不更新。
1.4foreach迭代入参
foreach的主要属性有:
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示每次迭代过程中,每次迭代到的位置。
separator:表示在每次迭代之间以什么做为分隔符。
close:表示该语句以什么开始。
open:表示该语句以什么结尾。
collection:最关键也是最容易出错的属性。必须要指定,不同情况下,该属性的值是不一样的。主要有一下三种情况:
1.若入参为单参数且参数类型时一个List,collection的属性值是:list.
2.若入参为一个单参数且参数类型是一个数组,collection的属性值是:array;
3.若入参为多参数,就需要把他们封装成一个Map进行处理。
1.5 choose(when. otherwist)
只需要根据多个查询条件中的某一个条件进行查询时可以使用choose.它类似于switch选择结构。 <!–
根据用户的名称、角色、编码、创建时间 查询用户表根据其中任意一个条件进行查询-->
<select id="getUserByUserNameRoleCodeCreateTime" resultMap="userList">
select u.*,r.roleName from smbms_user u,smbms_role r where r.id = u.userRole
<choose>
<when test="userName != null and userName !=''">
and userName like concat("%",#{userName},"%")
</when>
<when test="userRole != null and userRole !=''">
and userRole = #{userRole}
</when>
<when test="userCode != null and userCode !=''">
and userCode like concat("%",#{userCode},"%")
</when>
<otherwise>
and Year(u.creationDate) = #{creationDate}
</otherwise>
</choose>
</select>
choose一般与when、otherwise配套使用:
whene元素:当其test属性中条件满足的时候,就会输出when元素中的内容。跟java中的switch效果差不多的是。同样按照条件的顺序来进行处理,当when中一旦有条件满足,就会跳出choose,即所有的when和otherwise条件中,只有一个条件会输出。
otherwise元素:当when中的所有条件都不满足的时候,就会自动输出otherwise元素中的内容。
1.6分页查询
MySql的分页功能是基于内存的分页,即先查出所有结果。然后再按起始位置和页大小进行分页。 <!-
-//用户列表增加分页功能,要求结果按创建时间降序排列-->
<select id="getUesrOrderByTime" resultMap="userList">
select * from smbms_user order by creationDate desc limit #{index},#{pageSize}
</select>