mybatis-puls resultMap数据映射
resultType
resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。
如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中!
resultMap
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
- 数据库字段:user_id,
- 实体类字段:userId
- 需要手动配置设置resultMap
Mapper中基本查询语句
<!-- 查询所有的订单数据 --> <!-- resultMap:填入配置的resultMap标签的id值 --> <select id="queryOrderAll" resultMap="orderResultMap"> SELECT id, user_id, number, createtime, note FROM `order` </select>
resultMap中字段映射
<!-- resultMap最终还是要将结果映射到pojo上,type就是指定映射到哪一个pojo --> <!-- id:设置ResultMap的id --> <resultMap type="order" id="orderResultMap"> <!-- 定义主键 ,非常重要。如果是多个字段,则定义多个id --> <!-- property:主键在pojo中的属性名 --> <!-- column:主键在数据库中的列名 --> <id property="id" column="id" /> <!-- 定义普通属性 --> <result property="userId" column="user_id" /> <result property="number" column="number" /> <result property="createtime" column="createtime" /> <result property="note" column="note" /> </resultMap>
Mybatis ResultMap结果集映射
当我们的POJO中的字段与数据库中的字段不一致时,在利用resultType进行结果集映射时,不一致的字段将会被赋值为null,这时我们可以利用ResultMap映射进行赋值
POJO
@Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String password; }
数据库字段
ResultType
<select id="getUserList" resultType="User"> select * from user; </select>
可以出数据库中是pwd,而pojo中是password,这样利用resultType是无法映射的,password查出来的结果为null
ResultMap
<select id="getUserList" resultMap="UserMap"> select * from user; </select> <resultMap id="UserMap" type="User"> <result column="id" property="id"/> <result column="name" property="name"/> <result column="pwd" property="password"/> </resultMap>
我们用resultMap替换resultType
UserMap与下面resultMap里的id属性的值保持一致即可
type为返回值类型,这里我之所以是User是因为我起了别名,如果没有起别名要写出完整的路径
在resultMap中,column代表数据库中的列,也就是数据库里的字段,property为数据库中的字段映射的结果,这里我们与pojo保持一致即可,数据库中的pwd被映射为password,pojo里的password也就能赋值成功了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。
- 本文固定链接: https://zxbcw.cn/post/221301/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)