文章目录
- 前言
- 案例
- 总结
- resultMap的使用
前言
提示:这里可以添加本文要记录的大概内容:
MyBatis的输入映射和输出映射是将Java对象和数据库表的列进行映射,实现数据的自动转换。
输入映射(Parameter Mapping):是将Java对象转换为可供SQL语句执行的参数。MyBatis提供了多种方式进行输入映射,包括基本类型、Map、注解、XML映射文件等。
输出映射(Result Mapping):是将SQL查询结果映射为Java对象。MyBatis提供了多种方式进行输出映射,包括基本类型、Map、注解、XML映射文件等。其中XML映射文件是最常用的方式,可以根据列名或列索引将查询结果映射为Java对象的属性。
通过输入映射和输出映射,可以方便地完成Java对象与数据库表的转换,提高了开发效率和代码的可维护性。
提示:以下是本篇文章正文内容,下面案例可供参考
案例
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 配置的是非主键列和属性的映射关系
resultMap的使用
使用resultMap的场景如下:
-
数据库表和Java类字段名称不一致。如果数据库表中的列名称和Java类中的属性名称不一致,可以使用resultMap来映射这两者之间的关系,避免手动转换的繁琐和容易出错。
-
处理复杂查询结果。如果查询结果是多表联合查询,或者需要按照特定的顺序和格式显示结果,可以使用resultMap来定制化查询结果的映射。
-
查询结果中包含关联对象。如果查询结果中包含了与主对象关联的其他对象,可以使用resultMap来映射出这些关联对象,方便进行对象的嵌套查询和处理。
-
可以提高程序性能。使用resultMap可以缓存映射规则,避免每次查询都需要重新定义映射规则的操作,从而提高程序的性能。
总之,如果需要处理一些复杂的查询结果或者需要将数据库查询结果映射到Java对象中,就可以使用resultMap。