Mybatis中3种关联关系的实现方法示例_java

来源:脚本之家  责任编辑:小易  

xml文件中,你没有配置resultMap。另外查询语句没有写接口类。具体就是workerMapper 类,projectMapper 类www.zgxue.com防采集请勿采集本网。

三种关联关系:一对多,一对一,多对多

可以通过关系映射查询出来 请看下面 在mybatis中,没有级联的概念,但是可以利用集合来实现类似的功能。mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询

两种查询方式:嵌套查询,连接查询(也可称作:多表单独查询,多表连接查询)

比如同时有A.java和B.java两个类,A.java如下: public class A{ private B b1;private List b2;} 在映射b1属性时用association标签,映射b2时用collection标签,分别是一对一,一对多的关系

每一种关联关系都可以通过嵌套查询和连接查询来实现。

创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。1 CREATE TABLE teacher 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4

嵌套查询相当于进行了两次查询,而连接查询将两张表连接然后再进行查询,这样只进行了一次查询

没有互相的外键你也可以多表连查啊 比如说人员表的一列是岗位表的ID 不知道你能不能懂我的意思 如果没有那就是你数据库没有理解关系。select*from 人员表 inner join 岗位表 on(人员表.岗位编号

由于数据表要对实体类进行映射,所以每一种关联关系中都需要在java类中定义属性来进行关联,可以通过如图关联:

你刻苦训练,你才能夺得冠军。你能夺得冠军因为你刻苦训练。你刻苦训练,你就可能夺得冠军。

一对一查询

数据表实现:通过A表的主键引用B表的主键作为外键,就是说在A中主键和外键同一字段。

查询方式:嵌套查询,连接查询;

关系:丈夫和妻子(Husband Wife)

嵌套查询实现:

在实体类husband中关联wife,进行连接查询之后,需要使用resultMap对查出来的结果进行结果映射;

resultMap中type属性指定映射的类型;id标签为主键,result为普通属性;

association标签指定关联一个类,property属性是它在数据表中的属性名,javaType是关联属性的java类型;

连接查询实现:

其中association标签中:

select属性: 加载另外一个映射语句,可以加载这个属性映射需要的复杂类型,(就是可以再加载指定的映射类型)

column属性:用于给select传递参数,可以将已经获取到的属性值,传递给目标 select 语句作为参数;

一对多查询

数据表实现:使用一个外键进行关联,外键放在多方的表中;

关联属性:可以写在一方的实体类中也可以写在多方的实体类中;

    写在一方中,使用list或别的集合进行关联(一方找多方) 写在多方中,定义关联对象属性(通过多方找一方)

以多表连接查询为例:

关系:一个国家对应多个部长

通过resultMap进行结果映射,collection标签可以指定映射的集合,其中porperty属性指定的是该关联属性的名称,ofType指定的是集合里面的java类型,id,result标签同resultMap中的一样是对集合里面的属性进行映射;

多表单独查询(嵌套查询):

与一对一中类似,在resultMap的collection中声明中元素类型,然后插入参数,将查询结果进行映射;

自关联查询:

数据表:一张数据表中包含着所有的条目,条目之间为一对多的关系(一个栏目下面包含着多个栏目)

查询方式:连接查询(自己连接自己)和嵌套查询(调用自身查询)

以嵌套查询为例:

这是通过父栏目查询子栏目的自关联查询:

在resultMap中collection的select中调用原来的查询语句进行查询,形成一个循环调用,一直到查询到的子栏目为空的时候停止;最后对查询结果进行映射。

当然,也可通过子栏目查找它的所有的父栏目;

多对多查询

数据表:需要用一张中间表表示多对多的关系,这张中间表引入两张表的主键作为外键;

查询方式:

    多表连接查询,不需要定义中间表实体类 多表嵌套查询,需要定义中间表实体类 多表复杂查询,不需要定义中间表实体类,但是返回值是一个List;

多表嵌套查询定义中间实体类:

由于两张表之间分别单独查询,需要通过中间表查找关联并使用resultMap进行映射关系处理,resultMap需要指明映射的java的类,并在实体类中定义关联属性才可以得到关联属性的信息;简单来说:一张表查询完之后想要得到另一张表的信息,实际上是通过中间表来进行映射得到另一张表的信息的;

多表复杂查询:通过一张表先和中间表进行连接查询,然后再查询另一张表的信息;

复杂查询返回值是一个List:

由于一张表先和中间表连接,而中间表是多对多的关系;所以得到一个一对多的List形式查询结果;

类似这样一对多:

总结:

实际上除了数据库的知识以外,Mybatis中的关联关系实现,主要通过resultMap来实现的

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对真格学网的支持。

首先:最好把实体类里面的变量名称和表里面字段写成一致。然后:在SqlMapConfig.xml中<typeAliases><typeAlias alias="game"type="实体类路径"/>这就是把你的实体类写了个别名最后:在写查询添加的时候:返回实体类对象 select*from tb_game这样查出的结果就对应上数据了内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • mybatis多表关联查询的实现(demo)
  • mybatis 一对多和多对一关联查询问题
  • 深入浅出mybatis中映射文件和实体类的关联性
  • 实例讲解java的mybatis框架对mysql中数据的关联查询
  • mybatis实践之动态sql及关联查询
  • mybatis学习教程(五)-实现关联表查询方法详解
  • mybatis学习笔记(二)之关联关系
  • mybatis实现一对一关联映射实例代码
  • mybatis多对多关联实战教程(推荐)
  • mybatis实现表与对象的关联关系_动力节点java学院整理
  • 初识java设计模式适配器模式
  • 浅谈为什么要使用mybatis的@param
  • java虚拟机装载和初始化一个class类代码解析
  • 友盟 微信第三方登录示例
  • 使用javamail发送邮件保证成功的方法
  • 全面了解java_basedao数据处理类
  • 基于solr全文检索实现原理(详谈)
  • java枚举详解及使用实例(涵盖了所有典型用法)
  • java插入修改删除数据库数据的基本方法
  • ant使用指南详细入门教程
  • mybatis表之间的关联关系怎么自动生成实体类
  • Mybatis框架 关联关系 怎么配置
  • spring+mybatis的优缺点
  • mybatis和hibernate的关联关系的区别
  • 页面怎么访问 mybatis多对一关联查询中的一端属性
  • 在mybatis中,配置结果映射时,使用什么标签实现多对一的关联
  • 关联表查询在mybatis中怎么写
  • mybatis不用外键怎么维护关联关系
  • 用三种不同关系的关联词,把“你刻苦训练。”“你能夺得冠军。”连接起来。
  • 关联词语有哪几种关系,每个关系都有哪些关联词语
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页mybatis多表关联查询的实现(demo)mybatis 一对多和多对一关联查询问题深入浅出mybatis中映射文件和实体类的关联性实例讲解java的mybatis框架对mysql中数据的关联查询mybatis实践之动态sql及关联查询mybatis学习教程(五)-实现关联表查询方法详解mybatis学习笔记(二)之关联关系mybatis实现一对一关联映射实例代码mybatis多对多关联实战教程(推荐)mybatis实现表与对象的关联关系_动力节点java学院整理初识java设计模式适配器模式浅谈为什么要使用mybatis的@paramjava虚拟机装载和初始化一个class类代码解析友盟 微信第三方登录示例使用javamail发送邮件保证成功的方法全面了解java_basedao数据处理类基于solr全文检索实现原理(详谈)java枚举详解及使用实例(涵盖了所有典型用法)java插入修改删除数据库数据的基本方法ant使用指南详细入门教程java使double保留两位小数的多方java8 十大新特性详解java.net.socketexception: connjava写入文件的几种方法分享java环境变量的设置方法(图文教程java 十六进制与字符串的转换java list用法示例详解java中file类的使用方法javaweb实现文件上传下载功能实例java 字符串截取的三种方法(推荐总结java集合类操作优化经验springboot集成kaptcha验证码spring boot集成kafka+storm的示例代码心动吗?正大光明的免费使用intellij idejava利用smb读取远程文件的方法详解java解析xml的四种方法浅析java中comparator接口与comparable接利用java实现邮箱群发功能java实现微信支付功能使用 spring boot 实现 websocket实时通信
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved