MyBatis的关联关系 一对多关系 、collection 标签

Serwa ·
更新时间:2024-11-10
· 566 次阅读

什么是一对多?
  一对多关系应该是开发人员接触得最多的关联关系。打个比方,淘宝上,一个用户他拥有多个订单,而这几个订单单独属于此用户,这个关联关系就叫一对多关系。在数据库中则表示为两张表互相关联,如用户表(A表)关联订单表(B表),那么A表的一行数据就和B表的多条数据产生关联。
  
 
   
MyBatis加载关联关系对象主要通过两种方式

嵌套查询:
  1、嵌套查询是通过另一条SQL映射语句来返回预期的复杂类型
  2、嵌套查询是查询语句中插入一个子SQL语句
  3、嵌套查询会执行多条SQL语句
  4、嵌套查询编写SQL语句较为简单,但消耗资源大,可配置延迟加载解决

嵌套结果:
  1、嵌套结果是使用嵌套结果映射来重复的联合结果的子集
  2、嵌套结果是一个嵌套的多表查询的SQL语句
  3、嵌套结果只会执行一条复杂的SQL语句
  4、嵌套结果SQL语句编写比较复杂
 
  
   
    
     
     
在子标签通常可以配置一下属性

它的属性大部分和association标签的属性相同,但多了个ofType属性。

属性名 作用
property 指定映射数据库的JAVA实体类对象的属性,与数据库表的字段一一对应
colum 数据库表的(字段名)列名或者列的字段别名
javaType 要接收数据库数据的完整的java类对象名或别名
select 嵌套查询时,声明引入一条子SQL语句
fetchType 声明关联查询时是否启用延迟加载,属性值为(lazy/eager),默认为lazy(启用)
ofType ofType与javaType属性对应,它用于指定实体类对象中的集合类属性所包含的类型(如List,ofType就为A)
实践一下:

先在MySQL数据库中创建两张表:
tb_user用户表:
select u.*,o.id as order_id,o.number from tb_user u,tb_orders o where u.id=#{id} and o.user_id=u.id

主配置文件 mybatis-config.xml

<!----> <!---->

开始测试:
编写两个测试方法,一个用嵌套查询,一个用嵌套结果

嵌套查询:

@Test public void findUserByIdTest() {//测试方法 SqlSession session=MyBatisUtils.getSqlSession();//通过工具类获取Session通道 User user=session.selectOne("xyz.kuim.sjw.mapper.Bmapper.qtcxA",1);//查询一条语句,传入id为1 //xyz.kuim.sjw.mapper.findPresonById是映射文件的命名空间名加上查询语句的Id名 session.close();//关闭通道 System.out.println(user);//接收后输出 }

运行结果:
原创文章 9获赞 3访问量 127 关注 私信 展开阅读全文
作者:櫆溟



collection 关系 mybatis 关联关系 标签

需要 登录 后方可回复, 如果你还没有账号请 注册新账号