Mybatis 入门示例代码之 Association

网友投稿 218 2023-06-07


Mybatis 入门示例代码之 Association

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

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

association – 一个复杂的类型关联;许多结果将包成这种类型

嵌入结果映射 – 结果映射自身的关联,或者参考一个

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

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

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文件:

select * from cars

select 1 as carid, cartype, enginetype, enginecylinders, brakestype from cars

select 1 as carid, cartype, enginetype, enginecylinders, brakestype from cars where carid in (1,2)

其中的一个测试用例:

@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返回值:

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

上面XML中的

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

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

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

如果有association方面问题可以参考(或在此留言):

htthttp://p://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html

本节源码请看官方Git:

https://github.com/mybatis/mybatis-3/tree/master/src/test/java/org/apache/ibatis/submitted/associationtest

以上所述是给大家介绍的Mybatis 入门示例代码之 Association,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java使用组件编写窗口实现网上文件下载
下一篇:Java 两种延时thread和timer详解及实例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~