模板
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id" />
<result property="username" column="user_name" />
<result property="password" column="hashed_password" />
</resultMap>
<select id=”selectUsers” parameterType=”int” resultMap=”userResultMap”>
select user_id, user_name, hashed_password
from some_table
where id = #{id}
</select>
一般的结果集映射已经够用,但如果返回原结果对象很是复杂则可能返回的结果映射也就要多点设计了。
<resultMap id="detailedBlogResultMap" type="Blog">
<constructor>
<idArg column="blog_id" javaType="int" />
</constructor>
<result property="title" column="blog_title" />
<association property="author" column="blog_author_id"
javaType="Author">
<id property="id" column="author_id" />
<result property="username" column="author_username" />
<result property="password" column="author_password" />
<result property="email" column="author_email" />
<result property="bio" column="author_bio" />
<result property="favouriteSection" column="author_favourite_section" />
</association>
<collection property="posts" ofType="Post">
<id property="id" column="post_id" />
<result property="subject" column="post_subject" />
<association property="author" column="post_author_id"
javaType="Author" />
<collection property="comments" column="post_id" ofType=" Comment">
<id property="id" column="comment_id" />
</collection>
<collection property="tags" column="post_id" ofType=" Tag">
<id property="id" column="tag_id" />
</collection>
<discriminator javaType="int" column="draft">
<case value="1" resultType="DraftPost" />
</discriminator>
</collection>
</resultMap>
resultMap
constructor – 类在实例化时,用来注入结果到构造方法中
idArg ID 参数;标记结果作为 ID 可以帮助提高整体效能
arg 注入到构造方法的一个普通结果
id 一个ID 结果;标记结果作为ID 可以帮助提高整体效能
result 注入到字段或JavaBean 属性的普通结果
association 一个复杂的类型关联;许多结果将包成这种类型.嵌入结果映射
collection 复杂类型的集 . 嵌入结果映射
discriminator – 使用结果值来决定使用哪个结果映射
case – 基于某些值的结果映射. 嵌入结果映射
最佳实践:通常逐步建立结果映射。单元测试的真正帮助在这里。如果你尝试创建一次创建一个向上面示例那样的巨大的结果映射,那么可能会有错误而且很难去控制它来工作。开始简单一些,一步一步的发展。而且要进行单元测试!使用该框架
的缺点是它们有时是黑盒(是否可见源代码)。你确定你实现想要的行为的最好选择是编写单元测试。它也可以你帮助得到提交时的错误。
<id property="id" column="post_id"/>
<result property="subject" column="post_subject"/>
这些是结果映射最基本内容。id 和 result 都映射一个单独列的值到简单数据类型(字符串,整型,双精度浮点数,日期等)的单独属性或字段。
这两者之间的唯一不同是 id 表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射
property 映射到列结果的字段或属性。如果匹配的是存在的,和给定名称相同的 JavaBeans 的属性,那么就会使用。否则 MyBatis 将会寻找给定名称的字段。这两种情形你可以使用通常点式的复杂属性导航。比如,你可以这样映射一些东西:“username”,或者映射到一些复杂的东西:“address.street.number”。
column 从数据库中得到的列名,或者是列名的重命名标签。
javaType 一个 Java 类的完全限定名,或一个类型别名。如果你映射到的是 HashMap,那么你应该明确地指定 javaType来保证所需的行为。
jdbcType 在这个表格之后的所支持的 JDBC 类型列表中的类型。 JDBC 类型是仅仅需要对插入,更新和删除操作可能为空的列进行处理。这是 JDBC的需要,而不是 MyBatis 的。如果你直接使用 JDBC 编程,你需要指定这个类型-但仅仅对可能为空的值。
typeHandler 使用这个属性,你可以覆盖默认的类型处理器。这个属性值是类的完全限定名或者是一个类型处理器的实现,或者是类型别名。
<constructor>
<idArg column="id" javaType="int"/>
<arg column=”username” javaType=”String”/>
</constructor>
映射类的构造方法,也有四个属性column 、javaType 、jdbcType 、typeHandler
<association property="author" column="blog_author_id" javaType=" Author">
<id property="id" column="author_id"/>
<result property="username" column="author_username"/>
</association>
关联映射
其属性有property 、column、javaType、jdbcType、typeHandler、select
其中select是关联的嵌套查询另外一个映射语句的 ID,可以加载这个属性映射需要的复杂类型。获取的在列属性中指定的列的值将被传递给目标 select 语句作为参数。
注意:要处理复合主键,你可以指定多个列名通过 column=”{prop1=col1,prop2=col2}”这种语法来传递给嵌套查询语句。这会引起prop1 和 prop2 以参数对象形式来设置给目标嵌套查询语句。
<resultMap id=”blogResult” type=”Blog”>
<association property="author" column="blog_author_id"
javaType="Author" select=”selectAuthor” />
</resultMap>
<select id=”selectAuthor” parameterType=”int” resultType="Author">
SELECT * FROM AUTHOR WHERE ID = #{id}
</select>
分享到:
相关推荐
在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>...这个时候其实就用到了Mybatis的结果集自动映射,下面通过本文给大家分享Mybatis结果集自动映射的实例代码,一起看看吧
4.resultMap –用来描述数据库结果集和对象的对应关系 5.sql – 可以重用的SQL块,也可以被其他语句引用 6.insert – 映射插入语句 7.update – 映射更新语句 8.delete – 映射删除语句 9.select – 映射查询语句
搞明白mybatis的结果集是如何类型转换以及结果集映射的? 学会手写框架 搞明白mybatis框架的架构是啥样的? 搞明白mybatis执行流程底层是啥样的? 搞明白mybatis的参数是如何类型转换以及设置参数的? 搞明白mybatis...
java+mybatis+mysql查询结果集的映射问题
主要给大家介绍了关于Mybatis中输入输出映射与动态Sql的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
MyBatis是一个支持普通SQL查询、存储过程和高级映射的优秀的持久层框架,它消除了几乎所有的JDBC代码、对参数的手工设置以及对结果集繁琐的处理,使用简单的XML或注解(annotation)用于配置和映射,将接口和POJO...
3. 映射文件解析: 映射文件(Mapper XML文件)定义了SQL语句、参数映射关系、结果集映射关系等。MyBatis使用XML解析器解析映射文件,将SQL语句和数据库操作转化为Java对象。 4. SQL执行: 当执行SQL操作时,...
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录...
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 ...
MyBatis 3 用户指南中文版 使开发者更容易看懂文档 MyBatis 是一个可以自定义SQL、存储...代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、 Map 接口和POJO 到数据库记录。
了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML 或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java 对象)映射成数据库中的记录。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的...
基础知识(重点,内容量多) 对原生态jdbc程序(单独... 高级结果集映射(一对一、一对多、多对多) mybatis延迟加载 mybatis查询缓存(一级缓存、二级缓存) mybaits和spring进行整合(掌握) mybatis逆向工程
Mybatis是Apache的一个Java开源项目,是一个支持动态Sql...2.Mybatis通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手工检索(JDBC) 3.Mybatis可以通过Xml配置文件对数据库连接进行管理。
Mybatis 省去了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 Mybatis 可以通过简单的 XML 或注解将原始类型、接口和 Java POJO(plain old Java objects)配置和映射为数据库中的记录。 3.什么是ORM? ...
MyBatis 避免了几乎所有的 JDBC 代码和 手动设置参数以及获取结果集。MyBatis 可以对配置和原生 Map 使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录...
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录...
通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手工检索。 Mybatis可以通过Xml配置文件对数据库连接进行管理。 实现了sql和java代码的分离,通过配置文件实现sql语句查询。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的...
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和原始类型、接口和 Java POJOs(Plain Old Java Objects) 为映射,包括集成的复杂类型。 MyBatis 的...