【MyBatis】-----【MyBatis】--CURD---表级联系【一对一】

一、核心配置文件

 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     </mappers>
31 </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
24
25 }

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

三、映射文件

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" resultType="Teacher">
11             select * from teacher where id=#{id}
12         </select>
13
14     </mapper>
15     

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
25     </mapper>
26     

四、测试类

 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.util.myBtaisUtil;
 7
 8 public class TestUser {
 9     /**
10      *
11     //修改
12     @Test
13     public void testUpdateUser() {
14         SqlSession sqlSession=myBtaisUtil.getsqlSession();
15         //先查找
16          String select = "com.myBatis.mapper.userMapper.xml.getUser";
17          EUser  user = sqlSession.selectOne(select, 7);
18          System.out.println(user);
19          //再修改
20         user.setName("改啦7777");
21         user.setAge(50);
22         String update = "com.myBatis.mapper.userMapper.xml.updateUser";
23         int i = sqlSession.update(update, user);
24          System.out.println(i);
25          EUser  user1= sqlSession.selectOne(select, 7);
26          System.out.println(user1);
27     }
28
29
30     //添加
31     @Test
32     public void testAddUser() {
33         SqlSession sqlSession=myBtaisUtil.getsqlSession();
34          String add = "com.myBatis.mapper.userMapper.xml.addUser";
35          EUser user = new EUser();
36         user.setName("用户孤傲苍狼");
37         user.setAge(20);
38         int i = sqlSession.insert(add, user);
39          System.out.println(i);
40     }
41     //删除
42     @Test
43     public void testDeleteUser() {
44         SqlSession sqlSession=myBtaisUtil.getsqlSession();
45         String delete = "com.myBatis.mapper.userMapper.xml.deleteUser";
46         int i= sqlSession.delete(delete, 6);
47         System.out.println(i);
48     }
49      */
50     //查询
51     @Test
52     public void testGetUser() {
53         SqlSession sqlSession=myBtaisUtil.getsqlSession();
54         String select = "com.myBatis.mapper.classesMapper.getclassess";
55         Classes classes = sqlSession.selectOne(select, 1);
56         System.out.println(classes);
57     }
58 }

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

时间: 2024-10-07 22:38:17

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

Mybatis多表查询之一对一查询的多种实现-XML配置

Mybatis 中对于多表查询提供了非常强大的实现方式,主要是通过resultMap的结果映射对于多表查询后的返回值进行封装,让我们来看一下官网上对于resultMap的解释:resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作.实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码.R

mybatis 详解(七)------一对一、一对多、多对多

前面几篇博客我们用mybatis能对单表进行增删改查操作了,也能用动态SQL书写比较复杂的sql语句.但是在实际开发中,我们做项目不可能只是单表操作,往往会涉及到多张表之间的关联操作.那么我们如何用 mybatis 处理多表之间的关联操作呢?请看本篇博客详解. 本篇详细代码:http://pan.baidu.com/s/1eSzmst8 密码:3n3o 1.一对一 我们以用户表 user 和订单表 orders 为例.设定一个订单只能由一个 用户创建,那么由订单到用户就是一对一的关系. ①.创建

SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

 下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表     user表:  account表:  然后创建实体类        **第一种通过创建子类的方式查询                             需求:查询所有的用户基础信息以及其所属的账户中的金额     1.创建想要得到多表查询数据的实体类(子类)            

Mybatis自动创建表/更新表结构

最近有小伙伴问我mybatis有没有自动创建表结构的功能,因为他们之前一直使用hibernate用习惯了,理所当然的认为,在实体类上配置下注解或者写写映射文件,系统启动后就可以自动创建表. 我只能很遗憾的告诉他,mybatis并没有这个功能,看他兴致阑珊的样子,我只能安慰他,就算没有这功能,我们可以自己开发啊~~ 所以就有了下面这套系统,已开源大家可以下来看看~~ Mybatis_BuildTable_V0.2 https://git.oschina.net/sunchenbin/Mybatis

mybatis 处理多表关联

MyBatis的核心是其映射文件,SqlMap文件,里面配置了项目中用到了什么SQL语句,和数据库相关的逻辑都在这个映射文件里.顾名思义,映射文件就是对Java对象和SQL的映射.这里简单介绍一下映射文件中resultMap的用法:resultMap – 它描述如何将结果集映射到Java对象.resultMap属性:type为java实体类:id为此resultMap的标识:<resultMap id="BaseResultMap" type="com.test.myb

mybatis 操作动态表+动态字段+存储过程

mybatis 操作动态表+动态字段+存储过程 存储过程   statementType="CALLABLE" <!-- 计算金额存储过程--> <update id="getCalcDistributorSettle" statementType="CALLABLE" parameterType="java.util.Map"> <![CDATA[ CALL procCalcDistributo

Mybatis的分表实战

前言: 以前写代码, 关于mysql的分库分表已被中间件服务所支持, 业务代码涉及的sql已规避了这块. 它对扩展友好, 你也不知道到底他分为多少库, 多少表, 一切都是透明的. 不过对于小的团队/工作室而言, 可能就没有那么强大的分布式中间件的基础设施支持了, 而当数据库上去的时候, 分库分表就需要客户端client这边去支持维护了. 如何优雅地使用mybatis支持分表, 这就是本文的主题. 系列相关文章: 1. spring+mybatis的多源数据库配置实战  参考的博文: 1. MyB

[转]MyBatis动态传入表名,字段名参数的解决办法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先

Mybatis的多表(多对多)查询

Mybatis的多表(多对多)查询 示例:用户和角色 一个用户可以有多个角色 一个角色可以赋予多个用户 解决办法 建立两张表:用户表,角色表 让用户表和角色表具有多对多的关系.需要使用中间表,中间表包含各自的主键,在中间表中是外键. 建立两个实体类:用户实体类和角色实体类 让用户和角色的实体类能体现出来多对多的关系 各自包含对方一个集合引用 建立两个配置文件 用户的配置文件 角色的配置文件 实现配置 当我们查询用户时,可以同时得到用户所包含的角色信息. 当我们查询角色时,可以同时得到角色所赋予的

(转)MyBatis &amp; MyBatis Plus

(二期)3.mybatis与mybatis plus [课程三]mybatis ...运用.xmind0.1MB [课程三]mybatis...机制.xmind0.2MB [课程三]mybatis与jdbc.xmind0.2MB [课程三]多数据源处理.xmind49.4KB [课程三]数据库...字段.xmind38.4KB [课程三预习]myb...plus.xmind73.9KB 讲课顺序: mybatis基本概念 jdbc与mybatis关系 mybatis的主要组件 mybatis的二