一、核心配置文件

  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. </mappers>
  32. </configuration>

二、实体类

  2.1Teacher

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

  2.2Classes

  1. package com.myBatis.entity;
  2.  
  3. public class Classes {
  4. private int id; // id===>c_id
  5. private String name; // name===>c_name
  6. /**
  7. * class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性,
  8. * 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的
  9. */
  10. private Teacher teacher;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public Teacher getTeacher() {
  24. return teacher;
  25. }
  26. public void setTeacher(Teacher teacher) {
  27. this.teacher = teacher;
  28. }
  29. @Override
  30. public String toString() {
  31. return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + "]";
  32. }
  33. public Classes(String name, Teacher teacher) {
  34. super();
  35. this.name = name;
  36. this.teacher = teacher;
  37. }
  38. public Classes() {
  39. super();
  40. }
  41.  
  42. }

三、映射文件

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>

classesMapper.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.classesMapper">
  9. <!-- 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
  10. 封装联表查询的数据(去除重复的数据)
  11. 根据id查询得到一个user对象 -->
  12. <select id="getclassess" parameterType="int" resultMap="ClassResultMap">
  13. select * from classes c, teacher t where c.t_id=t.t_id and c.c_id=#{id}
  14. </select>
  15. <!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
  16. <resultMap type="Classes" id="ClassResultMap">
  17. <id property="id" column="c_id"/>
  18. <result property="name" column="c_name"/>
  19. <association property="teacher" javaType="Teacher">
  20. <id property="id" column="t_id"/>
  21. <result property="name" column="t_name"/>
  22. </association>
  23. </resultMap>
  24. <!-- 根据id查询删除一个class 的t_id -->
  25. <delete id="deleteClasses" parameterType="Classes">
  26. delete from classes where c_id=#{id}
  27. </delete>
  28. <!-- 添加(Create) -->
  29. <insert id="addClasses" parameterType="Classes">
  30. insert into classes values(null,#{name},#{teacher.id})
  31. </insert>
  32. <!-- 修改班级所对应的老师(Update) -->
  33. <update id="updateClasses" parameterType="Classes">
  34. update classes set t_id=#{teacher.id} where c_id=#{id}
  35. </update>
  36.  
  37. </mapper>

四、测试类

  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 testUpdateClasses() {
  13. SqlSession sqlSession=myBtaisUtil.getsqlSession();
  14. //先查找
  15. String selectclasses = "com.myBatis.mapper.classesMapper.getclassess";
  16. Classes classes =sqlSession.selectOne(selectclasses, 3);
  17. System.out.println(classes);
  18. //再修改
  19. Teacher teacher = new Teacher(4);
  20. System.out.println();
  21. classes.setTeacher(teacher);
  22. String update = "com.myBatis.mapper.classesMapper.updateClasses";
  23. int i = sqlSession.update(update, classes);
  24. System.out.println(i);
  25. Classes classes2= sqlSession.selectOne(selectclasses, 3);
  26. System.out.println(classes2);
  27. }
  28.  
  29. //添加
  30. @Test
  31. public void testAddClasses() {
  32. SqlSession sqlSession=myBtaisUtil.getsqlSession();
  33. String add = "com.myBatis.mapper.classesMapper.addClasses";
  34. Classes classes = new Classes();
  35. Teacher teacher= new Teacher(4);
  36. classes.setName("1111");
  37. classes.setTeacher(teacher);
  38. int i = sqlSession.insert(add, classes);
  39. System.out.println(i);
  40. }
  41.  
  42. //删除
  43. @Test
  44. public void testDeleteClasses() {
  45. SqlSession sqlSession=myBtaisUtil.getsqlSession();
  46. String delete = "com.myBatis.mapper.classesMapper.deleteClasses";
  47. int i= sqlSession.delete(delete, 5);
  48. System.out.println(i);
  49. }
  50.  
  51. //查询
  52. @Test
  53. public void testGetClasses() {
  54. SqlSession sqlSession=myBtaisUtil.getsqlSession();
  55. String select = "com.myBatis.mapper.classesMapper.getclassess";
  56. Classes classes = sqlSession.selectOne(select, 7);
  57. System.out.println(classes);
  58. }
  59. }

MyBatis一对一关联查询总结

  MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:

  • property:对象属性的名称
  • javaType:对象属性的类型
  • column:所对应的外键字段名称
  • select:使用另一个查询封装的结果

参考:MyBatis学习总结(五)——实现关联表查询

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

  1. MyBatis学习(三)MyBatis基于动态代理方式的增删改查

    1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...

  2. Mybatis实现简单的CRUD(增删改查)原理及实例分析

    Mybatis实现简单的CRUD(增删改查) 用到的数据库: CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user` ...

  3. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  4. Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查

    一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...

  5. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  6. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  7. mysql对库,表及记录的增删改查

    破解密码 #1.关闭mysqlnet stop mysqlmysql还在运行时需要输入命令关闭,也可以手动去服务关闭 #2.重新启动mysqld --skip-grant-tables跳过权限 #3m ...

  8. MyBatis初级实战之二:增删改查

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. 02.Mybatis的动态代理方式实现增删改查

    动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...

  10. Mybatis学习笔记之---CRUD(增删改查)

    Mybatis的CRUD(增删改查) 1.pom.xml <dependencies> <dependency> <groupId>junit</groupI ...

随机推荐

  1. 通过TCP传送结构体的问题

    这个问题在其他博客中已经给出了解决方案,这里结合自己的Demo说一下. 函数调用的库文件是基于TCP协议的封装,在传送消息体的时候,发送消息结果大体如下: XXXXPost(srcid, EVENT, ...

  2. 初试 pyhton 简易采集

    一.安装软件(用eclispe 搭建好环境好,没有取省自动补全编写代码会很卡,最后选用sumblie) eclispe  用的windows 32 4.31 python  用的 4.3.3  下载地 ...

  3. Qualcomm_Mobile_OpenCL.pdf 翻译-5-性能优化的概述

    这章提供了一个OpenCL应用程序优化的总体概述.更多的细节将会在接下来的章节中找到. 注意:OpenCL程序的优化是具有挑战性的.相比初始的程序开发工作,经常需要做更多的工作. 5.1 性能移植性 ...

  4. Python 元组Ⅱ

    删除元组 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例: 以上实例元组被删除后,输出变量会有异常信息,输出如下所示: 元组运算符 与字符串一样,元组之间可以使用 + ...

  5. 利用poi操作word文档

    关键字:POI JAVA 批注 总页数 总字符数 一:认识POI Apache POI是一个开源的利用Java读写Excel.WORD等微软OLE2组件文档的项目.最新的3.5版本有很多改进,加入了对 ...

  6. js 复杂研究

    function test_001() { var t =0; return t || out_str("t未定义"), //1 // 执行1句;在执行2句; t||null // ...

  7. React Native中集成友盟社会化分享-----童叟无欺

    1.下载所需的jar,下载地址https://developer.umeng.com/sdk/reactnative?spm=a211g2.211692.0.0.28967d238GW6mC 2.将以 ...

  8. EF大数据插入

    _April给出代码: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotati ...

  9. WebStorm 在 Mac 版本的基本设置,包括 ES6、Node.js、字体大小等

    WebStorm 在 Mac 和 win 的设置有区别,便于以后用到快速查找,记之. 要设置先点击 WebStorm 字样如下图: 后点击 Preferences 字样如下图: 设置 es6 语法, ...

  10. Mybatis学习笔记之---编写dao实现类的CRUD

    Mybatis编写dao实现类的CRUD 1.pom.xml <dependencies> <dependency> <groupId>junit</grou ...