①创建数据库和表,数据库为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();
} }

⑧结构图

最新文章

  1. php中session原理及安全性问题
  2. VC++ 最小化到托盘、恢复
  3. Random number
  4. 【转】一个DIV+CSS代码布局的简单导航条
  5. Input对象的type类型
  6. http://blog.csdn.net/u010246789/article/details/52539576
  7. shadow服务端、客户端配置流程
  8. Android开发手记(17) 数据存储二 文件存储数据
  9. Copying Linked Lists with Random Pointers
  10. C# 导出 Excel 数字列出现‘0’的解决办法
  11. qt之treeview例子
  12. Asp.Net--主题/皮肤文件
  13. ExpandoObject,DynamicObject,DynamicMetaObject
  14. java数组去重
  15. Appium 客户端类库
  16. thinkphp5 上传服务器后 Access denied
  17. SpringBoot 消息转换器 HttpMessageConverter
  18. Mac 流程图
  19. 编译x11版本qt
  20. 维基百科 请求流 webrequest_flow

热门文章

  1. MVC+EF CODE FIRST的使用
  2. 【UNR #1】火车管理(主席树)
  3. mysql explain语法详解--优化你的查询
  4. Shell-2--输入输出重定向
  5. location匹配
  6. Ubuntu下几个命令行方式使用的图片浏览工具
  7. C++primer笔记之关联容器
  8. 聊聊我面试过的一个最奇葩的 Java 程序猿!
  9. 记hangfire后台任务运行一段时间后不运行了。
  10. String,StringBuffer与StringBuilder的理解