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,请注明来意。
标签: