MyBatis输入映射和输出映射的实现示例

 更新时间:2026年04月23日 15:17:11   作者:二哈喇子!  
本文详细介绍了MyBatis框架中resultMap的使用,包括其在Java对象与数据库表列映射中的作用,以及如何配置resultMap处理不同情况,具有一定的参考价值,感兴趣的可以了解一下

前言

MyBatis的输入映射和输出映射是将Java对象和数据库表的列进行映射,实现数据的自动转换。

输入映射(Parameter Mapping):是将Java对象转换为可供SQL语句执行的参数。MyBatis提供了多种方式进行输入映射,包括基本类型、Map、注解、XML映射文件等。

输出映射(Result Mapping):是将SQL查询结果映射为Java对象。MyBatis提供了多种方式进行输出映射,包括基本类型、Map、注解、XML映射文件等。其中XML映射文件是最常用的方式,可以根据列名或列索引将查询结果映射为Java对象的属性。

通过输入映射和输出映射,可以方便地完成Java对象与数据库表的转换,提高了开发效率和代码的可维护性。

resultMap的使用

使用resultMap的场景如下:

  • 数据库表和Java类字段名称不一致。如果数据库表中的列名称和Java类中的属性名称不一致,可以使用resultMap来映射这两者之间的关系,避免手动转换的繁琐和容易出错。
  • 处理复杂查询结果。如果查询结果是多表联合查询,或者需要按照特定的顺序和格式显示结果,可以使用resultMap来定制化查询结果的映射。
  • 查询结果中包含关联对象。如果查询结果中包含了与主对象关联的其他对象,可以使用resultMap来映射出这些关联对象,方便进行对象的嵌套查询和处理。
  • 可以提高程序性能。使用resultMap可以缓存映射规则,避免每次查询都需要重新定义映射规则的操作,从而提高程序的性能。

总之,如果需要处理一些复杂的查询结果或者需要将数据库查询结果映射到Java对象中,就可以使用resultMap。

MyBatis框架的工作执行流程如下

(1)读取MyBatis配置文件mybatis-config.xml

(2)加载映射文件Mapper.xml

(3)构建会话工厂

(4)创建SqlSession对象

(5)使用Executor接口来操作数据库

(6)使用MappedStatement类型的参数对映射信息进行封装。

(7)输入参数映射

(8)输出结果映射

mapper元素子元素及其作用

在映射文件中,<mapper>元素是映射文件的根元素,其他元素都是它的子元素。这些子元素及其作用如下所示:

  • <select>:用于映射查询语句,可自定义参数,返回结果集等。
  • <insert>:用于映射插入语句,执行后返回一个整数,代表插入的条数。
  • <update>:用于映射更新语句,执行后返回一个整数,代表更新的条数。
  • <delete>:用于映射删除语句,执行后返回一个整数,代表删除的条数。
  • <sql>:用于定义一部分SQL,然后可被其他语句引用此SQL。
  • <cache>:用于给定命名空间的缓存配置。
  • <cache-ref>:用于其他命名空间缓存配置的引用。
  • <resultMap>:用于描述如何从数据库结果集中来加载对象。

案例

po 类

public class Dept {
	private Integer deptno;
	private String dname;
	private String loc;
	// 自动生成两个构造方法、Getter/Setter/toString
}

在同main/java包中,新建mapper包,里面新建同名的一个接口,一个映射文件

映射文件的 namespace 是接口的限定名

只有查询语句有查询

在接口文件中:

List<Dept> queryAll();

对应的映射文件:

<mapper namespace="com.mybatis.mapper.DeptMapper">
<!-- 如果查询中的列名和某个po类的属性名不一致,那么我们就需要配置结果的映射 -->
		<!-- type:po类的名字 -->
	<resultMap type="Dept" id="dept">
		<!-- id标记配置的是主键列的映射关系 -->
		<id column="no" property="deptno" />
		<!-- result配置的是非主键列和属性的映射关系 -->
		<result column="name" property="dname"/>
		<result column="location" property="loc"/>
	</resultMap>
<!-- 如果查询语句中的列名和某个po类中的属性名一致,那么需要配置resultType -->
						    	<!-- dept:上面的id值 -->
    <select id="queryAll" resultMap="dept">
    	select deptno as no,dname as name,loc as location
    	from dept 
    </select>
</mapper>

测试代码:

@Test 
	public void queryDept() {
		DeptMapper mapper = session.getMapper(DeptMapper.class);
		List<Dept> list = mapper.queryAll();
		// foreach 生成
		for (Dept dept : list) {
			System.out.println(dept);
		}
	}

总结

如果查询语句中的列名和某个po类中的属性名一致,那么需要配置resultType

如果查询中的列名和某个 po 类的属性名不一致,那么就需要配置结果的映射

id 标记配置的是主键列的映射关系

result 配置的是非主键列和属性的映射关系

到此这篇关于MyBatis输入映射和输出映射的实现示例的文章就介绍到这了,更多相关MyBatis输入映射和输出映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SSM Mapper文件查询出返回数据查不到个别字段的问题

    SSM Mapper文件查询出返回数据查不到个别字段的问题

    这篇文章主要介绍了SSM Mapper文件查询出返回数据查不到个别字段的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 导出maven项目依赖的jar包(图文教程)

    导出maven项目依赖的jar包(图文教程)

    下面小编就为大家带来一篇导出maven项目依赖的jar包(图文教程)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java zookeeper图形化工具ZooInspector用法详解

    Java zookeeper图形化工具ZooInspector用法详解

    这篇文章主要介绍了Java zookeeper图形化工具ZooInspector用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java MD5消息摘要算法原理及实现代码

    Java MD5消息摘要算法原理及实现代码

    这篇文章主要介绍了Java MD5消息摘要算法原理及实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java用正则表达式实现${name}形式的字符串模板实例

    Java用正则表达式实现${name}形式的字符串模板实例

    这篇文章主要给大家介绍了Java如何用正则表达式实现${name}形式的字符串模板,文章给出详细的实例代码,对大家的理解和学习会很有帮助,有需要的朋友们下面来一起看看吧。
    2016-12-12
  • Spring容器注册组件实现过程解析

    Spring容器注册组件实现过程解析

    这篇文章主要介绍了Spring容器注册组件实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 解析Java程序中对象内存的分配和控制的基本方法

    解析Java程序中对象内存的分配和控制的基本方法

    这篇文章主要介绍了解析Java程序中对象内存的分配和控制的基本方法,包括计算对象的内存占用的方法,要的朋友可以参考下
    2016-04-04
  • 基于spring security实现登录注销功能过程解析

    基于spring security实现登录注销功能过程解析

    这篇文章主要介绍了基于spring security实现登录注销功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java中多态的实现原理详细解析

    Java中多态的实现原理详细解析

    这篇文章主要介绍了Java中多态的实现原理详细解析,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定,需要的朋友可以参考下
    2024-01-01
  • java nio中的ByteBuffer扩展问题

    java nio中的ByteBuffer扩展问题

    这篇文章主要介绍了java nio中的ByteBuffer扩展问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论