模板
<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>
分享到:
相关推荐
解决方法是将映射文件首行的编码字符集由“UTF-8”改为“UTF8”或者“GBK”。 MyBatis找不到映射文件的问题可以通过正确地配置资源目录和Maven项目来解决。同时,我们需要注意中文编码问题,以避免MyBatis对UTF-8...
2. 使用结果集映射(ResultMap):通过ResultMap可以更精确地控制数据的映射,避免全表扫描,提高查询效率。 3. 缓存机制:利用MyBatis的一级缓存和二级缓存,减少对数据库的访问次数。 综上所述,MyBatis的一对多...
2. 映射文件与 XML 映射元素:Mybatis 的映射文件通常以 `.xml` 结尾,如 `mybatis3.xml`,它包含了 SQL 语句和结果集映射。在映射文件中,`<select>`, `<insert>`, `<update>`, `<delete>` 元素分别对应 SQL 的查询...
执行器负责执行SQL,处理参数映射和结果集映射。 MappedStatement是Executor处理SQL信息的载体,它包含了SQL语句、输入参数的映射信息(如HashMap或POJO对象)、以及输出结果的映射信息。MyBatis使用这些信息将Java...
在Mybatis中,结果集映射是用于将数据库查询的结果转换为Java对象的过程。自动映射功能使得这一过程更为便捷,无需显式地编写复杂的resultMap配置。在某些情况下,我们只需要简单地指定`resultType`属性,Mybatis就...
通过这个元素,你可以定义一个结果集与Java对象之间的映射关系。 例如,假设我们有一个`User`类,它有`id`, `username`, `password`等字段,我们可能会有如下结果映射: ```xml ``` 这里,`id`, `result`...
除了这些基本的内置方法,Mapper还可以自定义更复杂的查询,通过`<resultMap>`定义结果集映射,将数据库查询结果映射到Java对象上。`<association>`、`<collection>`等元素则用于处理嵌套的结果或一对多、多对多的...
MyBatis是一个流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码绑定,提供了一种直接操作结果集的方法。在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关...
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 2. **...
- resultMap:定义结果集的映射规则,它将SQL语句执行后的结果集映射到Java对象中。 - id、result:定义resultMap中使用的id和结果。 5. 高级映射特性 - 关联(association)和集合(collection):处理一对多、多...
MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计思路,作为高级开发人员,有必要深入研究...
Mybatis是一款轻量级的Java持久层框架,它主要解决了对象与数据库之间的映射问题,使得开发者无需手动编写SQL和结果集的映射代码,极大地提高了开发效率。在Mybatis中,自动映射工具——Mybatis Generator(MBG)是...
对于复杂的结果集映射,MyBatis提供了高级映射功能,包括: - **`id`**和**`result`**:分别用于唯一标识和非唯一属性映射。 - **`构造方法`**:用于指定对象的构造函数参数来源。 - **`关联`**:处理一对一或一对...
MyBatis3 是一款流行的Java持久层框架,它简化了...通过学习本教程,读者将掌握如何使用MyBatis3进行数据操作,包括配置、SQL映射、动态SQL、结果映射、事务管理和缓存等关键知识点,从而提升开发效率和代码质量。
MyBatis 的自动映射是基于注解或 XML 配置文件实现的,它能够在执行 SQL 查询后,自动将结果集与 Java 对象进行映射。例如,当我们在实体类中定义了与数据库表字段对应的属性,并在 SQL 映射文件中设置了 `...
MyBatis是一个基于Java的持久层框架,它解决了传统JDBC中的繁琐的代码编写问题,如手动管理连接、预编译语句和结果集等。MyBatis通过XML或注解方式配置映射文件,将SQL语句与Java对象绑定,使得数据库操作变得更加...
MyBatis允许你在XML映射文件或者Java注解中编写SQL,这些映射文件或注解定义了SQL语句、参数映射以及结果集映射。 **映射SQL语句**: - **命名空间(Namespace)**:每个映射文件都有一个唯一的命名空间,通常与...
3. **`resultMap` 元素**:定义结果集映射,用于将数据库查询结果转换为 Java 对象。 4. **`parameterMap` 元素(已弃用)**:旧版本中用于参数映射,现在推荐使用 `@Param` 注解或在 SQL 元素内直接定义参数。 5. *...
3. **嵌套结果映射**:当查询返回的结果包含了嵌套的对象或集合时,嵌套结果映射就变得重要。这通常涉及到nested-select、nested-resultmap或者association标签的使用。 4. **关联映射**:对于一对一的关系,可以...