Mybatis resultMap标签继承、复用、嵌套方式

网友投稿 421 2022-08-22


Mybatis resultMap标签继承、复用、嵌套方式

目录resultMap标签继承、复用、嵌套定义表与实体类表实体类定义与表映射的resultMap继承、复用、嵌套使用resultMap需要注意的地方

resultMap标签继承、复用、嵌套

记录演示 Mybatis 中 resultMap 标签继承、复用(包括跨文件)以及多层嵌套的使用方法,

继承: 继承已存在的 resultMap 标签进行扩展复用: 跨mapper文件引用现存的 resultMap 标签嵌套: 多层嵌套的javaBean与 resultMap 映射方法

定义表与实体类

创建三个表 group member score

score 与 member 一对一,通过 score.id 关联

group 与 member 一对多,通过 group.id 关联

create table `score` (

`id` int comment '主键',

`math` float comment '数学成绩',

`history` float comment '历史成绩',

primary key (`id`)

)

create table `member` (

`id` int comment '主键',

`name` varchar comment '姓名',

`group_id` int comment '所属组group表id',

`score_id` int comment '成绩Score表id',

primary key (`id`)

)

create table `group` (

`id` int comment '主键',

`name` varchar comment '组名',

primary key (`id`)

)

实体类

创建三个实体类 Group Member Score

Score 类的对象是 Member 类的成员变量

Member 类的对象集合是 Group 类的成员变量

/** 成绩类 */

public class Score {

private Integer id;

/** 数学成绩 */

private Float math;

/** 历史成绩 */

private Float hitory;

...getter And setter...

}

/** 成员类 */

public class Member {

private Integer id;

/** 姓名 */

private String name;

/** 分数对象 */

private Score score;

...getter And setter...

}

/** 组类 */

public class Group {

private Integer id;

/** 组名 */

private String groupName;

/** 成员 */

private List members;

...getter And settehttp://r...

}

定义与表映射的 resultMap

在 BeanMapper.xml 定义最基本的与数据库表字段映射的 resultMap 标签

继承、复用、嵌套

创建 DemoMapper.xml,演示标签的继承、复用、嵌套

复用现存标签时若位于相同mapper文件可直接使用 resultMap 的 id 属性引用,跨文件时需要指定 namespace 属性才可正常引用

extends: 继承,可继承其他 resultMap 并加以扩展association: 复用现存的 resultMap,适用于对应的属性为单JavaBean时,使用 javaType 指定Java类型collection: 复用现存的 resultMap,适用于对应的属性为JavaBean集合时,使用 ofType 指定Java类型columnPrefix: 只将该属性指定前缀的属性赋值给当前 resultMap,存在多层嵌套时每进入一层就会将本层前缀截取掉。

如下面的mapper文件中,外层的 fullMemberMap 前缀为 member_,经本次筛选 member_score_id -> score_id,

内层的 scoreMap 前缀为 score_,经本次筛选 score_id -> id,最终被赋值给 Score.id

所以只有形如 member_score_id 的字段才会最终进入 scoreMap 的取值范围中

若是不复用只是单纯嵌套,则可以直接将三个类写在一个 resultMap 标签内实现

select g.id, g.name,

m.id member_id, m.name member_name,

s.id member_score_id, s.math member_score_math, s.history member_score_history

from `group` g

left join `member` m on m.group_id = g.id

left join `score` s on s.id = m.score_id

where g.id = #{id,jdbcType=INTEGER}

使用resultMap需要注意的地方

今天主要还是根据需求在进行sql的编写 ,在mybatis里面进行复查和复用的时候一定要去看所对应的有没有这个类 ,今天弄了几个dto,还有时间戳的转换,java里面的时间戳是以毫秒来进行计算的。

所以说在专用mysql的时候要注意


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在Mybatis中association标签多层嵌套的问题
下一篇:java分布式面试CAP分别代表含义分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~