学习目标:
了解resultType的使用条件和基本使用
了解resultMap的使用条件基本使用
学习内容:
1. resultType的使用条件
resultType可以把查询结果封装到pojo类中,但必须pojo类的属性名和查询到的数据库表的字段名一致。
//pojo封装类
public class Brand {
// id 主键
private Integer id; //封装类属性名 id
// 品牌名称
private String brandName; //封装类属性名 brandName
// 企业名称
private String companyName; //封装类属性名 companyName
// 排序字段
private Integer ordered; //封装类属性名 ordered
// 描述信息
private String description; //封装类属性名 description
// 状态:0:禁用 1:启用
private Integer status;
这里id,ordered,description,status都是同名,可以使用resultType进行映射封装属性信息。
其他的brand_name,company_name明显和brandName,companyName不同,需要使用resultMap来映射封装属性信息,这些我们会在后面讲到。
(意思就是封装类的属性名和数据库表列名要一模一样,这样reslutType才能识别匹配(映射)相应的属性信息进行封装)
<!--resultType-->
<!--select id这里填入的是接口方法名,通过映射执行下面的sql语句 -->
<select id="selectAll" resultType="com.itheima.pojo.Brand" >
<!--resultType 这里填入的是封装类及其包名,最后会通过映射将sql列信息封装进入该封装类对象-->
select
*
from tb_brand;
</select>
如果sql查询到的字段与pojo的属性名不一致
(导致的结果就是名字不一致的属性未被识别出来,这样就会造成很常见的一种错误:未被识别的属性的sql信息没有存入封装对象中,查询时,封装对象的这些属性值为null。原因就是sql字段和属性名未匹配而无法识别并存入。
封装结果如下(部分null就是使用resultType未成功映射)
[Brand{id=1, brandName='null', companyName='null', ordered=5, description='好吃不上火', status=0}, Brand{id=2, brandName='null', companyName='null', ordered=100, description='华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', status=1}, Brand{id=3, brandName='null', companyName='null', ordered=50, description='are you ok', status=1}]
Process finished with exit code 0
2. resultMap的使用条件
如果存在brand_name,company_name这样sql列名明显和brandName,companyName这样的封装类对象属性名不同的,则需要使用resultMap将字段名和属性名对应起来,进行封装,将结果映射到pojo类对象中。
2.1 resultMap的使用方法
*1 先在xml文件中写入相应sql语句
<!--resultMap-->
<select id="selectAll" resultMap="brandResultMap" >
<!--resultMap="id片段名"-->
select
*
from tb_brand;
</select>
//相应的查询语句
*2 然后在xml文件中配置resultMap标签,映射不同的字段和属性名
<resultMap id="brandResultMap" type="com.itheima.pojo.Brand">
<resultMap type="order" id="orderResultMap">
<!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id -->
<!-- property:主键在pojo中的属性名 -->
<!-- column:主键在数据库中的列名 -->
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>
注意:属性名和列明如果相同则不用写上去,底层已经完成好了。在这里我们发现resultMap比Type功能更加全面,更加方便使用,所有更推荐大家统一使用resultMap进行结果映射封装
学习产出:
1.掌握了查询sql进行封装对象信息的一些基本方法。
2了解resultType的使用条件和基本使用
3了解resultMap的使用条件基本使用