mybatis学习笔记三(关联关系)
学习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学习笔记三(关联关系)的更多相关文章
- MyBatis学习笔记(三) 关联关系
首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...
- MyBatis学习笔记(二) 关联关系
首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...
- MyBatis学习笔记(三) Configuration类
一.初探Configuration类 我们先来看一下MyBatis的XML配置文件的结构,(摘自mybatis.org) 下面这个是Configuration类的部分变量 一点不一样是不是??? 其实 ...
- Mybatis学习笔记(三) —— DAO开发方法
一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...
- Mybatis学习笔记三
一.延迟加载 延迟加载即加载延迟了,并不是一次性加载完而是按需加载,感觉应该是针对多表查询而言的,即先查询单表等需要另一张表的信息时再去加载,这样能提高数据库的性能: 需要注意的是,mybatis提供 ...
- mybatis学习笔记(三)-- 优化数据库连接配置
原来直接把数据库连接配置信息写在conf.xml配置中,如下 <?xml version="1.0" encoding="UTF-8"?> < ...
- MyBatis学习笔记(三)——优化MyBatis配置文件中的配置
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264301.html 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的 ...
- mybatis 学习笔记(三):mapper 代理开发 dao 层
mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
随机推荐
- 在线预览PDF
FlexPaper+SWFTool+操作类=在线预览PDF 引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf ...
- [Usaco2007 Jan]Running贝茜的晨练计划[一般DP]
Description 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑.在每分钟的开始,贝茜会选择下一 ...
- HTML5 拖拽效果实现
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- JS获取ckeditor4.x里的值
项目中有这样一个需求,使用ckeditor可以上传图片,需要在前端验证一下不可上传多于5张图片. 以下是查看源代码所看到的ckeditor里的值 <p>AAAAA</p> &l ...
- 【转】title与alt的区别
html中的title属性和alt属性让人有些混淆. 以前不知道有title这个属性,第一次用到它时,就和alt产生了混淆.一位朋友告诉我说,alt是图片img标签里用的,title是超链接里用的,当 ...
- 实现Avl平衡树
实现Avl平衡树 一.介绍 AVL树是一种自平衡的二叉搜索树,它由Adelson-Velskii和 Landis于1962年发表在论文<An algorithm for the organi ...
- SQL删除重复数据,保留一条
例如: id name value 1 a pp 2 a ...
- Introduction to SharePoint hierarchy
/* Author: Jiangong SUN */ I've participated in a SharePoint 2010 project to build an intranet. Base ...
- 项目检出JRE问题(Unbound classpath container: 'JRE System Library [JavaSE-1.7]' in project 'idweb')
分类: java 技术2014-07-31 16:51 9864人阅读 评论(13) 收藏 举报 项目从SVN检出到工作空间后报了很多错误,其中很明显就是一些jar的问题,没有相关的jar或版本问题, ...
- KnockOut文档--模板绑定
目的 模板绑定使用数据render模板,然后把渲染的结果填充到Dom树中.模板通过重复或嵌套块(通常为您的视图模型数据的函数)用一种简单,方便的方式来建立复杂的UI结构 . 有两种方式使用模板: Na ...