关键字
1.if 条件
2.choose , when 和 otherwise条件
3.where 条件
4.trim 条件
5.forEach循环
6.set 条件
一、if主要针对Map集合或者实体类
<select id="selectduo" parameterType="Map" resultType="student" >
select * from student s where 1=1
<if test="sno!=null">
and s.sno=#{sno}
</if>
<if test="sname!=null">
and s.sname like #{sname}
</if>
</select>
JUnit测试用例,判断map集合里的值
@Test
public void selectduo() {
Map<String, Object> map=new HashMap<String, Object>();
map.put("sno", 107);
map.put("sname", "%王%");
List<Student> st=sm.selectduo(map);
for(Student tt:st){
System.out.println(tt);
}
}
二、choose , when 和 otherwise条件
<select id="selectduo" parameterType="Map" resultType="student" >
select * from student s where 1=1
<choose>
<when test="aaa=='zzz'">
and s.sno=#{sno}
</when>
<when test="aaa=='bbb'">
and s.sname like#{sname}
</when>
<!-- 都不符合时走这个 -->
<otherwise>
and 2=2
</otherwise>
</choose>
</select>
JUnit测试用例
@Test
public void selectduo() {
Map<String, Object> map=new HashMap<String, Object>();
map.put("aaa", "bbb");
map.put("sno", 107);
map.put("sname", "%王%");
List<Student> st=sm.selectduo(map);
for(Student tt:st){
System.out.println(tt);
}
}
三、where:自动加上where,如果where子句以and或者or开头,则自动删除第一个and或者or。所以我们不需要自己加where
<select id="selectduo" parameterType="Map" resultType="student" >
select * from student s
<where>
<if test="sno!=null">
and s.sno=#{sno}
</if>
<if test="sname!=null">
and s.sname like #{sname}
</if>
</where>
</select>
JUnit测试用例
@Test
public void selectduo() {
Map<String, Object> map=new HashMap<String, Object>();
map.put("sno", 107);
map.put("sname", "%王%");
List<Student> st=sm.selectduo(map);
for(Student tt:st){
System.out.println(tt);
}
}
四、trim 条件:trim条件和where条件类似但是功能更强大:不仅可以替换掉子句开头的and或者or,还提供了加前缀和后缀的功能。
<select id="selectduo" parameterType="Map" resultType="student" >
select * from student s
<!-- 把第一个and或者or替换成where,替换最后一个用suffix="" suffixOverrides="" -->
<trim prefix="where" prefixOverrides="and|or" >
<if test="sno!=null">
and s.sno=#{sno}
</if>
<if test="sname!=null">
and s.sname like #{sname}
</if>
</trim>
</select>
JUnit测试用例
@Test
public void selectduo() {
Map<String, Object> map=new HashMap<String, Object>();
map.put("sno", 107);
map.put("sname", "%王%");
List<Student> st=sm.selectduo(map);
for(Student tt:st){
System.out.println(tt);
}
}
五、forEach循环
1.用list传值是
<select id="selectduo" parameterType="list" resultType="student" >
select * from student s
<where>
s.sno in
<!-- 自己定义的名称,传来是什么类型变量 ,后面三个属性拼接成(,,,) -->
<foreach item="test" collection="list" open="(" separator="," close=")">
#{test}
</foreach>
</where>
</select>
JUnit测试用例
@Test
public void selectduo() {
List<Integer> snos=new ArrayList<>();
snos.add(66);
snos.add(110);
snos.add(107);
List<Student> st=sm.selectduo(snos);
for(Student tt:st){
System.out.println(tt);
}
}
2.用map传值时
<select id="selectduo" parameterType="Map" resultType="student" >
select * from student s
<where>
s.sno in
<!-- 自己定义的名称,Map的key名字 ,后面三个属性拼接成(,,,) -->
<foreach item="test" collection="snoslist" open="(" separator="," close=")">
#{test}
</foreach>
</where>
</select>
JUnit测试用例
@Test
public void selectduo() {
List<Integer> snos=new ArrayList<>();
snos.add(66);
snos.add(110);
snos.add(107);
Map<String , Object> map=new HashMap<String,Object>();
map.put("snoslist", snos);
List<Student> st=sm.selectduo(map);
for(Student tt:st){
System.out.println(tt);
}
}
结果都是一样的
六、set 条件
自动加上set,自动去除最后一个逗号
<update id="update" parameterType="student">
update student s
<set>
<if test="sname!=null">s.sname=#{sname},</if>
<if test="ssex!=null">s.ssex=#{ssex},</if>
<if test="sclass!=null">s.sclass=#{sclass}</if>
<where>
s.sno=#{sno}
</where>
</set>
</update>
JUnit测试用例
@Test
public void update() {
Student st=new Student(66, "蒙蒙", "男", 95033,null);
int m=sm.update(st);
System.out.println(m);
}