学习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. C# 学习笔记1 .NET平台,C#的重要概念

    .NET平台构成的三个关键实体是: 1.CLR(公共语言运行库):为我们定位,加载,管理.NET类型,同时负责一些底层细节的工作,如内存管理,应用托管,处理线程,安全检查等,它包含了一个重要名为msc ...

  2. C语言练习-学生信息管理系统

    题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...

  3. Webapi帮助文档

    生成自己的Webapi帮助文档(一) 最近Webapi接口的开发刚刚进入尾声,随之而来的是让用户知道接口的详细参数信息,看过淘宝的接口文档,但网上没找到他的实现方式 虽然新建Webapi时C#也会给你 ...

  4. Oracle 10g数据库概述

    一.Oracle 10g简介 1.Oracle 10g数据库是首个为网咯计算而设计的数据库(甲骨文公司的一款关系数据库管理系统). 2.分为以下几个版本: a.Oracle 10g数据库标准版 1 b ...

  5. Python 用IMAP接收邮件

    一.简介IMAP(Internet Message Access Protocol),这个协议与POP一样,也是从邮件服务器上下载邮件到本机,不过IMAP比POP的功能要更加强大些,IMAP除支持PO ...

  6. 关于ADB server didn't ACK * failed to start daemon *的问题

    查看5037端口被谁占用了, 开始--运行--CMD 到命令提示符,输入 netstat -aon|findstr "5037" 输入 tasklist|findstr " ...

  7. C add

    C++学习--应用篇(Windows/Linux)(书籍推荐及分享) 我将以平台划分,分别介绍Windows和Linux下个人认为的好书(与基础篇一样,大部分网络上都有电子版): 对于C++基础类的图 ...

  8. IOS学习之路九(配置restful webservice 框架restkit)

    RestKit 是一个开源的 objective-c 框架,容许在 iOS 和 Mac OS X 的 Objective-C 中与 RESTful Web 办事进行交互,包含简单的 HTTP requ ...

  9. jquery validate 验证

    JSP中引入 <link href="themes/gray/easyui.css" rel="stylesheet" type="text/c ...

  10. Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息

    Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息 在此回复牛妞的关于程序中分词器的问题,其实可以直接很简单的在词库中配置就好了,Lucene中分词的所有信息我们都可以从 ...