mybatis的集合操作
知识点:如果遇到集合参数传递,需要将集合遍历
标签:foreach循环遍历集合
标签属性说明:1.collection表示遍历的集合类型:1.1数组 关键字array 1.2list集合 关键字list
1.3 Map集合 关键字Map中的key
2.open 循环开始标签 close 循环结束标签 包裹循环体
3.separator 分隔符
4.item 当前循环遍历的数据的变量
动态sql
2.1动态sql-where-if
核心思想:自动判断是否为null,如为null,则字段不参与sql,例如xml中sql语句中有where id = # {id},如此时前端传过来的值为null,如果不加判断,怎会出现id=null,id怎么可以出现等于null的情况呢,所以需要进行判断
动态sql规则:
1.<if test = "写判断条件,可以直接获取属性值"><if/>
其中true表示:会拼接 字段条件 false表示:不会拼接字段条件
2.多余的关键字 由于动态sql拼接必然会导致多余的and 或者 or
3.where标签说明 可以去除 where后边多余的and 或者 or
<select id="findUser3" resultType="User">
select <include refid="user_cloumn" /> from demo_user
<where>
<if test="name != null and name != ''">
and name=#{name}
</if>
<if test="age != null">
and age = #{age}
</if>
</where>
</select>
2.2.动态sql-set-if
set标签用法:去除set条件中多余的,号,如要实现用户数据修改,但是要根据前端传的值不为null时可以set
<update id="updateSqlSet">
update demo_user
<set>
<if test="name !=null"> name=#{name}, </if>
<if test="age !=null"> age = #{age}, </if>
<if test="sex !=null"> sex = #{sex} </if>
</set>
where id = #{id}
</update>
2.3动态sql-分支结构语法
在查询等操作下,如果一个属性的值不满足,则使用另一个属性,这时候在sql语句中就需要使用if-else或者if-else if -else
实例:如果name有值,按照name查询,否则按照年龄查询,如果name,age都没有,按照sex查询
select <include refid="user_cloumn"/> from demo_user
<where>
<choose>
<when test="id != null">
id = #{id}
</when>
<when test="name != null and name != ''">
name = #{name}
</when>
<when test="age != null">
age = #{age}
</when>
<otherwise>
sex=#{sex}
</otherwise>
</choose>
</where>
resultType和resultMap的区别
resultType:要求:对象的属性名称和表中的字段一一对应
例如:对象User(id,name,age,sex) 表:demo_user(dog_id,dog_name,dog_age,dog_sex)
总结:resultType适合单标映射,并且属性名称一致
resulltMap:如果发现表中的字段和属性名称不一致时,使用resultMap映射
注意:resultMap中如果映射包括表中的主键字段,那么在resultMap标签中要使用<id propery="" column></resultMap>标签来映射主键,其他非主键的映射则用<result....你懂得.....></result>
对象:Dog(dogId,dogName) 表:dog(dog_id,dog_name) 属性不匹配,所以映射失败
注解开发
注解使用规则:1.注解标识接口方法,接口方法调用,直接注解的内容
2.注解将查询的结果集,根据方法的返回值类型动态映射
使用注解开发时mybatis需要管理mapper的接口
<mappers>
<!-- 使用注解时 mybatis需要管理mapper的接口 -->
<mapper class="com.jt.mapper.UserAnnoMapper"></mapper>
</mappers>
开发注意事项:1.注解开发,只适用于单标CURD操作,多表操作一定会出现问题
2.如果涉及到复杂标签时 ,where/set/foreach等标签时,不可以使用注解
3.所以应该熟练掌握xml映射文件的写法,注解开发只是辅助的作用