前言
实际开发中,我们从数据库查询返回得到的数据可能需要二次封装成前端想要处理的数据,而不只是简单的返回 pojo
/entity
类。
例如,有如下一张简单的表:分类表
字段 | 含义 |
---|---|
id | 分类 id |
name | 分类名称 |
parent_id | 父类 id,第一级分类 parent_id 为 0 |
如表格所示,这张表用来存储大学专业分类数据、或者商品分类、图书分类等,这些分类往往是多级结构的。
例如,我们可能需要这样的数据展示:
一级分类 | 二级分类 |
---|---|
经济学 | 经济学类 财政学类 金融学类 |
法学 | 法学类 政治学类 社会学类 |
理学 | 数学类 物理学类 化学类 天文学类 |
工学 | 力学类 机械类 |
我们可以在查询到数据后,直接在 pojo
类上进行封装成前端所需要的数据结构返回,但是我们可以利用 MyBatis
帮我们完成封装过程,提高开发效率。
代码实现
我们只需使用 MyBatis 提供的 resultMap
标签指明查询数据的数据结构即可。
关于 resultMap
标签,它的属性有:
id
:唯一标识自己,与select
标签中的resultMap
属性绑定type
: 指明数据封装使用的类
它的子标签有:
id
:表示数据库中的主键result
:基本数据类型所对应的列collection
:映射对象集合association
:映射单个对象discriminator
:条件分支,根据结果决定映射
详细可以查看说明:XML 映射器_MyBatis中文网
这里使用上文讲述的大学专业分类展示
数据准备
分类表结构category
以及数据
CREATE TABLE `category` (
`id` int(11) NOT NULL COMMENT 'id 主键',
`parent_id` int(11) DEFAULT NULL COMMENT '上级 Id, 一级分类的 parent_id 为 0',
`name` varchar(20) DEFAULT NULL COMMENT '分类名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `category` VALUES (1, 0, '经济学');
INSERT INTO `category` VALUES (2, 0, '法学');
INSERT INTO `category` VALUES (3, 0, '理学');
INSERT INTO `category` VALUES (4, 0, '工学');
INSERT INTO `category` VALUES (11,