Mybatis基础---常用SQL映射标签、多参数设置、resultMap(自定义映射)
2017-11-10 19:46
387 查看
一、if 元素
如果什么 …..那么什么…….. ——->通常用于判断参数,进行sql语句的动态拼接1、 传入的参数是一个 实体对象 :
<select id="selectUserLike" resultType="entity.User" parameterType="entity.User"> select * from user where 1=1 <!-- parameterType指传入的参数类型 这里传入的是一个实体类 --> <!-- if判断时需要保证你 test="loginName!=null and loginName!=''" 中判断的条件一定是实体类的属性--> <!-- 即loginName 是 实体entity.User 中的一个属性 --> <if test="loginName!=null and loginName!=''"> and loginName =#{loginName} </if> <if test="userId!=null"> <!--1.处理特殊字符 CDATA节中的内容不会做特殊处理 --> <!--2.处理特殊字符(<是< 号的意思) and userid<#{userId} --> <![CDATA[and userid<#{userId}]]> </if> </select>
2、 传入的参数是一个或多个 参数(参数注解 @param) :
<!-- 根据id 查询一个用户 --> <select id="selectUserById" resultType="entity.User"> select * from user where 1=1 <if test="id!=null"> and userid=#{id} </if> </select>
转换成使用接口的方式——->接口( UserMapper.xml 对应的接口 ) 中的方法为
/** *根据用户id 查询用户 */ public User selectUserById(@param("id") int userId); //映射的sql 语句中并未表明入参类型 且 判断的变量是 id , 此时接口中的变量使用的是 userId(语义化更强) //为了避免出现异常情况 此时应当使用注解 (@param("id"))---->注解的变量名和sql映射中判断的变量名要相同 //注解相当于 为接口中的参数设置了一个key 这个key和对应sql映射中的if 判断的变量(id)相同 //当然多个参数也可使用 注解(@param(" ")) 的方式
3、 多参数 —–>Map(集合) :[/b]
<!-- 入参是map集合 模糊查询名字 和 id在一定范围的 用户 --> <!-- parameterType="map"表示入参是map集合 那么 if 元素判断的条件就是map的key --> <select id="getByIds2" resultType="entity.User" parameterType="map"> select * from user <where> <!-- name表示 传入的map集合中 如果有key为name的键值对的话 进行判断 然后进行字符串拼接 --> <!-- #{name}------取map集合中 key为name 的值 --> <if test="name!=null and name!=''"> loginName like concat('%',#{name},'%') </if> <!-- 表示传入的map参数中 key为list 对应的值是一个list集合 --> <if test="list!=null and list.size()>0"> and userid <!-- 对集合进行遍历 --> <!-- foreach元素的属性 collection="list"表示遍历的是集合 item="tempId" 表示 遍历到的元素 open="(" 表示对遍历结果进行拼接 开头是 "(" close=")" 结尾是 ")" separator="," 每个元素之间是 "," <foreach collection="list" item="tempId" open="(" close=")" separator=","> #{tempId} </foreach> </if> </where> </select>
需要注意的地方——->如果你想传入什么参数 : 那么你map 中的key 一定要和 if 判断的名称一样
并且key 对应的参数也是需要注意的地方
二、choose,when, otherwise 元素
有时候我们不想应用所有的条件,而是想从多个选项中选择一个。与java 中的多重选择语句相似,MyBatis 提供了一个choose 元素 这时when起判断的作用, 如果成立进行sql语句拼接不成立进行下一个选项判断
//与java 中的多重选择语句相似 if(...){ ... }else if(...){ ... }else if(...){ ... }else{ ... }
<select id="findActiveBlogLike" parameterType="entity.user" resultType="entity.user"> SELECT * FROM user WHERE 1 = 1 <choose> <when test="loginName != null"> AND loginName = #{loginName} </when> <when test="pwd != null"> AND pwd = #{pwd} </when> <otherwise> AND userid = 1 </otherwise> </choose> </select>
一次只能选择一个条件, 即—->如果第一个when满足条件,那么就会结束判断进行sql语句拼接,如果第一个条件不满足, 继续进行后面的判断直到满足为止,如果都不满足,则会进行”<otherwise>”的内容
三、Foreach 元素
动态SQL 经常使用到的功能是集合迭代,通常用在IN 条件句。<!-- 参数类型是list 储存了用户的id集合 --> <select id="getByIds" resultType="entity.User" parameterType="list"> select * from user <where> <!-- 对集合进行判断 如果不为空 并且 集合中元素数量>0的话 进行遍历和sql语句拼接 --> <if test="list!=null and list.size()>0"> userid in <!--foreach 的collection属性 表示遍历的集合类型 item="id"为遍历到的元素--> <!--open="(" separator="," close=")" 表示在开头和元素之间以及结尾添加的字符串--> <foreach collection="list" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> </where> </select>
select、Insert、update、delete 元素
对应数据库的 差、增、改、删 操作
四、resultMap 元素
代表返回的结果类型是自定义映射
1、resultMap : 自定义映射对象属性中的—->实体类型的属性
上图是这次要映射的实体类
<!-- UserMapper.xml 文件的sql语句和resultMap映射 --> <!-- resultMap 的type属性表示你要映射的是哪一个实体类***** 写完全限定名或别名 --> <!-- resultMap 的id 属性表示当前的 resultMap 在Mapper.xml文件中的代号(唯一)--> <resultMap type="entity.User" id="temp1"> <!-- property表示映射的是"entity.User"实体类的id属性 --> <!-- column表示查询语句的结果======>uid列 进行对实体类id属性的映射 --> <id property="id" column="uid" /> <result property="name" column="uname" /> <!-- association 通常用于映射对象属性中 属性类型为另一个实体类型的 属性 即上图的role属性(角色类型Role) --> <!-- javaType属性表示 association 得到的对象的类型(必须) (这里是实体类: 角色类) --> <association property="role" javaType="entity.Role"> <!-- association 标签内的 id或result标签的property属性映射的就是javaType指向的实体类的属性 --> <result property="name" column="rname" /> </association> </resultMap> <!-- 根据用户id 查询角色信息 自定义映射属性--> <!-- 使用association 映射用户属性中的 role信息(role属性是一个对象) --> <select id="getUserAuth" resultMap="temp1" parameterType="entity.User"> SELECT u.id uid,u.name uname,r.name rname FROM `user` u,role r WHERE u.rid=r.id AND u.id=#{id} </select>
2、resultMap : 自定义映射对象属性中的—->集合类型的属性
<!-- 根据区县id 查询该区县下的所有街道信息 --> <!-- District对象有一个集合类型的属性 "private List<Street> list" --> <!-- 此时需要 使用collection标签 进行集合映射 --> <resultMap type="entity.District" id="map1"> <id property="id" column="did" /> <result property="name" column="dname" /> <!-- property="list"表示映射"District"类型的list属性 --> <!-- ofType="entity.Street" 表示集合中的数据类型 --> <collection property="list" ofType="entity.Street"> <id property="id" column="sid"/> <result property="name" column="sname" /> </collection> </resultMap> <select id="getStreetsByid" resultMap="map1" parameterType="entity.District"> SELECT d.`id` did,d.`name` dname,s.`id` sid,s.`name` sname FROM district d,street s WHERE d.`id`=s.`did` AND d.`id`=#{id} </select>
关于resultMap标签中子标签 association和collection 的总结
1): association在resultMap标签中通常用于映射 JavaBean的某个"复杂类型"属性,即JavaBean内部嵌套一个复杂数据类型(另一个JavaBean)属性,需要注意的地方是---->association仅处理一对一的关联关系 ---------注意---->association用 javaType属性 映射结果类型 2):collection在resultMap标签中通常用于映射 JavaBean的某个复杂属性,这个属性是一个集合列表, ---------注意---->collection用 ofType属性 映射集合中每一个元素的数据类型
a176
相关文章推荐
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- MyBatis学习 之 二、SQL语句映射文件-resultMap
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- MyBatis学习(二) - SQL语句映射文件(1)resultMap
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- Mybatis利用ResultMap自定义映射案例
- MyBatis的getMapper()接口、resultMap标签、Alias别名、 尽量提取sql列、动态操作
- MyBatis学习-SQL语句映射文件(1)resultMap
- 【MyBatis学习07】输出类型resultType及输出参数映射resultMap
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- Mybatis动态SQL单一基础类型参数用if标签注意事项
- [置顶] mybatis中代码复用问题resultMap、sql、include标签
- mybatis 学习二、SQL语句映射文件(1)resultMap
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- MyBatis学习(二)、SQL语句映射文件(1)resultMap
- mybatis-SQL语句映射文件(1)resultMap