快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

如何在Mybatis项目中使用Association

这期内容当中小编将会给大家带来有关如何在Mybatis项目中使用 Association,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

创新互联公司专注于南溪网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供南溪营销型网站建设,南溪网站制作、南溪网页设计、南溪网站官网定制、微信小程序服务,打造南溪网络公司原创品牌,更为您提供南溪网站排名全网营销落地服务。

接下来的文章中,关于Mybatis的示例,全部来自于Mybatis代码中的单元测试代码,通过这些代码能够学习Mybatis中很有用的知识,这些内容在doc文档中可能只是简单提到了,或者有一些文字说明,通过这些单元测试能更直观的了解如何在Mybatis使用这些内容。

这一节内容为Association关联的结果查询,就是在查询出结果后,根据查询的列和resultMap定义的对应关系,来创建对象并写入值。

  • association – 一个复杂的类型关联;许多结果将包成这种类型
  • 嵌入结果映射 – 结果映射自身的关联,或者参考一个
     

(注:“参考一个”,这里参考一个是通过对象的Key来唯一确定的,如果Key值一样,就直接用已经存在的这个对象。)

association是resultMap中的一个配置选项,下面是用到的类的UML图:

如何在Mybatis项目中使用 Association

Car对象中包含了Engine和Brakes两个对象。Mapper是接口对象。AssociationTest是该测试对象。

SQL表结构和数据:

drop table cars if exists; 
create table cars ( 
 carid integer, 
 cartype varchar(20), 
 enginetype varchar(20), 
 enginecylinders integer, 
 brakestype varchar(20) 
); 
insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(1, 'VW',  'Diesel', 4,  null); 
insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(2, 'Opel',  null,  null, 'drum'); 
insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(3, 'Audi', 'Diesel', 4,  'disk'); 
insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(4, 'Ford', 'Gas',  8,  'drum'); 

Mapper.xml文件:

 
   
     
     
     
     
   
   
     
     
   
   
     
   
   
   
   
 

其中的一个测试用例:

@Test 
 public void shouldGetAllCars() { 
  SqlSession sqlSession = sqlSessionFactory.openSession(); 
  try { 
   Mapper mapper = sqlSession.getMapper(Mapper.class); 
   List cars = mapper.getCars(); 
   Assert.assertEquals(4, cars.size()); 
   Assert.assertEquals("VW", cars.get(0).getType()); 
   Assert.assertNotNull(cars.get(0).getEngine()); 
   Assert.assertNull(cars.get(0).getBrakes()); 
   Assert.assertEquals("Opel", cars.get(1).getType()); 
   Assert.assertNull(cars.get(1).getEngine()); 
   Assert.assertNotNull(cars.get(1).getBrakes()); 
  } finally { 
   sqlSession.close(); 
  } 
 } 

cars返回值:

如何在Mybatis项目中使用 Association

association是嵌套查询中最简单的一种情况,像上述例子中,一般我们都会用一个Car对面包含所有的属性,这里的例子使用了嵌套对象,使对像的结构更鲜明。不过一般情况下很少会拆分一个对象为多个,用的多的时候是多表查询的嵌套。

上面XML中的

carResult和engieResult,brakesResult都是分别定义,carResult引用了另外两个resultMap。

对于不需要重用嵌套对象的情况,还可以直接这么写,把上面的XML修改后:

 
   
   
   
     
     
   
   
 

为了对比和区分,这里指修改了Engine,在association元素上增加了属性javaType,元素内增加了result映射。

上述就是小编为大家分享的如何在Mybatis项目中使用 Association了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。


分享标题:如何在Mybatis项目中使用Association
分享链接:http://6mz.cn/article/jcgohs.html

其他资讯