zoukankan      html  css  js  c++  java
  • 【MyBatis】-----【MyBatis】---表级联系【一对多】

    一、核心配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
         <!-- 最开始加载引用db.properties文件 -->
        <properties resource="db.properties"/>
        <!-- 取别名    以下情况别名为类名 -->
         <typeAliases>
             <package name="com.myBatis.entity"/>
         </typeAliases>
        <!-- 
            development : 开发模式
            work : 工作模式
         -->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库连接信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}" />
                    <property name="url" value="${url}" />
                    <property name="username" value="${username}" />
                    <property name="password" value="${password}" />
                </dataSource>
            </environment>
        </environments>
        <!-- 引用映射文件 -->
        <mappers >
            <mapper resource="com/myBatis/mapper/classesMapper.xml"/>
            <mapper resource="com/myBatis/mapper/teacherMapper.xml"/>
            
        </mappers>
    </configuration>

    二、实体类

      Classes

    package com.myBatis.entity;
    
    import java.util.List;
    
    
    public class Classes {
        private int id; // id===>c_id
        private String name; // name===>c_name
        /**
         * class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性,
         * 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的
         */
        private Teacher teacher;
        
        //使用一个List<Student>集合属性表示班级拥有的学生
         private List<Student> students;
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Teacher getTeacher() {
            return teacher;
        }
        public void setTeacher(Teacher teacher) {
            this.teacher = teacher;
        }
        
        public List<Student> getStudents() {
            return students;
        }
        public void setStudents(List<Student> students) {
            this.students = students;
        }
        @Override
        public String toString() {
            return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + ", students=" + students + "]";
        }
        
        //增删改要用到的两个构造方法
        public Classes(String name, Teacher teacher) {
            super();
            this.name = name;
            this.teacher = teacher;
        }
        public Classes() {
            super();
        }
        
        
    }

      Teacher

    package com.myBatis.entity;
    
    public class Teacher {
        // 定义实体类的属性,与teacher表中的字段对应
        private int id; // id===>t_id
        private String name; // name===>t_name
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "Teacher [id=" + id + ", name=" + name + "]";
        }
        public Teacher() {
            super();
        }
        public Teacher(int id) {
            super();
            this.id = id;
        }
        
        
    }

      Student

    package com.myBatis.entity;
    
    public class Student {
    
        //定义属性,和student表中的字段对应
        private int id;            //id===>s_id
        private String name;    //name===>s_name
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + "]";
        }
    }

    三、映射文件

      classessMapper.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,namespace的值习惯上设置成包名+sql映射文件名,
        这样就能够保证namespace的值是唯一的 
        -->
        <mapper namespace="com.myBatis.mapper.classesMapper">
        <!-- 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
                 封装联表查询的数据(去除重复的数据) 
                 根据id查询得到一个user对象 -->
            <select id="getclassess" parameterType="int" resultMap="ClassResultMap">
                 select * from classes c, teacher t where c.t_id=t.t_id and c.c_id=#{id}
            </select>
            <!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
            <resultMap type="Classes" id="ClassResultMap">
                <id property="id" column="c_id"/>
                <result property="name" column="c_name"/>
                <association property="teacher" javaType="Teacher">
                    <id property="id" column="t_id"/>
                    <result property="name" column="t_name"/>
                </association>
            </resultMap>
            <!--  根据id查询删除一个class 的t_id -->
            <delete id="deleteClasses" parameterType="Classes">
                delete from classes where c_id=#{id}
            </delete>
              <!-- 添加(Create) -->
            <insert id="addClasses" parameterType="Classes">
                insert into classes values(null,#{name},#{teacher.id})
            </insert>
             <!-- 修改班级所对应的老师(Update) -->
            <update id="updateClasses" parameterType="Classes">
                update classes set t_id=#{teacher.id} where c_id=#{id}
            </update>
            
         
         <!--一对多 -->   
            <!-- 
                根据classId查询对应的班级信息,包括学生,老师
             -->
        <!-- 
            嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
            SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND  c.c_id=1
         -->
        <select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
            select * from classes c, teacher t,student s where c.t_id=t.t_id and c.c_id=s.class_id and  c.c_id=#{id}
        </select>
        <resultMap type="Classes" id="ClassResultMap3">
            <id property="id" column="c_id"/>
            <result property="name" column="c_name"/>
            <association property="teacher" column="t_id" javaType="Teacher">
                <id property="id" column="t_id"/>
                <result property="name" column="t_name"/>
            </association>
            <!-- ofType指定students集合中的对象类型 -->
            <collection property="students" ofType="Student">
                <id property="id" column="s_id"/>
                <result property="name" column="s_name"/>
            </collection>
        </resultMap>
            
        </mapper>
        

      teacherMapper.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,namespace的值习惯上设置成包名+sql映射文件名,
        这样就能够保证namespace的值是唯一的 
        -->
        <mapper namespace="com.myBatis.mapper.teacherMapper">
            <!-- 根据id查询得到一个user对象 -->
            <select id="getteacher" parameterType="int" resultMap="TeacherResultMap">
                select * from classes c, teacher t where c.t_id=t.t_id and t.t_id=#{id}
            </select>
            <!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
            <resultMap type="teacher" id="TeacherResultMap">
                <id property="id" column="t_id"/>
                <result property="name" column="t_name"/>
            </resultMap>
            
             <insert id="addTeacher" parameterType="Teacher">
                insert into teacher values(#{t_name})
            </insert>
            
        </mapper>
        

    四、封装类

    package com.myBatis.util;
    
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class myBtaisUtil {
        static Reader reader=null;
        static SqlSessionFactory sqlSessionFactory= null;
        static SqlSession sqlSession = null;
        /**
         * 加载核心配置文件
         * 获取SqlSessionFactory
         * @return SqlSessionFactory
         */
        public static SqlSessionFactory getsqlSessionFactory() {
            try {
                reader = Resources.getResourceAsReader("SqlMapConfig.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sqlSessionFactory;
        }
        /**
         * 获取SqlSession
         * @return SqlSession
         */
        public static SqlSession getsqlSession() {
            return sqlSession= getsqlSessionFactory().openSession(true);
        }
    }

    五、测试类

    package myBatisTest;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import com.myBatis.entity.Classes;
    import com.myBatis.entity.Teacher;
    import com.myBatis.util.myBtaisUtil;
    
    public class TestUser {
        //查询
        @Test
        public void testGetClasses() {
            SqlSession sqlSession=myBtaisUtil.getsqlSession();
            String select = "com.myBatis.mapper.classesMapper.getClass3";
            Classes classes = sqlSession.selectOne(select, 1);
            System.out.println(classes);
        }
    }
  • 相关阅读:
    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
    Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途
    Atitit 图像处理 灰度图片 灰度化的原理与实现
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    Atitit 实现java的linq 以及与stream api的比较
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
    Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
    Atitit apache 和guava的反射工具
    atitit。企业的价值观 员工第一 vs 客户第一.docx
  • 原文地址:https://www.cnblogs.com/angelye/p/7464945.html
Copyright © 2011-2022 走看看