学习参考自luckysky博客

本次例子要完成的是mybatis关系映射中一对多的关系:比如一个学生对应一个专业,一个专业对应多个学生。

需求:1、根据学号查找该学生以及用查询后学生的专业外键值查出该生专业对象

2、根据专业id值查出专业以及所有属于该专业的学生

mybatis的映射实现方法有两种:1、通过一条sql语句的映射和自定义的resultMap结果集得到一个包含专业对象的学生对象结果或一个包含学生集合对象的专业对象结果集。如:select * from stuinfo s,major m where s.sno=#{sno} and s.majorId=m.id

2、通过两条sql语句的先后执行(其中一条查询的条件为另一个的执行结果)

如:先查询出学生对象select * from stuinfo where sno=#{sno},再通过外键查出专业:select * from major where id=#{majorId}

mybatis 中映射的实现方法:

<select id="getStuAndMajor" resultMap="stuAndMajor" parameterType="String">select * from stuinfo where sno=#{sno}
</select><resultMap type="Stuinfo" id="stuAndMajor"><id property="sno" column="sno"/><result property="sname" column="sname"/><association property="major" javaType="Major" select="getMajor" column="majorId"/>
</resultMap><select id="getMajor" resultType="Major" parameterType="int">select * from major where id=#{majorId}
</select>

数据库stuinfo表:

major表:

其中学生表外键majorId是专业表的主键

1、项目目录结构如下

2、Major、Stuinfo实体类

package com.onetomany.model;import java.util.List;public class Major {private int id;private String majorName;private int personNum;private String turtor;private List<Stuinfo> students;@Overridepublic String toString() {return "Major [id=" + id + ", majorName=" + majorName + ", personNum=" + personNum + ", turtor=" + turtor+ ", students=" + students + "]";}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getMajorName() {return majorName;}public void setMajorName(String majorName) {this.majorName = majorName;}public int getPersonNum() {return personNum;}public void setPersonNum(int personNum) {this.personNum = personNum;}public String getturtor() {return turtor;}public void setturtor(String turtor) {this.turtor = turtor;}public List<Stuinfo> getStudents() {return students;}public void setStudents(List<Stuinfo> students) {this.students = students;}}
package com.onetomany.model;import java.util.Date;public class Stuinfo {private String sno;private String sname;private int gender;private Date birthday;private int majorId;private Major major;private int credit;private String remark;public String getSno() {return sno;}public void setSno(String sno) {this.sno = sno;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public int getMajorId() {return majorId;}public void setMajorId(int majorId) {this.majorId = majorId;}public Major getMajor() {return major;}public void setMajor(Major major) {this.major = major;}public int getCredit() {return credit;}public void setCredit(int credit) {this.credit = credit;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}@Overridepublic String toString() {return "Stuinfo [sno=" + sno + ", sname=" + sname + ", gender=" + gender + ", birthday=" + birthday+ ", majorId=" + majorId + ", major=" + major + ", credit=" + credit + ", remark=" + remark + "]";}}

3、mybatis.xml

<?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><properties resource="mysql.properties"/><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="${user}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="com/onetomany/mapper/majorMapper.xml"/><mapper resource="com/onetomany/mapper/StuinfoMapper.xml"/>        </mappers></configuration>

4、majorMapper.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="com.onetomany.mapper.InterDaoMapper"><resultMap id="majorMap" type="com.onetomany.model.Major"><id property="id" column="id" javaType="java.lang.Integer"/><result property="majorName" column="majorName" javaType="java.lang.String"/><result property="personNum" column="personNum" javaType="java.lang.Integer"/><result property="turtor" column="turtor" javaType="java.lang.String"/><!-- 对象属性集合返回值设置 --><collection property="students" ofType="com.onetomany.model.Stuinfo"><id property="sno" column="sno" javaType="java.lang.String"/><!-- id列 --><result property="sname" column="sname" javaType="java.lang.String"/><result property="gender" column="gender" javaType="java.lang.Integer"/><result property="birthday" column="birthday" javaType="java.util.Date"/><result property="credit" column="credit" javaType="java.lang.Integer"/><result property="remark" column="remark" javaType="java.lang.String"/></collection></resultMap><select id="getMajorStudents" parameterType="int" resultMap="majorMap">select * from major m,stuinfo s where m.id=#{id} and s.majorId=#{id}</select></mapper>

5、StuinfoMapper.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="com.onetomany.mapper.InterDaoMapper"><!-- 自定义返回的结果集 --><resultMap id="stuMap" type="com.onetomany.model.Stuinfo"><id property="sno" column="sno" javaType="java.lang.String"/><!-- id列 --><result property="sname" column="sname" javaType="java.lang.String"/><result property="gender" column="gender" javaType="java.lang.Integer"/><result property="majorId" column="majorId" javaType="java.lang.Integer"/><result property="birthday" column="birthday" javaType="java.util.Date"/><result property="credit" column="credit" javaType="java.lang.Integer"/><result property="remark" column="remark" javaType="java.lang.String"/><association property="major" javaType="com.onetomany.model.Major"><!-- 关联对象属性 --><id property="id" column="id" javaType="java.lang.Integer"/><result property="majorName" column="majorName" javaType="java.lang.String"/><result property="personNum" column="personNum" javaType="java.lang.Integer"/><result property="turtor" column="turtor" javaType="java.lang.String"/></association></resultMap><!-- 映射接口方法 --><select id="getStuinfo" parameterType="String" resultMap="stuMap">select * from stuinfo s,major m where s.sno=#{sno} and s.majorId=m.id</select></mapper>

6、DBtool

package com.onetomany.tool;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 DBtool {private static SqlSessionFactory sqlSessionFactory;static{try {Reader reader=Resources.getResourceAsReader("mybatis.cfg.xml");sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}

7、InterDaoMapper

package com.onetomany.mapper;import java.util.List;import com.onetomany.model.Major;
import com.onetomany.model.Stuinfo;public interface InterDaoMapper {public Stuinfo getStuinfo(String sno);  //通过学号获取学生对象包括其专业对象public Major getMajorStudents(int id);//通过id值获得该专业的所有学生
}

8、MapperImpl

package com.onetomany.mapper;import org.apache.ibatis.session.SqlSession;import com.onetomany.model.Major;
import com.onetomany.model.Stuinfo;
import com.onetomany.tool.DBtool;public class MapperImpl implements InterDaoMapper {@Overridepublic Stuinfo getStuinfo(String sno) {SqlSession sqlSession=DBtool.getSqlSession();InterDaoMapper mapper=sqlSession.getMapper(InterDaoMapper.class);Stuinfo stu=mapper.getStuinfo(sno);sqlSession.commit();sqlSession.close();return stu;}@Overridepublic Major getMajorStudents(int id) {SqlSession sqlSession=DBtool.getSqlSession();InterDaoMapper mapper=sqlSession.getMapper(InterDaoMapper.class);Major major=mapper.getMajorStudents(id);sqlSession.commit();sqlSession.close();return major;}}

9、test

package com.onetomany.service;import com.onetomany.mapper.InterDaoMapper;
import com.onetomany.mapper.MapperImpl;
import com.onetomany.model.Major;
import com.onetomany.model.Stuinfo;public class Test {public static void main(String[] args) {InterDaoMapper interDaoMapper=new MapperImpl();Stuinfo student=interDaoMapper.getStuinfo("081005");System.out.println(student);Major major=interDaoMapper.getMajorStudents(15);System.out.println(major);}
}

10、结果

Mybatis 一对多关系相关推荐

  1. MyBatis一对多关系的配置

    用户与用户订单 关系分析:一个用户对应多个订单,多个订单对应一个用户.(1...n) 实现步骤: 导入jar包: 创建数据库数据表 .在多的一方,添加一的一方的主键作为外键,利用外键关联: 创建poj ...

  2. MyBatis一对多关系映射

    1.使用的数据脚本为: DROP DATABASE IF EXISTS mybatisdb ; CREATE DATABASE mybatisdb CHARACTER SET UTF8 ; USE m ...

  3. mybatis 一对多关系映射 select子查询 只有一条数据 解决方案

    一般一对多 多的那个会是联合主键 所以要这么设置 <resultMap id="CfdMap" type="com.sxq.cloud.entity.ZhyyB2C ...

  4. Mybatis学习笔记 4:Mybatis 连表查询(一)——一对多关系

    完整代码在这 在查询数据库时,我们经常会遇到多张表联合查询的情况,而Mybatis使连表查询更加简便了,查询出的数据格式非常易于使用,省去了一大部分复杂的代码编写工作,对于关系型数据库来说,数据模型之 ...

  5. Mybatis xml中配置一对一关系association一对多关系collection

    Mybatis xml中配置一对一关系association&一对多关系collection 今天在配置一对一关系映射以及一对多关系映射的时候,把collection中应该使用的ofType配 ...

  6. 3.SpringBoot整合Mybatis(一对多)

    前言: Mybatis一对多的处理关系: 一个人有好多本书,每本书的主人只有一个人.当我们查询某个人拥有的所有书籍时,就涉及到了一对多的映射关系. 一.添加数据表: 1 CREATE TABLE `b ...

  7. Mybatis一对多、多对一、批量插入

    在项目开发中,我们有遇到的对象关系通常是复杂的,每个对象并不是单独的.比如学生和老师之间关系,一个老师有多个学生,每个学生会对应一个老师(这里的老师主要是班主任),这种关系其实就是一对多的关系.Myb ...

  8. 详解Mybatis一对多、多对一、多对多

    1.什么是关系型数据库? 这个东西我仿佛在大学的<数据库原理>中学过,好吧,我不记得了,来整理一下. 是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据.简 ...

  9. Mybatis - 一对多/多对一映射

    文章目录 前言 项目结构 一.数据库表 1. 员工表 t_emp 2. 部门表 t_dept 二.实体类 1. Emp 员工实体类(添加多对一属性) 2. dept 部门实体类(添加一对多属性) 三. ...

最新文章

  1. 63、使用Timer类来实现定时任务
  2. python drop函数_用python帮财务小姐姐自动生成财务报表
  3. 关于Git中的一些常用的命令
  4. 编写一个Windows服务程序,定时从数据库中拿出记录发送邮件
  5. 局域网上传文件到服务器很慢,win10局域网内传文件很慢怎么办_win10局域网内文件传输很慢如何处理-win7之家...
  6. Python自动化运维——文件内容差异对比
  7. 数据结构与算法 | 归并排序
  8. 大数系列三——斐波那契数列——高效万进制,亿进制
  9. 如何编写自定义的Web控件
  10. 山西专科学校计算机专业排名,河南单招计算机专业专科学校排名
  11. hdu 1520 树形dp入门
  12. u盘中毒文件为html文档,U盘中毒后文件夹被隐藏的恢复方法
  13. noip使用主机动态DNS解析
  14. 谷歌浏览器 如何设置在新标签页打开链接
  15. ESP8266 入门 AT指令
  16. download.js 实现浏览器下载 而不是打开
  17. 打算自学一些编程,想兼职程序员打零工,想问问现在哪个程序员兼职平台单子简单,不考察接单人学历?
  18. Windows XP 源代码在线泄露
  19. MFC错误0xc000007b 应用程序无法正常启动 的一种原因
  20. 技术出身能做好管理吗?——能!

热门文章

  1. Android11增加对dpi屏幕密度的设置
  2. python培训 广州大学城
  3. LSTM中遗忘门,输入门和输出门的实际意义是什么
  4. 高手速成 | 过滤器、监听器的创建与配置
  5. 我的世界显示java过老_你在《我的世界》中做过哪些蠢事?玩家:误把“java”看成了jave...
  6. 【ESP8266开发备忘】
  7. java-net-php-python-jspm高校助学金评选管理系统设计PPT计算机毕业设计程序
  8. javascript的日历功能(1)
  9. GoLang之strings.Builder底层
  10. 继承,多态,类的使用