前言
接着上一篇博客,上一篇中一对多的方式必须一条sql语句查询出来,且不能处理两个或多个表中有相同字段(例:都包含数据创建时间create_date字段),今天就讲一下collection标签的select属性怎么用。
具体实现
例子还是上一篇中的例子。
mybatis映射文件mapper如下:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mycompany.dao.HelloWorldDao">
<resultMap type="com.mycompany.entity.Teacher" id="getClassMap">
<id property="teacherNo" column="teacher_no"/>
<result property="teacherName" column="teacher_name"/>
<collection property="classes" javaType="ArrayList" column="teacher_no"
ofType="com.mycompany.entity.Classes" select="selectClasses"/>
</resultMap>
<select id="getTeacherDetail" parameterType="int" resultMap="getClassMap">
select * from teacher where teacher_no=#{id}
</select>
<select id="selectClasses" parameterType="int" resultType="com.mycompany.entity.Classes">
select * from classes where teacher_no=#{id}
</select>
</mapper>
其中column指的是传过来的id对应的是主表的哪一列。
后记
可以看出来这种映射法其实是做了一个单独的查询,效率不如上一篇,但可以解决多个表中含有相同字段,且可以解决尾表映射的问题。