【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>
二、实体类
2.1Teacher
- 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;
- }
- }
2.2Classes
- package com.myBatis.entity;
- 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;
- 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;
- }
- @Override
- public String toString() {
- return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + "]";
- }
- public Classes(String name, Teacher teacher) {
- super();
- this.name = name;
- this.teacher = teacher;
- }
- public Classes() {
- super();
- }
- }
三、映射文件
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>
classesMapper.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>
- </mapper>
四、测试类
- 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 testUpdateClasses() {
- SqlSession sqlSession=myBtaisUtil.getsqlSession();
- //先查找
- String selectclasses = "com.myBatis.mapper.classesMapper.getclassess";
- Classes classes =sqlSession.selectOne(selectclasses, 3);
- System.out.println(classes);
- //再修改
- Teacher teacher = new Teacher(4);
- System.out.println();
- classes.setTeacher(teacher);
- String update = "com.myBatis.mapper.classesMapper.updateClasses";
- int i = sqlSession.update(update, classes);
- System.out.println(i);
- Classes classes2= sqlSession.selectOne(selectclasses, 3);
- System.out.println(classes2);
- }
- //添加
- @Test
- public void testAddClasses() {
- SqlSession sqlSession=myBtaisUtil.getsqlSession();
- String add = "com.myBatis.mapper.classesMapper.addClasses";
- Classes classes = new Classes();
- Teacher teacher= new Teacher(4);
- classes.setName("1111");
- classes.setTeacher(teacher);
- int i = sqlSession.insert(add, classes);
- System.out.println(i);
- }
- //删除
- @Test
- public void testDeleteClasses() {
- SqlSession sqlSession=myBtaisUtil.getsqlSession();
- String delete = "com.myBatis.mapper.classesMapper.deleteClasses";
- int i= sqlSession.delete(delete, 5);
- System.out.println(i);
- }
- //查询
- @Test
- public void testGetClasses() {
- SqlSession sqlSession=myBtaisUtil.getsqlSession();
- String select = "com.myBatis.mapper.classesMapper.getclassess";
- Classes classes = sqlSession.selectOne(select, 7);
- System.out.println(classes);
- }
- }
MyBatis一对一关联查询总结
MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:
- property:对象属性的名称
- javaType:对象属性的类型
- column:所对应的外键字段名称
- select:使用另一个查询封装的结果
【MyBatis】-----【MyBatis】---表级联系【一对一】--增删改查的更多相关文章
- MyBatis学习(三)MyBatis基于动态代理方式的增删改查
1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...
- Mybatis实现简单的CRUD(增删改查)原理及实例分析
Mybatis实现简单的CRUD(增删改查) 用到的数据库: CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user` ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- mysql对库,表及记录的增删改查
破解密码 #1.关闭mysqlnet stop mysqlmysql还在运行时需要输入命令关闭,也可以手动去服务关闭 #2.重新启动mysqld --skip-grant-tables跳过权限 #3m ...
- MyBatis初级实战之二:增删改查
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 02.Mybatis的动态代理方式实现增删改查
动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...
- Mybatis学习笔记之---CRUD(增删改查)
Mybatis的CRUD(增删改查) 1.pom.xml <dependencies> <dependency> <groupId>junit</groupI ...
随机推荐
- 通过TCP传送结构体的问题
这个问题在其他博客中已经给出了解决方案,这里结合自己的Demo说一下. 函数调用的库文件是基于TCP协议的封装,在传送消息体的时候,发送消息结果大体如下: XXXXPost(srcid, EVENT, ...
- 初试 pyhton 简易采集
一.安装软件(用eclispe 搭建好环境好,没有取省自动补全编写代码会很卡,最后选用sumblie) eclispe 用的windows 32 4.31 python 用的 4.3.3 下载地 ...
- Qualcomm_Mobile_OpenCL.pdf 翻译-5-性能优化的概述
这章提供了一个OpenCL应用程序优化的总体概述.更多的细节将会在接下来的章节中找到. 注意:OpenCL程序的优化是具有挑战性的.相比初始的程序开发工作,经常需要做更多的工作. 5.1 性能移植性 ...
- Python 元组Ⅱ
删除元组 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例: 以上实例元组被删除后,输出变量会有异常信息,输出如下所示: 元组运算符 与字符串一样,元组之间可以使用 + ...
- 利用poi操作word文档
关键字:POI JAVA 批注 总页数 总字符数 一:认识POI Apache POI是一个开源的利用Java读写Excel.WORD等微软OLE2组件文档的项目.最新的3.5版本有很多改进,加入了对 ...
- js 复杂研究
function test_001() { var t =0; return t || out_str("t未定义"), //1 // 执行1句;在执行2句; t||null // ...
- React Native中集成友盟社会化分享-----童叟无欺
1.下载所需的jar,下载地址https://developer.umeng.com/sdk/reactnative?spm=a211g2.211692.0.0.28967d238GW6mC 2.将以 ...
- EF大数据插入
_April给出代码: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotati ...
- WebStorm 在 Mac 版本的基本设置,包括 ES6、Node.js、字体大小等
WebStorm 在 Mac 和 win 的设置有区别,便于以后用到快速查找,记之. 要设置先点击 WebStorm 字样如下图: 后点击 Preferences 字样如下图: 设置 es6 语法, ...
- Mybatis学习笔记之---编写dao实现类的CRUD
Mybatis编写dao实现类的CRUD 1.pom.xml <dependencies> <dependency> <groupId>junit</grou ...