首页 > 其他 > 详细

07_关于联表的处理

时间:2019-08-21 02:12:09      阅读:101      评论:0      收藏:0      [点我收藏+]

1、多对一的处理

  a) 数据库表的设计

技术分享图片

 学生表student与老师表teacher

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

  b) 实体类

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

  c)编写映射文件student.mapper.xml

    第一种方式:按结果嵌套处理

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.sxt.entity.student.mapper">
    <!-- 对于多对一处理有两种方式1、按结果嵌套处理2、按查询嵌套处理 -->
    <select id="getStudents" resultMap="StudentTeacher">
        select s.id sid,s.name sname,s.tid stid,t.id tid,t.name tname from student s,teacher t where s.tid = t.id
    </select>
    <resultMap type="Student" id="StudentTeacher">重点在这一块
        <id column="sid" property="id"/>
        <result column="sname" property="name"/>
        <association property="teacher" javaType="Teacher">
            <id column="tid" property="id"/>
            <result column="tname" property="name"/>
        </association>
    </resultMap>
</mapper>

    第二种方式:按查询嵌套处理,有两种写法(这种方式相当于做了两次查询) 

one

 这种方式student.mapper.xml配置文件代码如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.sxt.entity.student.mapper">
    <!-- 对于多对一处理有两种方式1、按结果嵌套处理2、按查询嵌套处理 
    <select id="getStudents" resultMap="StudentTeacher">
        select s.id sid,s.name sname,s.tid stid,t.id tid,t.name tname from student s,teacher t where s.tid = t.id
    </select>
    <resultMap type="Student" id="StudentTeacher">
        <id column="sid" property="id"/>
        <result column="sname" property="name"/>
        <association property="teacher" javaType="Teacher">
            <id column="tid" property="id"/>
            <result column="tname" property="name"/>
        </association>
    </resultMap>
    -->
    <select id="getStudents" resultMap="StudentTeacher">
        select * from student
    </select>
    <resultMap type="Student" id="StudentTeacher">
        <association property="teacher" column="tid" javaType="Teacher" select="cn.sxt.entity.teacher.mapper.getTeacher"></association>
    </resultMap>
</mapper>

 teacher.mapper.xml配置文件代码如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.sxt.entity.teacher.mapper">
    <select id="getTeacher" resultType="Teacher">
        select * from teacher where id=#{id}
    </select>
</mapper>

 另外还需要在mybatis.cfg.xml中添加配置

技术分享图片

two技术分享图片

然后在mybatis.cfg.xml配置文件里面只写一个技术分享图片

 2、一对多的处理

a) 数据库表和上面设计的一样不用改(数据库表的设计不受java代码两个实体之间关系的影响)

b) 实体类要修改

Student.java

技术分享图片

Teacher.java

技术分享图片

c) 编写映射文件 teacher.mapper.xml

第一种处理方式:按结果嵌套处理技术分享图片

第二种方式:按查询嵌套处理,有两种写法(这种方式相当于做了两次查询)

 两种写法,和多对一第二种方式表达的两种写法的意思是一样的,只不过是把另一个mapper.xml映射文件中的查询放到了一个文件中了,所以此处只写一种

teacher.mapper.xml技术分享图片

student.mapper.xml

技术分享图片

package cn.sxt.dao;
import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import cn.sxt.entity.Student;
import cn.sxt.entity.Teacher;
import cn.sxt.util.MyBatisUtil;
public class TeacherDao {
    public Teacher getTeacher(int id) throws IOException{
        SqlSession session = MyBatisUtil.getSession();
        Teacher teacher = session.selectOne("cn.sxt.entity.teacher.mapper.getTeacher",id);
        session.close();
        return teacher;    
    }
}

测试代码及结果技术分享图片

 

07_关于联表的处理

原文:https://www.cnblogs.com/djlindex/p/11386306.html

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