首页 > 其他 > 详细

6 MyBatis - 接口代理实现dao + 映射xml 开发 - 多表(案例)

时间:2020-11-28 09:36:33      阅读:26      评论:0      收藏:0      [点我收藏+]

MyBatis - 接口代理实现dao + 映射xml 开发

多表 - 一对一

技术分享图片

技术分享图片

  • 一个人一个身份证
  • Card身份证类:id、number、Person p
  • Person类:id、name、age
<!-- OneToOneMapper.xml -->
<mapper namespace="com.itheima.table.OneToOneMapper">
    <!--配置字段和实体对象属性的映射关系-->
    <!-- 
		<resultMap>:配置字段和对象属性的映射关系标签。
  		id 属性:唯一标识
  		type 属性:实体对象类型
  		column 属性:表中字段名称
  		property 属性: 实体对象变量名称
	-->
    <resultMap id="oneToOne" type="card">
        <!-- id 标签:配置主键映射关系标签。 -->
        <id column="cid" property="id" />
        <!-- result 标签:配置非主键映射关系标签。 -->
        <result column="number" property="number" />
        <!--
            association:配置被包含对象的映射关系
            property:被包含对象的变量名
            javaType:被包含对象的数据类型
        -->
        <!-- card类中有Person类对象p,即被包含 -->
        <association property="p" javaType="person">
            <!-- 即被包含的Person类对象p 有三个属性 -->
            <id column="pid" property="id" />
            <result column="name" property="name" />
            <result column="age" property="age" />
        </association>
    </resultMap>

    <select id="selectAll" resultMap="oneToOne">
        SELECT c.id cid,number,pid,NAME,age FROM card c,person p WHERE c.pid=p.id
    </select>
</mapper>

<!-- 对应java代码 -->
public interface OneToOneMapper {
    public abstract List<Card> selectAll();
}

// 获取OneToOneMapper接口的实现类对象  接口代理
OneToOneMapper mapper = sqlSession.getMapper(OneToOneMapper.class);
// 调用实现类的方法,接收结果
List<Card> list = mapper.selectAll();
// 处理结果
for (Card c : list) {
    System.out.println(c);
}
// 释放资源
sqlSession.close();
inputStream.close();

多表 - 一对多

技术分享图片

技术分享图片

  • 一个班级多个学生
  • Classes班级类:id、班级名称name、所有学生List students
  • Student类:id、name、age、List courses
<!-- OneToManyMapper.xml -->
<mapper namespace="com.itheima.table.OneToManyMapper">
    <resultMap id="oneToMany" type="classes">
        <id column="cid" property="id"/>
        <result column="cname" property="name"/>

        <!--
            collection:配置被包含的集合对象映射关系
            property:被包含对象的变量名
            ofType:被包含对象的实际数据类型
        -->
        <!-- 在class类中有List<Student>类型对象students,即包含集合-->
        <collection property="students" ofType="student">
            <id column="sid" property="id"/>
            <result column="sname" property="name"/>
            <result column="sage" property="age"/>
        </collection>
    </resultMap>
    <select id="selectAll" resultMap="oneToMany">
        SELECT c.id cid,c.name cname,s.id sid,s.name sname,s.age sage FROM classes c,student s WHERE c.id=s.cid
    </select>
</mapper>


<!-- 对应java代码 -->
public interface OneToManyMapper {
    public abstract List<Classes> selectAll();
}

// 获取OneToManyMapper接口的实现类对象
OneToManyMapper mapper = sqlSession.getMapper(OneToManyMapper.class);
// 调用实现类的方法,接收结果
List<Classes> classes = mapper.selectAll();
// 处理结果
for (Classes cls : classes) {
	System.out.println(cls.getId() + "," + cls.getName());
	List<Student> students = cls.getStudents();
	for (Student student : students) {
    	System.out.println("\t" + student);
     }
}
// 释放资源
sqlSession.close();
inputStream.close();

多表 - 多对多

技术分享图片技术分享图片

  • 一个学生选门个课程 一门课程有多个学生
  • Student类:id、name、age、学生所选课程List courses
  • Course课程类:id、课程名称name
  • 要求:查询显示有课程的学生 选了哪些课程
<!-- ManyToManyMapper.xml -->
<mapper namespace="com.itheima.table.ManyToManyMapper">
    <resultMap id="manyToMany" type="student">
        <id column="sid" property="id"/>
        <result column="sname" property="name"/>
        <result column="sage" property="age"/>

        <!-- 在Student类中有List<Cource>类型对象courses,即包含集合-->
        <collection property="courses" ofType="course">
            <id column="cid" property="id"/>
            <result column="cname" property="name"/>
        </collection>
    </resultMap>
    <select id="selectAll" resultMap="manyToMany">
        SELECT sc.sid,s.name sname,s.age sage,sc.cid,c.name cname FROM student s,course c,stu_cr sc WHERE sc.sid=s.id AND sc.cid=c.id
    </select>
</mapper>


<!-- 对应java代码 -->
public interface ManyToManyMapper {
    public abstract List<Student> selectAll();
}
        
// 获取ManyToManyMapper接口的实现类对象
ManyToManyMapper mapper = sqlSession.getMapper(ManyToManyMapper.class);
// 调用实现类的方法,接收结果
List<Student> students = mapper.selectAll();
// 处理结果
for (Student student : students) {
   System.out.println(student.getId() + "," + student.getName() + "," + student.getAge());
   List<Course> courses = student.getCourses();
   for (Course cours : courses) {
       System.out.println("\t" + cours);
   }
}
// 释放资源
sqlSession.close();
inputStream.close();

6 MyBatis - 接口代理实现dao + 映射xml 开发 - 多表(案例)

原文:https://www.cnblogs.com/60kmph/p/14051524.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!