MyBatis之ResultMap的association和collection标签详解(图文例子)

您所在的位置:网站首页 resultmap和resulttype可以共存吗 MyBatis之ResultMap的association和collection标签详解(图文例子)

MyBatis之ResultMap的association和collection标签详解(图文例子)

2024-05-23 21:28| 来源: 网络整理| 查看: 265

文章目录 一、前言二、ResultMap 的属性列表三、resultMap标签介绍四、id & result标签参数详解五、association标签常用参数详解六、collection标签常用参数详解七、jdbc Type与java Type对照表八、总结

一、前言

MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。 如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。 而 ResultMap 就是 MyBatis 对这个问题的答案。

二、ResultMap 的属性列表 属性描述id当前命名空间中的一个唯一标识,用于标识一个结果映射。type类的完全限定名, 或者一个类型别名(关于内置的类型别名,可以参考上面的表格)。autoMapping如果设置这个属性,MyBatis 将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。extends可以继承其他resultMap的一些写好的属性 三、resultMap标签介绍 constructor - 用于在实例化类时,注入结果到构造方法中 idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能arg - 将被注入到构造方法的一个普通结果 id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能result – 注入到字段或 JavaBean 属性的普通结果association – 一个复杂类型的关联;许多结果将包装成这种类型 嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用collection – 一个复杂类型的集合 嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用discriminator – 使用结果值来决定使用哪个 resultMap case – 基于某些值的结果映射 嵌套结果映射 – case 也是一个结果映射,因此具有相同的结构和元素;或者引用其它的结果映射 四、id & result标签参数详解 属性描述property映射到列结果的字段或属性。如果 JavaBean 有这个名字的属性(property),会先使用该属性。否则 MyBatis 将会寻找给定名称的字段(field)。 无论是哪一种情形,你都可以使用常见的点式分隔形式进行复杂属性导航。 人话为:就是你的Java实体类column数据库中的列名,或者是列的别名。一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。javaType一个 Java 类的全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。jdbcTypeJDBC 类型,所支持的 JDBC 类型参见这个表格之后的“支持的 JDBC 类型”。 只需要在可能执行插入、更新和删除的且允许空值的列上指定 JDBC 类型。这是 JDBC 的要求而非 MyBatis 的要求。如果你直接面向 JDBC 编程,你需要对可以为空值的列指定这个类型。typeHandler我们在前面讨论过默认的类型处理器。使用这个属性,你可以覆盖默认的类型处理器。 这个属性值是一个类型处理器实现类的全限定名,或者是类型别名。

- 常用例子展示

五、association标签常用参数详解 属性描述property映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。 无论是哪一种情形,你都可以使用通常的点式分隔形式进行复杂属性导航。 人话为:你要一对一的实体类中的另一个实体类的名称javaType一个 Java 类的完全限定名,或一个类型别名。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。

例子演示

实体类演示 @Data //书籍 public class Book { private String id; private String name; private String author; private Double price; private Integer del; private Date publishdate; private String info; //把出版社对象当作属性 private Publisher pub;//------重点在这里一本书对应一个出版社,这是一个出版社对象 } @Data //出版社 public class Publisher { private String id; private String name; private String phone; private String address; }

- xml演示

六、collection标签常用参数详解 属性描述property映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。 无论是哪一种情形,你都可以使用通常的点式分隔形式进行复杂属性导航。 人话为:你要一对一的实体类中的另一个实体类的名称javaType这里和一对一的表示不太一样,这里一般是一对多的集合类型,如:listofType指定的这个一对多的集合的所存放的实体类的类型

例子演示

- 实体类演示

@Data //班级类 public class Class { private String id; private String name; private List students;//----重点在这里,一个班级对应多个学生 } @Data public class Student { private int id; private String name; private int age; }

- xml演示

七、jdbc Type与java Type对照表 JDBC TypeJava TypeCHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITbooleanBOOLEANbooleanTINYINTbyteSMALLINTshortINTEGERINTEGERBIGINTlongREALfloatFLOATdoubleDOUBLEdoubleBINARYbyte[]VARBINARYbyte[]LONGVARBINARYbyte[]DATEjava.sql.DateTIMEjava.sql.TimeTIMESTAMPjava.sql.TimestampCLOBClobBLOBBlobARRAYArrayDISTINCTmapping of underlying typeSTRUCTStructREFRefDATALINKjava.net.URL

附:表格来源

八、总结

这样就对ResultMap具体参数进行详细的解释,还有对association和collection标签的解释和具体演示,希望能够帮到你,一起学习,如果用到收藏一下呗!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3