【Mybatis】resultType与resultMap

目录

resultType

返回基本类型或其包装类

返回实体类对象

返回集合类型

返回 Map 类型

注意

resultMap

基本的ResultMap

高级ResultMap - 关联映射

高级ResultMap - 集合映射

使用构造器


resultType

特性描述用法示例
resultType指定查询结果的返回类型为com.example.User实体类。<select id="selectUser" resultType="com.example.User"> SELECT id, username, email FROM user WHERE id = #{id} </select>
resultType返回单个字符串类型的结果。<select id="selectUserName" resultType="java.lang.String"> SELECT name FROM user WHERE id = #{id} </select>
resultType返回一个List集合,集合元素类型为查询上下文中的实体类。<select id="selectAllUsers" resultType="java.util.List"> SELECT * FROM user </select>
resultType返回一个Map,键是列名,值是对应的值。<select id="selectUserAsMap" resultType="java.util.Map"> SELECT * FROM user WHERE id = #{id} </select>

MyBatis 在定义 SQL 映射语句时,可以通过 `resultType` 属性指定查询结果集的返回类型。以下是一些常见的 `resultType` 返回值类型及其用法的例子:

返回基本类型或其包装类

<!-- 返回单个整数 -->
<select id="countUsers" resultType="int">
  SELECT COUNT(*) FROM user
</select>

<!-- 返回单个字符串 -->
<select id="selectUserName" resultType="java.lang.String">
  SELECT name FROM user WHERE id = #{id}
</select>

返回实体类对象

<!-- 返回用户实体 -->
<select id="selectUser" parameterType="int" resultType="com.example.User">
  SELECT id, name, email FROM user WHERE id = #{id}
</select>

在这个例子中,`com.example.User` 是一个完整的类路径,MyBatis 会自动将结果集的列映射到 `User` 类的属性中。

返回集合类型

<!-- 返回用户实体列表 -->
<select id="selectAllUsers" resultType="java.util.List">
  SELECT * FROM user
</select>

在这个例子中,MyBatis 会默认将结果集映射到一个 `List` 集合中,集合中的元素类型依赖于查询的上下文。

返回 Map 类型

<!-- 返回一条记录,其中键是列名,值是对应的值 -->
<select id="selectUserAsMap" resultType="java.util.Map">
  SELECT * FROM user WHERE id = #{id}
</select>

<!-- 返回多条记录的 Map 列表 -->
<select id="selectAllUsersAsMaps" resultType="java.util.List">
  SELECT * FROM user
</select>

在第一个例子中,结果集将被映射到一个 `Map` 对象中,其中键是列名,值是对应的值。在第二个例子中,每一行都会被映射到一个 `Map` 中,并且所有的 `Map` 将会被收集到一个 `List` 中。

注意

- 当返回单行结果集时,`resultType` 可以是任何 Java 类型。
- 当返回多行结果集时,`resultType` 通常是集合类型,如 `List`、`Set` 等,或者是数组类型。
- MyBatis 会自动处理基本类型和包装类之间的转换。
- 当使用自定义的实体类时,需要确保结果集中的列名和实体类中的属性名能够对应上,或者使用 `resultMap` 来进行详细的映射配置。

使用正确的 `resultType` 是确保 MyBatis 能够正确地将 SQL 查询结果映射到 Java 类型的关键。

resultMap

特性描述用法示例
resultMap定义了如何将查询结果映射到com.example.User类的实例中。<resultMap id="UserResultMap" type="com.example.User"> <id column="id" property="id" /> <result column="username" property="userName" /> <result column="email_address" property="email" /> </resultMap>
resultMap映射了一个包含Author对象的Blog对象,使用association元素处理对象关联。<resultMap id="BlogResultMap" type="Blog"> <association property="author" javaType="Author"> <id column="author_id" property="id" /> <result column="author_name" property="name" /> </association> </resultMap>
resultMap映射了一个User对象,其中包含一个Blog对象的列表,使用collection元素处理一对多关系。<resultMap id="UserResultMap" type="com.example.User"> <collection property="blogs" ofType="Blog"> <id column="blog_id" property="id" /> <result column="blog_title" property="title" /> </collection> </resultMap>
resultMap使用构造器映射,允许通过数据库列直接调用实体类的构造函数创建实例。<resultMap id="UserResultMap" type="com.example.User"> <constructor> <idArg column="id" javaType="int"/> <arg column="username" javaType="String"/> </constructor> <result column="email_address" property="email" /> </resultMap>

在MyBatis中,`resultMap`是一个非常强大的映射工具,它允许你详细地指定如何从数据库结果集中映射列到Java对象的属性。下面是一些`resultMap`的用法示例:

基本的ResultMap

<resultMap id="UserResultMap" type="com.example.User">
  <id column="id" property="id" />
  <result column="username" property="userName" />
  <result column="email_address" property="email" />
</resultMap>

<select id="selectUser" resultMap="UserResultMap">
  SELECT id, username, email_address FROM user WHERE id = #{id}
</select>

在这个例子中,`UserResultMap` 定义了如何将查询结果映射到 `com.example.User` 类的实例中。`id` 元素用于标识主键字段,`result` 元素用于普通字段。

高级ResultMap - 关联映射

<resultMap id="BlogResultMap" type="Blog">
  <id column="blog_id" property="id" />
  <result column="title" property="title" />
  <!-- 关联一个作者对象 -->
  <association property="author" javaType="Author">
    <id column="author_id" property="id" />
    <result column="author_name" property="name" />
    <result column="author_email" property="email" />
  </association>
</resultMap>

<select id="selectBlog" resultMap="BlogResultMap">
  SELECT b.id AS blog_id, b.title, a.id AS author_id, a.name AS author_name, a.email AS author_email
  FROM Blog b
  LEFT JOIN Author a ON b.author_id = a.id
  WHERE b.id = #{id}
</select>

在这个例子中,`BlogResultMap` 映射了一个包含 `Author` 对象的 `Blog` 对象。`association` 元素用于处理对象之间的关联。

高级ResultMap - 集合映射

<resultMap id="UserResultMap" type="com.example.User">
  <id column="user_id" property="id" />
  <result column="username" property="userName" />
  <result column="email_address" property="email" />
  <!-- 用户的博客列表 -->
  <collection property="blogs" ofType="Blog">
    <id column="blog_id" property="id" />
    <result column="blog_title" property="title" />
  </collection>
</resultMap>

<select id="selectUserWithBlogs" resultMap="UserResultMap">
  SELECT u.id AS user_id, u.username, u.email_address,
         b.id AS blog_id, b.title AS blog_title
  FROM user u
  LEFT JOIN blog b ON u.id = b.user_id
  WHERE u.id = #{id}
</select>

在这个例子中,`UserResultMap` 映射了一个 `User` 对象,其中包含一个 `Blog` 对象的列表。`collection` 元素用于处理一对多的关系。

使用构造器

<resultMap id="UserResultMap" type="com.example.User">
  <constructor>
    <idArg column="id" javaType="int"/>
    <arg column="username" javaType="String"/>
  </constructor>
  <result column="email_address" property="email" />
</resultMap>

<select id="selectUser" resultMap="UserResultMap">
  SELECT id, username, email_address FROM user
</select>

在这个例子中,`UserResultMap` 使用了构造器映射,允许你通过数据库列直接

有用请点赞,养成良好习惯!

疑问、交流、鼓励请留言!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕白Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值