文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 10:52

关注

本篇内容主要讲解“Mybatis resultMap标签继承、复用、嵌套的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis resultMap标签继承、复用、嵌套的方法”吧!

resultMap标签继承、复用、嵌套

记录演示 Mybatis 中 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<Member> members;    ...getter And setter...}
定义与表映射的 resultMap

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

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.BeanMapper">    <!-- Score实体类映射 -->    <resultMap id="scoreMap" type="com.example.Score">        <id column="id" jdbcType="INTEGER" property="id" />        <result column="math" jdbcType="FLOAT" property="math" />        <result column="history" jdbcType="FLOAT" property="history" />    </resultMap>    <!-- Member实体类映射 -->    <resultMap id="memberMap" type="com.example.Member">        <id column="id" jdbcType="INTEGER" property="id" />        <result column="name" jdbcType="VARCHAR" property="name" />    </resultMap>    <!-- Group实体类映射 -->    <resultMap id="groupMap" type="com.example.Group">        <id column="id" jdbcType="INTEGER" property="id" />        <result column="name" jdbcType="VARCHAR" property="groupName" />    </resultMap></mapper>

继承、复用、嵌套

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

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

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

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

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

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

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.DemoMapper">    <!-- extends: 继承 -->    <resultMap id="fullMemberMap" extends="com.example.BeanMapper.memberMap" type="com.example.Member">        <!-- association: 复用已存在的resultMap,单JavaBean属性时使用                        使用javaType属性指定JavaBean的类型                        跨文件引用需指定namespace -->        <!-- columnPrefix: 只从 score_ 开头的字段为当前resultMap取值 -->        <association  property="score" resultMap="com.example.BeanMapper.scoreMap" javaType="com.example.Score" columnPrefix="score_" />    </resultMap>        <resultMap id="fullGroupMap" extends="com.example.BeanMapper.groupMap" type="com.example.Group">        <!-- collection: 复用已存在的resultMap,JavaBean集合属性时使用                        使用ofType属性指定JavaBean的类型                        同文件引用无需指定namespace -->        <!-- columnPrefix: 只从 member_ 开头的字段为当前resultMap取值                        进入fullMemberMap内嵌套的scoreMap时前缀 member_ 会被去除,即 member_score_id 字段才能被scoreMap正确接收 -->        <collection property="members" ofType="com.example.Member" resultMap="fullMemberMap" columnPrefix="member_"/>    </resultMap>    <!-- 直接引用最终的resultMap,并根据columnPrefix属性设置的前缀为各个字段指定不同的别名 -->    <select id="selectGroupById" parameterType="java.lang.Integer" resultMap="fullGroupMap">        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}    </select></mapper>

使用resultmap需要注意的地方

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

到此,相信大家对“Mybatis resultMap标签继承、复用、嵌套的方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯