①创建数据库和表,数据库为mytest,表为teacher和student

 DROP TABLE IF EXISTS teacher;
DROP TABLE IF EXISTS student; CREATE TABLE teacher(
teacher_id INT PRIMARY KEY auto_increment NOT NULL,
teacher_name VARCHAR(20)
); CREATE TABLE student(
student_id INT PRIMARY KEY auto_increment NOT NULL,
student_name VARCHAR(20),
teacher_id INT
); ALTER TABLE student ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id); INSERT INTO teacher(teacher_name) VALUES ("张三丰");
INSERT INTO teacher(teacher_name) VALUES ("王重阳");
INSERT INTO student(student_name, teacher_id) VALUES ("宋远桥", 1);
INSERT INTO student(student_name, teacher_id) VALUES ("俞莲舟", 1);
INSERT INTO student(student_name, teacher_id) VALUES ("俞岱岩", 1);
INSERT INTO student(student_name, teacher_id) VALUES ("张松溪", 1);
INSERT INTO student(student_name, teacher_id) VALUES ("张翠山", 1);
INSERT INTO student(student_name, teacher_id) VALUES ("殷梨亭", 1);
INSERT INTO student(student_name, teacher_id) VALUES ("莫声谷", 1); INSERT INTO student(student_name, teacher_id) VALUES ("丹阳子马钰", 2);
INSERT INTO student(student_name, teacher_id) VALUES ("长真子谭处端", 2);
INSERT INTO student(student_name, teacher_id) VALUES ("长生子刘处玄", 2);
INSERT INTO student(student_name, teacher_id) VALUES ("长春子丘处机", 2);
INSERT INTO student(student_name, teacher_id) VALUES ("玉阳子王处一", 2);
INSERT INTO student(student_name, teacher_id) VALUES ("广宁子郝大通", 2);
INSERT INTO student(student_name, teacher_id) VALUES ("清静散人孙不二", 2);

②创建Java工程,导入相应的jar包

③创建配置文件conf.xml和数据库配置文件db.properties

 <?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="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="org/mybatis/mapping/teacherMapper.xml"/>
<mapper resource="org/mybatis/mapping/studentMapper.xml"/>
</mappers>
</configuration>
 driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mytest
name = root
password = root

④创建实体类Teacher和Student

 package org.mybatis.domain;

 import java.util.List;

 public class Teacher {

     private int teacher_id;
private String teacher_name;
private List<Student> students; public int getTeacher_id() {
return teacher_id;
} public void setTeacher_id(int teacher_id) {
this.teacher_id = teacher_id;
} public String getTeacher_name() {
return teacher_name;
} public void setTeacher_name(String teacher_name) {
this.teacher_name = teacher_name;
} public List<Student> getStudents() {
return students;
} public void setStudents(List<Student> students) {
this.students = students;
} @Override
public String toString() {
return "[Teacher = teacher_id:" + teacher_id + ", teacher_name:" + teacher_name
+ ", the number of students:" + students.size() + "]";
} }
 package org.mybatis.domain;

 public class Student {

     private int student_id;
private String student_name;
private Teacher teacher; public int getStudent_id() {
return student_id;
} public void setStudent_id(int student_id) {
this.student_id = student_id;
} public String getStudent_name() {
return student_name;
} public void setStudent_name(String student_name) {
this.student_name = student_name;
} public Teacher getTeacher() {
return teacher;
} public void setTeacher(Teacher teacher) {
this.teacher = teacher;
} @Override
public String toString() {
return "[Student = student_id:" + student_id + ", student_name:" + student_name +
", teacher:" + teacher.getTeacher_name() + "]";
} }

⑤创建sql映射文件studentMapper.xml和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="org.mybatis.mapping.studentMapper">
<select id="getStudent" resultMap="getStudentMap">
select * from teacher t, student s where t.teacher_id=s.teacher_id and s.teacher_id=#{id}
</select> <resultMap type="org.mybatis.domain.Student" id="getStudentMap">
<id column="student_id" property="student_id" />
<result column="student_name" property="student_name" />
<association property="teacher" javaType="org.mybatis.domain.Teacher">
<id column="teacher_id" property="teacher_id"/>
<result column="teacher_name" property="teacher_name"/>
</association>
</resultMap>
</mapper>

studentMapper.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="org.mybatis.mapping.teacherMapper">
<select id="getTeacher" resultMap="getTeacherMap">
select * from teacher t, student s where t.teacher_id=s.teacher_id and t.teacher_id=#{id}
</select> <resultMap type="org.mybatis.domain.Teacher" id="getTeacherMap">
<id column="teacher_id" property="teacher_id" />
<result column="teacher_name" property="teacher_name" />
<collection property="students" ofType="org.mybatis.domain.Student">
<id column="student_id" property="student_id"/>
<result column="student_name" property="student_name"/>
</collection>
</resultMap>
</mapper>

teacherMapper.xml

⑥向配置文件中注册 studentMapper.xml和teacherMapper.xml 文件【已添加,查看第③步】

⑦测试类

 package org.mybatis.app;

 import java.io.InputStream;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.mybatis.domain.Student;
import org.mybatis.domain.Teacher; public class TestOneToMany { SqlSession session; @Before
public void beforeLoad() {
InputStream inputStream =
TestOneToMany.class.getClassLoader().getResourceAsStream("conf.xml");
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
session = sqlSessionFactory.openSession();
} @Test
public void testGetStudents() {
String statement = "org.mybatis.mapping.studentMapper.getStudent";
List<Student> studentList = session.selectList(statement, 1);
for(Student s : studentList) {
System.out.println(s.getStudent_name() + "的师傅是:" + s.getTeacher().getTeacher_name());
} session.close();
} @Test
public void testGetTeacher() {
String statement = "org.mybatis.mapping.teacherMapper.getTeacher";
Teacher t = session.selectOne(statement, 1);
System.out.println(t.getTeacher_name() + "有" + t.getStudents().size() + "个徒弟");
session.close();
} }

⑧结构图

【Mybatis】一对多实例的更多相关文章

  1. mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

    mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

  2. Java基础-SSM之mybatis一对多和多对一关系映射

    Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建customers表: ...

  3. mybatis一对多关联查询+pagehelper->分页错误

    mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...

  4. 1. mybatis 的入门实例

    mybatis 的入门实例 1.创建一个普通的Java项目 1.加入jar包(所有mybatis 和mysql) 2.加入配置文件 src 目录下 (1) db.properties mysql.us ...

  5. MyBatis一对多和多对多xml配置

    MyBatis一对多和多对多xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  6. mybatis一对多关联关系映射

    mybatis一对多关联关系映射 一对多关联关系只需要在多的一方引入少的一方的主键作为外键即可.在实体类中就是反过来,在少的一方添加多的一方,声明一个List 属性名 作为少的一方的属性. 用户和订单 ...

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

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

  8. mybatis 一对多查询 集合创建空对象的问题

    在做 mybatis 一对多查询的时候, resultMap 里面用到了集合标签 collection ,后来发现 当该条数据没有子集的时候, collection 会自动创建一个属性都是null的对 ...

  9. mybatis 一对多和多对一 简单案例笔记

    以案例说明(以下案例代码都敲过验证过) 多对一(多个学生对一个老师  即学生集合中都存一个老师对象) Mybatis多对一实现方式1: //定义Student 和 Teacher 实体 @Data p ...

  10. Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)

    Mybatis  一对多延迟加载,并且子查询中与主表字段不对应应用说明. 实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联,并且教师关联教研组外键与教研组编号 ...

随机推荐

  1. AndroidStudio制作个人资料界面模块以及SQLite数据库的使用

    前言 大家好,给大家带来AndroidStudio制作个人资料界面模块以及SQLite数据库的使用的概述,希望你们喜欢 学习目标 掌握SQLite数据库的使用,能够实现用数据库来保存用户的信息: 学会 ...

  2. LabVIEW(十四):VI属性

    1.VI的属性在项目研究中是很常用的,但是会经常忽略VI的属性设置,建议在编程事常常运用这些属性的设置,这样就可以使你的程序更加完善,易懂性也会提高. 属性快捷键:Ctrl+I. 2.常规 (1).编 ...

  3. ElasticSearch权威指南学习(排序)

    排序方式 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前. 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列. ...

  4. 《机器学习实战(基于scikit-learn和TensorFlow)》第五章内容学习心得

    本章在讲支持向量机(Support Vector Machine). 支持向量机,一个功能强大的机器学习模型,能够执行线性或非线性数据的分类.回归甚至异常值检测的任务.它适用于中小型数据集的分类. 线 ...

  5. vue环境安装

    node.js安装 https://nodejs.org/en/ cnpm安装 npm install -g cnpm --registry=https://registry.npm.taobao.o ...

  6. 调用 Https WebService 使用程序自动生成代理类

    1 商家提供的WebService接口:  https://ws.nciic.org.cn/nciic_ws/services/NciicServices?wsdl 2 在浏览器里打开这个地址,会显示 ...

  7. shell之实战应用一(查找xml文档中的关键字段)

      前几天同事问我一个问题,说如下的文档中,如何把name后面的字段(红色框中的字段)单独打印出来?

  8. python异步编程--回调模型(selectors模块)

    目录 0. 参考地址 1. 前言 2. 核心类 3. SelectSelector核心函数代码分析 3.1 注册 3.2 注销 3.3 查询 4. 别名 5. 总结 6. 代码报错问题 1. 文件描述 ...

  9. Python -- queue队列模块

    一 简单使用 --内置模块哦 import Queuemyqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限. ...

  10. Atom相关资料整理

    官网地址 https://atom.io/ Atom 中文社区 https://atom-china.org/ 常用插件 Emmet 这款插件是用来支持zend-coding,Emmet的前身是大名鼎 ...