mybatis高级映射:一对多

来源:互联网 发布:0基础php自学要多久 编辑:程序博客网 时间:2024/06/06 09:56

说一下mybatis的复杂映射:一位老师可以教多个课程,但是一个课程只有一位老师
老师表:
这里写图片描述
课程表:
这里写图片描述
DAO 层写个方法:像配置数据源,mybatis的SessionFactory,jdbc.properties和一些扫描包啥的就不贴代码了。

public interface TheacterDao {/** * 根据ID查询老师的信息包括课程的信息 * @param ID * @return */    Thacher getTeacherWithCourseByID(int ID);}

两个实体类:
这里写图片描述
课程javaBean:
这里写图片描述
复杂映射必须用resuleMap进行处理,简单的映射resuleType就可以了。

下面的property里面的内容是实体类的属性,column关联的是数据库的字段。

<mapper namespace="cn.xyl.com.dao.TheacterDao">    <resultMap id = "CourseResultMap" type="cn.xyl.com.entity.Course" >        <id property="ID" column="courseID"/>        <result property="name" column="courseName"/>        <result property="desc" column="desc"/>        <result property="teacherID" column="ID"/>    </resultMap>    <resultMap id="TeacherWithCourseResultMap" type="cn.xyl.com.entity.Thacher" >        <id property="ID" column="ID"/>        <result property="name" column="name"/>        <result property="email" column="email"/>        <result property="phone" column="phone"/>        <collection property = "courses" resultMap = "CourseResultMap"/>    </resultMap>    <select id="getTeacherWithCourseByID" parameterType="int" resultMap="TeacherWithCourseResultMap">         SELECT T.ID, T.name, T.email, T.phone, C.ID AS courseID, C.name AS courseName, C.desc         FROM Teacher T         LEFT OUTER JOIN Course C         ON T.ID = C.teacherID        WHERE T.ID = #{ID}    </select></mapper>

最后写一个测试代码,我这是把sql直接放在数据库里得到的。
这里写图片描述
逐一映射每个属性,数据库主键使用ID映射。非主键,使用result映射。属性是一个集合,使用collection进行映射。下一个写一对一映射。