文章目录


一、parameterType 输入参数

1.传入简单参数

【MyBatis】MyBatis参数深入_返回顶部

就像在查询单个用户时利用id查询用户信息或者模糊查询的时候指定查询某列的某种指定数据,这时候在sql中我们通常都是利用某个字段去作为条件进行查找,在java的dao层接口方法中,就化成了简单参数的形式,往往是使用包装类。

返回顶部


2.传递pojo对象

Mybatis 使用 ognl 表达式解析对象字段的值, #{…} 或者 ${…} 括号中的值为pojo属性名称。

ognl 表达式:

【MyBatis】MyBatis参数深入_字段_02

返回顶部


3.传递pojo包装对象

【MyBatis】MyBatis参数深入_封装_03


【MyBatis】MyBatis参数深入_字段_04

简单地来讲,可以看做是多了一层的封装~

返回顶部


二、resultType 输出参数

1.输出简单参数

  • 输出结果为某个简单类型的值(常见的包装类型)

【MyBatis】MyBatis参数深入_mybatis_05

【MyBatis】MyBatis参数深入_字段_06


返回顶部


2.输出pojo对象


3.输出pojo列表

  • 输出的结果是某个封装类的对象集合
  • 【MyBatis】MyBatis参数深入_封装_09


  • 【MyBatis】MyBatis参数深入_封装_10

返回顶部


4.resultMap结果类型

在封装数据库表的实体类的时候,我们要求属性和字段名保持一致;但是如果我们不保持一致的时候怎么使用呢?

【MyBatis】MyBatis参数深入_字段_11

对于插入操作而言,我们需要修改以下几点:

【MyBatis】MyBatis参数深入_封装_12

【MyBatis】MyBatis参数深入_返回顶部_13


【MyBatis】MyBatis参数深入_字段_14

同样地,删除、更改操作也只需要针对以上几点操作即可。但是查询就不一样了:

【MyBatis】MyBatis参数深入_返回顶部_15

查询后可以发现,只有userName字段有值,而其它列均没有值,这是因为在mysql中可以忽略大小写,所以userNameusername是一样的,但是其它列就不是大小写的问题,整个都不一样,所以在和数据库进行映射匹配的时候出了问题。所以我們要做的就是让他们匹配得上!

【MyBatis】MyBatis参数深入_字段_16


方法一:取别名

  • 这种方式的效率较高,从sql层面进行问题的解决!

【MyBatis】MyBatis参数深入_封装_17


返回顶部


方法二:指定resultMap配置

resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
通过 resultMap将字段名和属性名作一个对应关系, resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

  • 这种方式相比于第一种方式较为繁琐,代码量大;但是同时开发效率提升了,后面所有的查询操作,都可以利用这个resultMap。
<!-- 方式二:进行匹配配置 -->
<!-- 配置 查询结果的列名和实体类的属性名的对应关系 -->
<!-- id 唯一标识 ; type 对应查询的实体类-->
<resultMap id="userDFMap" type="com.zyx.core.domain.UserDF">
<!--主键字段的对应-->
<id property="userId" column="id"></id>
<!--非主键字段的对应-->
<result property="userName" column="username"></result>
<result property="userAddress" column="address"></result>
<result property="userSex" column="sex"></result>
<result property="userBirthday" column="birthday"></result>
</resultMap>
<!--原有的resultType要替换成resultMap-->
<select id="findAll_UserDF" resultMap="userDFMap">
select * from user;
</select>

【MyBatis】MyBatis参数深入_mybatis_18

返回顶部