Mybatis多对一的处理

来源:互联网 发布:手机淘宝模拟试衣服 编辑:程序博客网 时间:2024/05/18 01:29

多对一关系
下面设计了两张表,根据学生来查询

表的设计
利用Navicat for mysql建表,然后在查看菜单点击ER图表(概念模型) 如下:
这里写图片描述
设计好的表ER图表
这里写图片描述
上述表 student tid设置外键参考teacher的id,所以建好表后两者都为空要先添加teacher的数据。
这里写图片描述


多个学生对于一个老师
实体类
Teacher

public class Teacher {    private int id;    private String name;    //省略set/get方法    @Override    public String toString() {        return "Teacher [id=" + id + ", name=" + name + "]";    }}

Student

public class Student {    private int id;    private String name;    private Teacher teacher;    //省略set/get方法    @Override    public String toString() {        return "Student [id=" + id + ", name=" + name + ", teacher=" + teacher                + "]";    }}

编写映射文件

按结果嵌套处理

<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"></id>        <result column="sname"  property="name"></result>        <!-- 关联对象    property  关联对象在Student实体类的属性  javaType  property对于属性的类型-->        <association property="teacher"  javaType="Teacher">            <id  column="tid"  property="id"></id>            <result  column="tname" property="name"></result>        </association>      </resultMap></mapper>

按查询结果嵌套处理

<!--按查询嵌套处理  -->     <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>

teacher.mapper.xml中

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

测试

public static void main(String[] args) throws IOException {        StudentDao studentDao=new StudentDao();        List<Student> list=studentDao.getAll();        for(Student stu:list){            System.out.println("student name"+stu.getName()+"  student's teacher name="+stu.getTeacher().getName());        }     }
原创粉丝点击