Mybatis
发布时间:2019-10-08 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Mybatis系列(三):Mybatis实现关联表查询,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html
title0">一、一对一关联
title1"> 1.1、提出需求
根据班级id查询班级信息(带老师的信息)
title2">1.2、创建表和数据
创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。
t_id Mary t_name ( );
c_id Mary c_name ( teacher_id
);
class TraiNT fk_teacher_id (teacher_id) );
teacher(t_name) ();
teacher(t_name) ();
class(c_name,teacher_id) (,);
class(c_name,teacher_id) (,);
表之间的关系如下:
title="Mybatis系列(三):Mybatis实现关联表查询" alt="Mybatis系列(三):Mybatis实现关联表查询" src="https://cn.js-code.com/res/2019/02-10/10/12a4dfa597c2f76e20f6bd0ead220c9c.png" >
title3">1.3、定义实体类
1、Teacher类,Teacher类是teacher表对应的实体类。
l.domain;
**
{
id; t_id
String name; t_name
{
setId({
.id =
String getName() {
String Name) {
.name =
String toString() {
"Teacher [id=" + id + ",name=" + name + "]" }
2、Classes类,Classes类是class表对应的实体类
l.domain;
**
{
id; c_id
String name; c_name
**
可以知道这个班级是由哪个老师负责的
{
setId({
.id =
String getName() {
String Name) {
.name =
{
{
.teacher =
String toString() {
"Classes [id=" + id + ",name=" + name + ",teacher=" + teacher+ "]" }
title4">1.4、定义sql映射文件classmapper.xml
s.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
l.mapping.classmapper"就是me.gacl.mapping(包名)+classmapper(classmapper.xml文件去除后缀)
l.mapping.classmapper"
SELECT * FROM class c,teacher t WHERE c.teacher_id=t.t_id AND c.c_id=1;
SELECT * FROM class WHERE c_id=1; //teacher_id=1
SELECT * FROM teacher WHERE t_id=1;//使用上面得到的teacher_id
SELEct * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=1
SELEct
SELEct * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=#{iD}
SELEct
l.domain.Classes"
column
column
l.domain.Teacher"
column
columnt_name"
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
SELEct
SELEct * from class where c_id=#{iD}
SELEct
l.domain.Classes"
column
column
columnSELEct
SELEct l.domain.Teacher"
SELECT t_id id,t_name name FROM teacher WHERE t_id=#{iD}
SELEct
在conf.xml文件中注册classmapper.xml
smapper.xml文件,
smapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/classmapper.xml
resourcesmapper.xml"
title5">1.5、编写单元测试代码
l.test;
l.domain.Classes;
l.util.MyBatisUtil;
s.session.sqlSession;
{
{
SqlSession sqlSession =l.getSqlSession();
**
l.mapping.classmapper是classmapper.xml文件中mapper标签的namespace属性的值,
SELEct标签的id属性值,通过SELEct标签的id属性值就可以找到要执行的SQL
String statement = "me.gacl.mapping.classmapper.getClass";
Classes clazz = sqlSession.SELEctOne(statement,1); 使用sqlSession执行完SQL之后需要关闭SqlSession
);
System.out.println(clazz);
{
SqlSession sqlSession =l.getSqlSession();
**
l.mapping.classmapper是classmapper.xml文件中mapper标签的namespace属性的值,
SELEct标签的id属性值,通过SELEct标签的id属性值就可以找到要执行的SQL
String statement = "me.gacl.mapping.classmapper.getClass2";
Classes clazz = sqlSession.SELEctOne(statement,1); 使用sqlSession执行完SQL之后需要关闭SqlSession
);
System.out.println(clazz);
}
title6"> 1.6、MyBatis一对一关联查询总结
MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:
- property:对象属性的名称
- javaType:对象属性的类型
- column:所对应的外键字段名称
- SELEct:使用另一个查询封装的结果
title7">二、一对多关联
title8">2.1、提出需求
根据classId查询对应的班级信息,包括学生,老师
title9">2.2、创建表和数据
在上面的一对一关联查询演示中,我们已经创建了班级表和教师表,因此这里再创建一张学生表
student(
s_id Mary s_name ( class_id
);
student(s_name,class_id) (student_A,);
student(s_name,class_id) (studenT_B,);
student(s_name,class_id) (student_C,);
student(s_name,class_id) (student_D,);
student(s_name,class_id) (student_E,);
student(s_name,class_id) (student_F,);
title="Mybatis系列(三):Mybatis实现关联表查询" alt="Mybatis系列(三):Mybatis实现关联表查询" src="https://cn.js-code.com/res/2019/02-10/10/e4446db5ce4a171fbd93588cc6fc3ba1.png" >
title10">2.3、定义实体类
1、student类
l.domain;
**
student表所对应的实体类
student {
student表中的字段对应
id; s_id
String name; s_name
{
setId({
.id =
String getName() {
String Name) {
.name =
String toString() {
"student [id=" + id + ",name=" + name + "]" }
2、修改Classes类,添加一个List students属性,使用一个List集合属性表示班级拥有的学生,如下:
l.domain;
l.List;
**
{
id; c_id
String name; c_name
**
可以知道这个班级是由哪个老师负责的
集合属性表示班级拥有的学生
Liststudents;
{
setId({
.id =
String getName() {
String Name) {
.name =
{
{
.teacher =
Liststudents() {
students;
setstudents(Liststudents) {
.students =students;
String toString() {
"Classes [id=" + id + ",teacher=" + + ",students=" + students + "]" }
title11">2.4、修改smapper.xml
SELECT * FROM class c,teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1
SELEct
SELEct * from class c,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{iD}
SELEct
l.domain.Classes"
column
column
columnl.domain.Teacher"
column
columnt_name"
students集合中的对象类型
students"l.domain.student"
column
column
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
SELECT * FROM student WHERE class_id=1 //1是第一个查询得到的c_id字段的值
SELEct
SELEct * from class where c_id=#{iD}
SELEct
l.domain.Classes"
column
column
columnl.domain.Teacher"SELEct
students"l.domain.student"columnSELEctstudent"
SELEct l.domain.Teacher"
SELECT t_id id,t_name name FROM teacher WHERE t_id=#{iD}
SELEct
SELEct student"l.domain.student"
SELECT s_id id,s_name name FROM student WHERE class_id=#{iD}
SELEct
title12">
l.test;
l.domain.Classes;
l.util.MyBatisUtil;
s.session.sqlSession;
{
{
SqlSession sqlSession =l.getSqlSession();
**
l.mapping.classmapper是classmapper.xml文件中mapper标签的namespace属性的值,
SELEct标签的id属性值,通过SELEct标签的id属性值就可以找到要执行的SQL
String statement = "me.gacl.mapping.classmapper.getClass3";
Classes clazz = sqlSession.SELEctOne(statement,1); 使用sqlSession执行完SQL之后需要关闭SqlSession
);
students=[student [id=1,name=student_A],student [id=2,name=studenT_B],student [id=3,name=student_C]]]
m.out.println(clazz);
{
SqlSession sqlSession =l.getSqlSession();
**
l.mapping.classmapper是classmapper.xml文件中mapper标签的namespace属性的值,
SELEct标签的id属性值,通过SELEct标签的id属性值就可以找到要执行的SQL
String statement = "me.gacl.mapping.classmapper.getClass4";
Classes clazz = sqlSession.SELEctOne(statement,1); 使用sqlSession执行完SQL之后需要关闭SqlSession
);
student_C]]]
m.out.println(clazz);
}
title13"> 2.6、MyBatis一对多关联查询总结
MyBatis中使用COllection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。
大佬总结
以上是大佬教程为你收集整理的Mybatis系列(三):Mybatis实现关联表查询全部内容,希望文章能够帮你解决Mybatis系列(三):Mybatis实现关联表查询所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。