学习mybatis的关联关系,主要注解在代码上,这里不做解释。配置文件一样的就不贴了

1.关联关系表创建(学生对应老师 多对一)

  学生老师表

2.表对应的实体类

package com.home.entity;

/**
* 此类是:学生
* @author hpc
* @2017年1月14日下午7:06:33
*/
public class Student {
private Integer student_id;//学生id
private String student_name;//学生名字
private Integer student_number;//学生编号
private Teacher student_teacher;//是哪个教师的学生
public Integer getStudent_id() {
return student_id;
}
public void setStudent_id(Integer 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 Integer getStudent_number() {
return student_number;
}
public void setStudent_number(Integer student_number) {
this.student_number = student_number;
}
public Teacher getStudent_teacher() {
return student_teacher;
}
public void setStudent_teacher(Teacher student_teacher) {
this.student_teacher = student_teacher;
}
@Override
public String toString() {
return "Student [student_id=" + student_id + ", student_name=" + student_name + ", student_number="
+ student_number + ", student_teacher=" + student_teacher + "]";
}
}
package com.home.entity;

import java.util.HashSet;
import java.util.Set; /**
* 此类是:老师
* @author hpc
* @2017年1月14日下午7:06:47
*/
public class Teacher {
private Integer teacher_id;// 老师id
private String teacher_name;// 老师名字
private Integer teacher_number;// 老师编号
private Set<Student> teacher_student = new HashSet<Student>();// 老师教过哪些学生 public Integer getTeacher_id() {
return teacher_id;
} public void setTeacher_id(Integer 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 Integer getTeacher_number() {
return teacher_number;
} public void setTeacher_number(Integer teacher_number) {
this.teacher_number = teacher_number;
} public Set<Student> getTeacher_student() {
return teacher_student;
} public void setTeacher_student(Set<Student> teacher_student) {
this.teacher_student = teacher_student;
} @Override
public String toString() {
return "Teacher [teacher_id=" + teacher_id + ", teacher_name=" + teacher_name + ", teacher_number="
+ teacher_number + ", teacher_student=" + teacher_student + "]";
} }

3.核心主要是配置文件

<?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.home.entity.studentMapper"><!-- 命名空间,一定要是唯一的,只有这样才能定位到这个文件来 -->
<!-- 多对一查询(多个学生对应一个老师) -->
<!-- select的属性
id:这个查找标签的唯一标识,通过id找到这条sql语句
parameterType:传进来的参数类型
resultMap:这条语句执行完,以什么形式返回结果集
-->
<select id="loadStudent" parameterType="int" resultMap="studentMap">
select *
from students as s join teachers as t
on t.teacher_id=s.student_teacher
where s.student_id=#{id}
</select>
<!-- 学生对象映射关系 -->
<!--resultMap的属性
type:以这个类型进行封装返回
id:找到该resultMap标签的唯一标识
resultMap的内部的标签介绍
<id>专门用于映射主键的
<result>普通属性映射
<collection>集合属性映射
<association>关系映射(1-1,1-n,n-1,n-n)
<constructor>专门用于映射构造函数的标签
<discriminator>鉴别器非常容易理 解,因为它的表现很像 Java 语言中的 switch 语句。
-->
<resultMap type="student" id="studentMap" >
<!-- 主键映射 -->
<id property="student_id" column="student_id" javaType="int"/>
<!-- 普通属性映射 -->
<!--
property:映射在这个属性上
column:以这个列上的为参照
javaType:以什么类型映射
-->
<result property="student_name" column="student_name" javaType="String"/>
<result property="student_number" column="student_number" javaType="int"/>
<!-- 关联关系映射 -->
<association property="student_teacher" column="teacher_id" resultMap="teacherMap"/>
</resultMap>
<!-- 学生对象映射关系 -->
<resultMap type="teacher" id="teacherMap">
<id property="teacher_id" column="teacher_id" javaType="int"/>
<result property="teacher_name" column="teacher_name" javaType="String"/>
<result property="teacher_number" column="teacher_number" javaType="int"/>
</resultMap>
</mapper>
<?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.home.entity.teacherMapper">
<!-- teacher sql -->
<select id="loadTeacher" parameterType="int" resultMap="teacherMapper">
select *
from teachers as t join students as s
on s.student_teacher=t.teacher_id
where teacher_id=#{teacher_id}
</select>
<resultMap type="teacher" id="teacherMapper">
<id property="teacher_id" column="teacher_id" />
<result property="teacher_name" column="teacher_name" />
<result property="teacher_number" column="teacher_number" />
<collection property="teacher_student" ofType="student">
<id property="student_id" column="student_id" />
<result property="student_name" column="student_name"
javaType="String" />
<result property="student_number" column="student_number"
javaType="int" />
</collection>
</resultMap>
</mapper>

4. 测试

package com.home.mybatis;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;

import com.home.entity.Student;
import com.home.entity.Teacher; public class TestApp {
public static void main(String[] args) throws IOException {
// 我将获取session的代码封装成了一个工具类,直接用工具类来获取session
SqlSession session = SessionUtils.getSession("mybatis.xml");
String loadTeacher="com.home.entity.teacherMapper.loadTeacher";
String loadStudent="com.home.entity.studentMapper.loadStudent";
Teacher teacher = session.selectOne(loadTeacher,1);
Student student = session.selectOne(loadStudent,1);
System.out.println(student);
System.out.println(teacher);
// 将数据属性到数据中去
session.commit();
// 关闭session
session.close();
}
}

5.结果

Student [student_id=4, student_name=hpc, student_number=1, student_teacher=Teacher [teacher_id=1, teacher_name=王老师, teacher_number=1, teacher_student=[]]]
Teacher [teacher_id=1, teacher_name=王老师, teacher_number=1, teacher_student=[Student [student_id=5, student_name=zll, student_number=2, student_teacher=null], Student [student_id=4, student_name=hpc, student_number=1, student_teacher=null]]]

mybatis学习笔记三(关联关系)的更多相关文章

  1. MyBatis学习笔记(三) 关联关系

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...

  2. MyBatis学习笔记(二) 关联关系

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...

  3. MyBatis学习笔记(三) Configuration类

    一.初探Configuration类 我们先来看一下MyBatis的XML配置文件的结构,(摘自mybatis.org) 下面这个是Configuration类的部分变量 一点不一样是不是??? 其实 ...

  4. Mybatis学习笔记(三) —— DAO开发方法

    一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...

  5. Mybatis学习笔记三

    一.延迟加载 延迟加载即加载延迟了,并不是一次性加载完而是按需加载,感觉应该是针对多表查询而言的,即先查询单表等需要另一张表的信息时再去加载,这样能提高数据库的性能: 需要注意的是,mybatis提供 ...

  6. mybatis学习笔记(三)-- 优化数据库连接配置

    原来直接把数据库连接配置信息写在conf.xml配置中,如下 <?xml version="1.0" encoding="UTF-8"?> < ...

  7. MyBatis学习笔记(三)——优化MyBatis配置文件中的配置

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的 ...

  8. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

  9. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

随机推荐

  1. (蓝牙)网络编程中,使用InputStream read方法读取数据阻塞的解决方法

    问题如题,这个问题困扰了我好几天,今天终于解决了,感谢[1]. 首先,我要做的是android手机和电脑进行蓝牙通信,android发一句话,电脑端程序至少就要做到接受到那句话.android端发送信 ...

  2. HOJ:2031 进制转换

    进制转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. iOS基础 - Modal展示控制器

    一.利用Modal形式展示控制器 1.如何展示 // vc就是要展示的新控制器 [self presentViewController:vc animated:YES completion:^{ NS ...

  4. JavaScript插件——标签页

    JavaScript插件——标签页 前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/aehyok/p/3404867.html ...

  5. 最长递增子序列(Longest Increase Subsequence)

    问题 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8 ...

  6. Object-c学习之路(oc点语法)

    最近想学习object-c了自己上网找了一些资料自学了一下:oc中的点语法是为了java.c等的程序员更好的上手而添加的功能. 主函数 // // main.m // OcTest1 // // Cr ...

  7. github开源项目

    开源一小步,前端一大步   作为一名前端攻城狮,相信不少人已经养成了这样的习惯.当你进入一个网站,总会忍不住要打开控制台看下它是如何布局的,动画是如何实现的等.这也是前端开发者一个不错的的学习途径. ...

  8. jQuery表格排序组件-tablesorter

    一.引入文件 <script type="text/javascript" src="js/jquery.js"></script> & ...

  9. CSS border-radius 圆角

    本文转自:http://www.kwstu.com/Admin/ViewArticle/201409151549476225 border-radius属性主要用于设置div圆角效果. 使用方法 bo ...

  10. WCF服务属性注入基础设施

    WCF服务属性注入基础设施 WCF的服务的创建行为:使用默认构造函数创建WCF服务对象.如果我们想要在WCF内使用外部对象,最简单的方式就是把外部对象做成全局对象.然而这样的话会增加全局对象的数量,让 ...