zoukankan      html  css  js  c++  java
  • 07_关于联表多对一、一对多的处理

    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;    
        }
    }

    测试代码及结果

  • 相关阅读:
    无线鼠标换电池了
    Jython Interactive Servlet Console YOU WILL NEVER KNOW IT EXECLLENT!!! GOOD
    Accessing Jython from Java Without Using jythonc
    jython podcast cool isnt't it?
    Python里pycurl使用记录
    Creating an Interactive JRuby Console for the Eclipse Environment
    微软为AJAX和jQuery类库提供CDN服务
    Download A File Using Cygwin and cURL
    What is JMRI?这个是做什么用的,我真没看懂但看着又很强大
    用curl 发送指定的大cookie的http/https request
  • 原文地址:https://www.cnblogs.com/djlindex/p/11386306.html
Copyright © 2011-2022 走看看