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最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
随机推荐
- using和yield return
C#中的using和yield return混合使用 最近写代码为了为了省事儿用了几个yield return,因为我不想New一个List<T>或者T[]对象再往里放元素,就直接返回IE ...
- C#外挂QQ
C#外挂QQ找茬辅助源码,早期开发 这是一款几年前开发的工具,当年作为一民IT纯屌,为了当年自己心目中的一位女神熬夜开发完成.女神使用后找茬等级瞬间从眼明手快升级为三只眼...每次看到这个就会想起 ...
- Prototype,创建型模式
读书笔记_探索式测试_混合探索式测试 一.测试场景 1.讲述用户故事 2.描述需求 3.演示产品功能 4.演示集成场景 5.描述设置和安装 6.描述警告和出错情况 二.使用基于场景的探索式测试 1 ...
- ImageMagick利用蒙版合成图片
先看合成后的效果图. 需要的图片素材: 1.一张图片(335x600) 2.一张蒙版图片(335x600) 3.一张相框图片(335x600) 第一步,根据蒙板和图片,截取图片.而且所截取的图片之外的 ...
- 第一章 CLR 的执行模型
CLR via C# 读书笔记:第一章 CLR 的执行模型(1) 第Ⅰ部分CLR基础.这部分为三章(第一章:CLR的只想能够模型,第二章:生成.打包.部署和管理应用程序及类型,第三章:共享程序集和强命 ...
- 基于 Aliexpress API 的小程序 : 批量 Copy 产品到不同的店铺
第一个基于 Aliexpress API 的小程序 : 批量 Copy 产品到不同的店铺 还没来得及用 API 重写软件, 先写个小程序来缓解一下手工压力: 批量Copy 产品到不同的店铺. 开网店 ...
- ArcEngine关于单位转换示例
示例界面: 转换代码: private void Button1_Click(object sender, System.Windows.RoutedEventArgs e) { // Get the ...
- Fast Token Replacement in C#
http://www.codeproject.com/Articles/298519/Fast-Token-Replacement-in-Csharp Fast Token Replacement i ...
- ISupportInitialize的用处
[译]ISupportInitialize的用处 [译]ISupportInitialize的用处 注:本文是对How ISupportInitialize Can Help的翻译.原文作者编 ...
- 设计模式:空对象模式(Null Object Pattern)
设计模式:空对象模式(Null Object Pattern) 背景 群里聊到<ASP.NET设计模式>,这本书里有一个“Null Object Pattern”,大家就闲聊了一下这个模式 ...