mybatis 学习
学习文档地址:
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps
resultMap
- assocation(关联)子标签:标签中的属性 property对应实体类中的属性,javaType对应要关联的类,resultMap对应用使用resultMap的id。其子元素和resultMap类似。
返回结果的时候,没有映射返回null。
使用场景例:查看某个教师的某个学生的信息,在原来的教师实体类添加一个学生属性即可,对应的即是sql的关联查询。
<resultMap id="teacher" type="Teacher"> <result column="teacher_id" property="teacherId" jdbcType="BIGINT" /> <result column="teacher_name" property="teacherName" jdbcType="VARCHAR" /> <association property="sdutent" javaType="Sdutent"> <result column="sdutent_id" property="sdutentId" jdbcType="BIGINT" /> <result column="sdutent_name" property="sdutentName" jdbcType="VARCHAR" /> </association> </resultMap>
也可以这样
<resultMap id="teacher" type="Teacher"> <result column="teacher_id" property="teacherId" jdbcType="BIGINT" /> <result column="teacher_name" property="teacherName" jdbcType="VARCHAR" /> <association property="sdutent" resultMap="sdutent" /> </resultMap> <resultMap type="Sdutent" id="sdutent"> <result column="sdutent_id" property="sdutentId" jdbcType="BIGINT" /> <result column="sdutent_name" property="sdutentName" jdbcType="VARCHAR" /> </resultMap>
- 构造器 constructor
在指定类里面添加指定构造器,然后在constructor的标签下增加对用的配置,作用给构造器里面指定的参数赋值。
例:
<resultMap id="teacher" type="Teacher">
<constructor><idArg column="teacherName" javaType="string"/></constructor> <result column="teacher_id" property="teacherId" jdbcType="BIGINT" /> </resultMap>
对应的类中添加
public(String teacherName){this.teacherName=teacherName}
注:顺序要写在resultMap的第一行。也可以像assocation一样使用标签属性resultMap指定映射集
collection集合:
使用场景:查询指定老师的信息及其下所有的学生信息
<resultMap id="teacher" type="Teacher"> <result column="teacher_id" property="teacherId" jdbcType="BIGINT" /> <result column="teacher_name" property="teacherName" jdbcType="VARCHAR" /> <collection property="sdutentList" OfType="Sdutent"> <result column="sdutent_id" property="sdutentId" jdbcType="BIGINT" /> <result column="sdutent_name" property="sdutentName" jdbcType="VARCHAR" /> </collection> </resultMap>
动态sql
- if
<if test="title != null"> title like #{title} </if>
-
choose, when, otherwise
<choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND author_name like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose>
-
trim
<trim suffix="WHERE" suffixOverrides="AND | OR"> <if test="id != null and id !='' "> AND b.id =#{id} </if> <if test="name != null"> AND b.menu_name like #{name} </if> </trim>
属性 suffix和suffixOverrides 以及 prefix和prefixOverrides,分别是后缀和前缀,其中suffix和prefix分别设置最后和最前
- foreach
<foreach item="item" index="index" collection="list" open="(" separator=","close=")"> #{item} </foreach>
注:动态sql以及普通的传值平杰sql,使用非实体类,map,jsonObject传参时,需要在dao层为每个参数使用@Param("*")起别名,然后再mapper.xml中使用;否则会报There is no getter for property named 'id' in 'class java.lang.Integer'类似的错误。