一、核心配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 最开始加载引用db.properties文件 -->
  6. <properties resource="db.properties"/>
  7. <!-- 取别名 以下情况别名为类名 -->
  8. <typeAliases>
  9. <package name="com.myBatis.entity"/>
  10. </typeAliases>
  11. <!--
  12. development : 开发模式
  13. work : 工作模式
  14. -->
  15. <environments default="development">
  16. <environment id="development">
  17. <transactionManager type="JDBC" />
  18. <!-- 配置数据库连接信息 -->
  19. <dataSource type="POOLED">
  20. <property name="driver" value="${driver}" />
  21. <property name="url" value="${url}" />
  22. <property name="username" value="${username}" />
  23. <property name="password" value="${password}" />
  24. </dataSource>
  25. </environment>
  26. </environments>
  27. <!-- 引用映射文件 -->
  28. <mappers >
  29. <mapper resource="com/myBatis/mapper/classesMapper.xml"/>
  30. <mapper resource="com/myBatis/mapper/teacherMapper.xml"/>
  31.  
  32. </mappers>
  33. </configuration>

二、实体类

  Classes

  1. package com.myBatis.entity;
  2.  
  3. import java.util.List;
  4.  
  5. public class Classes {
  6. private int id; // id===>c_id
  7. private String name; // name===>c_name
  8. /**
  9. * class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性,
  10. * 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的
  11. */
  12. private Teacher teacher;
  13.  
  14. //使用一个List<Student>集合属性表示班级拥有的学生
  15. private List<Student> students;
  16.  
  17. public int getId() {
  18. return id;
  19. }
  20. public void setId(int id) {
  21. this.id = id;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public Teacher getTeacher() {
  30. return teacher;
  31. }
  32. public void setTeacher(Teacher teacher) {
  33. this.teacher = teacher;
  34. }
  35.  
  36. public List<Student> getStudents() {
  37. return students;
  38. }
  39. public void setStudents(List<Student> students) {
  40. this.students = students;
  41. }
  42. @Override
  43. public String toString() {
  44. return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + ", students=" + students + "]";
  45. }
  46.  
  47. //增删改要用到的两个构造方法
  48. public Classes(String name, Teacher teacher) {
  49. super();
  50. this.name = name;
  51. this.teacher = teacher;
  52. }
  53. public Classes() {
  54. super();
  55. }
  56.  
  57. }

  Teacher

  1. package com.myBatis.entity;
  2.  
  3. public class Teacher {
  4. // 定义实体类的属性,与teacher表中的字段对应
  5. private int id; // id===>t_id
  6. private String name; // name===>t_name
  7. public int getId() {
  8. return id;
  9. }
  10. public void setId(int id) {
  11. this.id = id;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. @Override
  20. public String toString() {
  21. return "Teacher [id=" + id + ", name=" + name + "]";
  22. }
  23. public Teacher() {
  24. super();
  25. }
  26. public Teacher(int id) {
  27. super();
  28. this.id = id;
  29. }
  30.  
  31. }

  Student

  1. package com.myBatis.entity;
  2.  
  3. public class Student {
  4.  
  5. //定义属性,和student表中的字段对应
  6. private int id; //id===>s_id
  7. private String name; //name===>s_name
  8.  
  9. public int getId() {
  10. return id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. @Override
  22. public String toString() {
  23. return "Student [id=" + id + ", name=" + name + "]";
  24. }
  25. }

三、映射文件

  classessMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4.  
  5. <!--一对一 -->
  6. <!--
  7. 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,
  8. 这样就能够保证namespace的值是唯一的
  9. -->
  10. <mapper namespace="com.myBatis.mapper.classesMapper">
  11. <!-- 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
  12. 封装联表查询的数据(去除重复的数据)
  13. 根据id查询得到一个user对象 -->
  14. <select id="getclassess" parameterType="int" resultMap="ClassResultMap">
  15. select * from classes c, teacher t where c.t_id=t.t_id and c.c_id=#{id}
  16. </select>
  17. <!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
  18. <resultMap type="Classes" id="ClassResultMap">
  19. <id property="id" column="c_id"/>
  20. <result property="name" column="c_name"/>
  21. <association property="teacher" javaType="Teacher">
  22. <id property="id" column="t_id"/>
  23. <result property="name" column="t_name"/>
  24. </association>
  25. </resultMap>
  26. <!-- 根据id查询删除一个class 的t_id -->
  27. <delete id="deleteClasses" parameterType="Classes">
  28. delete from classes where c_id=#{id}
  29. </delete>
  30. <!-- 添加(Create) -->
  31. <insert id="addClasses" parameterType="Classes">
  32. insert into classes values(null,#{name},#{teacher.id})
  33. </insert>
  34. <!-- 修改班级所对应的老师(Update) -->
  35. <update id="updateClasses" parameterType="Classes">
  36. update classes set t_id=#{teacher.id} where c_id=#{id}
  37. </update>
  38.  
  39. <!--一对多 -->
  40. <!--
  41. 根据classId查询对应的班级信息,包括学生,老师
  42. -->
  43. <!--
  44. 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
  45. 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
  46. -->
  47. <select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
  48. 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}
  49. </select>
  50. <resultMap type="Classes" id="ClassResultMap3">
  51. <id property="id" column="c_id"/>
  52. <result property="name" column="c_name"/>
  53. <association property="teacher" column="t_id" javaType="Teacher">
  54. <id property="id" column="t_id"/>
  55. <result property="name" column="t_name"/>
  56. </association>
  57. <!-- ofType指定students集合中的对象类型 -->
  58. <collection property="students" ofType="Student">
  59. <id property="id" column="s_id"/>
  60. <result property="name" column="s_name"/>
  61. </collection>
  62. </resultMap>
  63.  
  64. </mapper>

  teacherMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <!--
  5. 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,
  6. 这样就能够保证namespace的值是唯一的
  7. -->
  8. <mapper namespace="com.myBatis.mapper.teacherMapper">
  9. <!-- 根据id查询得到一个user对象 -->
  10. <select id="getteacher" parameterType="int" resultMap="TeacherResultMap">
  11. select * from classes c, teacher t where c.t_id=t.t_id and t.t_id=#{id}
  12. </select>
  13. <!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
  14. <resultMap type="teacher" id="TeacherResultMap">
  15. <id property="id" column="t_id"/>
  16. <result property="name" column="t_name"/>
  17. </resultMap>
  18.  
  19. <insert id="addTeacher" parameterType="Teacher">
  20. insert into teacher values(#{t_name})
  21. </insert>
  22.  
  23. </mapper>

四、封装类

  1. package com.myBatis.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.Reader;
  5.  
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10.  
  11. public class myBtaisUtil {
  12. static Reader reader=null;
  13. static SqlSessionFactory sqlSessionFactory= null;
  14. static SqlSession sqlSession = null;
  15. /**
  16. * 加载核心配置文件
  17. * 获取SqlSessionFactory
  18. * @return SqlSessionFactory
  19. */
  20. public static SqlSessionFactory getsqlSessionFactory() {
  21. try {
  22. reader = Resources.getResourceAsReader("SqlMapConfig.xml");
  23. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }
  27. return sqlSessionFactory;
  28. }
  29. /**
  30. * 获取SqlSession
  31. * @return SqlSession
  32. */
  33. public static SqlSession getsqlSession() {
  34. return sqlSession= getsqlSessionFactory().openSession(true);
  35. }
  36. }

五、测试类

  1. package myBatisTest;
  2. import org.apache.ibatis.session.SqlSession;
  3. import org.junit.Test;
  4.  
  5. import com.myBatis.entity.Classes;
  6. import com.myBatis.entity.Teacher;
  7. import com.myBatis.util.myBtaisUtil;
  8.  
  9. public class TestUser {
  10. //查询
  11. @Test
  12. public void testGetClasses() {
  13. SqlSession sqlSession=myBtaisUtil.getsqlSession();
  14. String select = "com.myBatis.mapper.classesMapper.getClass3";
  15. Classes classes = sqlSession.selectOne(select, 1);
  16. System.out.println(classes);
  17. }
  18. }

【MyBatis】-----【MyBatis】---表级联系【一对多】的更多相关文章

  1. 【MyBatis】-----【MyBatis】---表级联系【一对一】--增删改查

    一.核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...

  2. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现.不过这里不说,做关联查询的步骤可以简单的总结为以下的几步: 1.分 ...

  3. Mybatis注解开发多表一对一,一对多

    Mybatis注解开发多表一对一,一对多 一对一 示例:帐户和用户的对应关系为,多个帐户对应一个用户,在实际开发中,查询一个帐户并同时查询该账户所属的用户信息,即立即加载且在mybatis中表现为一对 ...

  4. 【Mybatis】MyBatis之表的关联查询(五)

    本章介绍Mybatis之表的关联查询 一对一关联 查询员工信息以及员工的部门信息 1.准备表employee员工表,department部门表 CREATE TABLE `employee` ( `i ...

  5. MyBatis 多表查询

    1.多表设计 多表查询 a.多表设计 (1)一对一 在任意一方设计外键保存另一张表的主键,维系表和表的关系 (2)一对多 在多的一方设计外键保存一的一方的主键,维系表和表的关系 (3)多对多 设计一张 ...

  6. SSM(二)MyBatis多表联查

    这篇文章写了以下几个简单的例子,用来说明MyBatis多标联查基本语法 1.sql片段的用法 2.一对多查询 3.多条sql的一对多查询 4.多对一查询 5.多条sql一对多查询 6.多对多查询 这里 ...

  7. Mybatis多表操作

    一:引言 在学习完前面的mybatis基本语法后,大家都有个认知,这个Mybatis太强大了,比之前使用JDBC写方便多了,但是你们当初在使用原生JDBC写SQL查询的时候有没有遇到过多表查询呢?肯定 ...

  8. 【MyBatis】MyBatis 多表操作

    MyBatis 多表操作 文章源码 一对一查询 需求:查询所有账户信息,关联查询下单用户信息. 注意:因为一个账户信息只能供某个用户使用,所以从查询账户信息出发关联查询用户信息为一对一查询.如果从用户 ...

  9. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

随机推荐

  1. python-字符编码的转换

    python-字符编码的转换 1.了解基础知识 ASCII  一个英文,占一个字节.只能存英文和特殊字符. gb2312 约可以存7000中文 gb1830 约可以存27000中文 gbk 默认中文, ...

  2. mongoose 开源http库

    Mongoose是一个用C编写的网络库.它为客户端和服务器模式实现TCP,UDP,HTTP,WebSocket,CoAP,MQTT的事件驱动的非阻塞API. 设计理念: Mongoose有三个基本的数 ...

  3. 016-zabbix低级自动发现以及MySQL多实例

    1.概述 Zabbix的网络发现是指zabbix server通过配置好的规则,自动添加host,group,template Zabbix的主动注册刚好和网络发现是相反的,功能基本一致.zabbix ...

  4. 校内题目T2691 桶哥的问题——送桶

    这是一道校内题目,但迷路的蒟蒻们同样被欢迎来此学习QWQ 题目描述: 题目背景 @桶哥本校——皎月pks大佬OrzOrz 买完了桶,桶哥要去送桶. 题目描述 桶哥买了nn个桶, 他要将这些桶送去nn个 ...

  5. 浅谈java虚拟机|系列2|JVM运行时

    今天我们继续谈谈JVM架构. 今天主要讲讲JVM运行时, 先来一个图: 上篇文章,我们知道,JVM运行时,简单来说就是把class文件翻译成操作系统相关的机器码(或汇编语言),然后通过调用操作系统函数 ...

  6. 流式布局和viewport

    流式布局 百分比布局,非固定宽度,内容向两边填充,流动的布局. viewport(视口) PC端的网页在手机端的浏览器显示是不会出现网页的,这是因为移动端的网页不是直接放在移动端的浏览器中,而是放在移 ...

  7. Ubuntu启动器创建

    Ubuntu 启动器创建 启动器的本质是一个后缀为.desktop的文件,文件内容如下(这里为我创建的Chrome启动器) [Desktop Entry] Encoding=UTF- Name=Chr ...

  8. xz 解压缩命令,老是忘记

    .tar.xz的解压命令 $ xz -d ***.tar.xz $ tar -xvf ***.tar 或者 $ tar xvJf ***.tar.xz

  9. 【NOIP2016提高A组模拟9.14】数列编辑器

    题目 分析 比赛上,没有注意到询问只询问光标前面,于是只打了个暴力. 因为询问只询问光标前面,首先,当光标向后每移动到一个位置,顺便将这个位置的前缀和,和最大前缀和求出来. 总之,模拟 #includ ...

  10. c# linq 分组groupby

    转载: https://www.cnblogs.com/cncc/p/9846390.html 一.先准备要使用的类: 1.Person类: class Person { public string ...