Mybatis的输入(parameterType)及输出类型(resultType和resultMap)

Mybatis深度解析:ORM框架详解与resultType/resultMap对比
本文详细讲解Mybatis框架的ORM特性,介绍parameterType的使用,以及resultType和resultMap的区别,特别关注在复杂查询场景中的应用实例。

Mybatis是什么?

Mybatis是一个持久层框架,也是一个半自动化的ORM(对象关系映射)框架。这是较为官方的定义。通俗的讲它是对JDBC操作诗句哭过程的封装,节省了我们处理注册驱动、创建connection、创建statement、手动设置参数等繁琐的JDBC过程代码,让我们能够更加关注SQL本身。

Mybatis的输入类型parameterType

1、可以传递简单类型

2、可以传递对象类型

3、获取pojo包装的对象

#{}:是通过反射获取数据的,相当于JDBCsql中的占位符,会对参数进行类型解析(如果是String类型,那么SQL语句会自动加上’’引号)

${}:是通过OGNL表达式会随着对象的嵌套而相应的发生层级变化,相当于JDBC SQL语句中的连接符合 +,讲原样输出

Mybatis的输出类型resultType和resultMap

Mybatis在Mapper.xml中配置查询结果类型时,分为两种配置方式:resultType和resultMap,resultType可以是一个简单数据类型,也可以是一个定义的POJO类,且要求数据表中的字段与POJO对象中的字段一一对应;resultMap是将查询结果一一进行映射。有人说用resultType然后sql语句中进行别名设置就类似与resultMap中的映射,可以这样理解,但是有些情况要求我们只能用resultMap,而不能用resultType。例如:关联查询,user表和order表,一个user对应多个order,现在业务需要我们查询处一个user对应的所有order,这就需要一种类似于{user:{list:{order数据}}}这样的数据结构,使用直接的resultType很难实现,这时候就必须用resultMap,来将order对象封装成一个list映射到user查询结果中。

MyBatis 中,`parameterType` `resultType` 是两个核心属性,分别用于处理 SQL 语句的输入参数输出结果的映射。 `parameterType` 用于指定传入 SQL 语句的参数类型,它决定了 MyBatis 如何从接口方法的参数中提取值,并将其设置到 SQL 语句中的占位符(如 `#{}`)中。例如,当使用 `<select>`、`<insert>`、`<update>` 等标签时,可以通过 `parameterType` 指定传入的参数类型,如基本类型(`int`、`String`)、Java Bean 或 Map 等。MyBatis 会根据该类型从参数对象中提取值并设置到 SQL 中。例如,在以下代码中,`parameterType="Integer"` 表示方法的输入参数是一个整数类型: ```xml <select id="selectStudentNum" parameterType="Integer" resultType="int"> select COUNT(class_id) from Student where class_id= #{classId}; </select> ``` 而 `resultType` 则用于定义 SQL 查询结果的返回类型,它决定了 MyBatis 如何将数据库查询结果映射为 Java 对象。当查询结果是一行一列(如整数、字符串等简单类型)时,可以直接使用 `resultType` 指定返回类型。例如,上述示例中 `resultType="int"` 表示查询结果是一个整数。对于更复杂的映射,例如查询结果包含多个字段,且需要映射到一个 Java Bean 或 Map 中,也可以使用 `resultType`,前提是字段名与目标对象的属性名能够自动匹配。若需要更灵活的映射策略(如字段名与属性名不一致、嵌套对象等),则应使用 `resultMap`。 总结来看,`parameterType` 关注的是 SQL 语句的输入参数类型,而 `resultType` 关注的是查询结果的输出类型及其映射方式。在简单的映射场景下,`resultType` 已经足够使用,但在需要更复杂映射的情况下,应使用 `resultMap` 进行自定义映射[^1]。 --- ```xml <!-- 示例:使用 parameterType 传递参数,并使用 resultType 映射结果 --> <select id="selectStudentCount" parameterType="int" resultType="int"> SELECT COUNT(*) FROM Student WHERE class_id = #{classId} </select> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值