Mybatis resultMap用法之系统数据字典实现

2024-05-26 19:38

本文主要是介绍Mybatis resultMap用法之系统数据字典实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实体对象

字典实体

@Data
@Alias("Dict")
public class SysDict {// 字典代码private String dictCode;// 字典名称private String dictName;// 0系统 9解析private Integer dictType;// 字典项列表private List<SysDictItem> dictItems;
}

字典项实体

@Data
@Alias("DictItem")
public class SysDictItem {// 字典子项代码private String dictItemCode;// 字典子项展示值private String dictItemValue;// 字典子项详细描述private String dictItemDesc;// 自定义json字符串属性private Map<String, Object> itemAttrs;// 将数据库里json字符串转为map对象public void setItemAttrs(String itemAttrs) {if (!StringUtils.isEmpty(itemAttrs)) {// json字符串转mapthis.itemAttrs = MapperUtils.jsonToMap(itemAttrs);}}
}

 

Mapper文件

<?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.jaemon.app.mapper.SysDictMapper"><resultMap id="DictResultMap" type="Dict"><result column="dict_code" property="dictCode" jdbcType="VARCHAR" /><result column="dict_name" property="dictName" jdbcType="VARCHAR" /><collection property="dictItems" ofType="DictItem" select="queryDictById" column="{dictId=id}" /></resultMap><select id="queryAllDict" resultMap="DictResultMap">select sd.id, sd.dict_code, sd.dict_namefrom sys_dict sdwhere sd.dict_status = 1</select><select id="queryDictById" resultType="DictItem">select sdi.dict_item_code, sdi.dict_item_value, sdi.dict_item_desc, sdi.item_attrsfrom sys_dict_item sdiwhere sdi.item_status = 1 and sdi.dict_id = #{dictId}</select>
</mapper>

resultMap标签具体属性含义解释参见: Mybatis resultMap用法之系统菜单实现

输出案例

{"code": 0,"msg": "成功","result": [{"dictCode": "houseStructure","dictName": "房屋结构","dictType": null,"dictItems": [{"dictItemCode": "1","dictItemValue": "钢筋混凝土结构","dictItemDesc": "钢筋混凝土结构","itemAttrs": {"left": "(","right": ")"}},{"dictItemCode": "2","dictItemValue": "砖混结构","dictItemDesc": "砖混结构","itemAttrs": null},{"dictItemCode": "3","dictItemValue": "砖木结构","dictItemDesc": "砖木结构","itemAttrs": null},{"dictItemCode": "4","dictItemValue": "简易结构","dictItemDesc": "简易结构","itemAttrs": null}]}]
}

 

数据库

表结构

DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict`  (`id` bigint(18) NOT NULL AUTO_INCREMENT COMMENT '字典ID',`dict_code` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典代码',`dict_name` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典名称',`dict_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '字典状态\r\n0: 停用\r\n1: 启用',`dict_type` tinyint(4) NULL DEFAULT 0 COMMENT '字典类型(0-系统字典 5-公共 9-解析字典)',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `idx`(`dict_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 70 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统-字典表' ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `sys_dict_item`;
CREATE TABLE `sys_dict_item`  (`id` bigint(18) NOT NULL AUTO_INCREMENT COMMENT '字典子项id',`dict_id` bigint(18) NOT NULL COMMENT '字典ID',`dict_item_code` varchar(55) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典子项代码',`dict_item_value` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典子项展示值',`dict_item_desc` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典子项描述',`item_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '字典子项状态\r\n0: 停用\r\n1: 启用',`item_attrs` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '自定义json字符串属性',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 283 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统-字典子项表' ROW_FORMAT = Dynamic;

表数据

INSERT INTO `sys_dict` VALUES (1, 'houseStructure', '房屋结构', 1, 5);INSERT INTO `sys_dict_item` VALUES (1, 1, '1', '钢筋混凝土结构', '钢筋混凝土结构', 1, '{\"left\": \"(\", \"right\": \")\"}');
INSERT INTO `sys_dict_item` VALUES (2, 1, '2', '砖混结构', '砖混结构', 1, NULL);
INSERT INTO `sys_dict_item` VALUES (3, 1, '3', '砖木结构', '砖木结构', 1, NULL);
INSERT INTO `sys_dict_item` VALUES (4, 1, '4', '简易结构', '简易结构', 1, NULL);

 

Mapper写法2

	<resultMap id="DictResultMap" type="Dict"><result column="dict_code" property="dictCode" jdbcType="VARCHAR"/><result column="dict_name" property="dictName" jdbcType="VARCHAR"/><result column="dict_type" property="dictType" jdbcType="TINYINT"/><collection property="dictItems" resultMap="DictItemsMap"/></resultMap><resultMap id="DictItemsMap" type="DictItem"><result column="dict_item_code" property="dictItemCode" jdbcType="VARCHAR"/><result column="dict_item_value" property="dictItemValue" jdbcType="VARCHAR"/><result column="dict_item_desc" property="dictItemDesc" jdbcType="VARCHAR"/></resultMap><select id="findDicts" resultMap="DictResultMap">SELECTdd.dict_code, dd.dict_name, dd.dict_type,ddi.dict_item_code, ddi.dict_item_value, ddi.dict_item_descFROM sys_dict ddLEFT JOIN sys_dict_item ddi ON dd.id = ddi.dict_idWHERE dd.dict_status = 1 AND ddi.item_status = 1<if test="dictCode != null">AND dd.dict_code IN<foreach collection="dictCodes" item="item" index="index" open="(" separator="," close=")">#{item}</foreach></if>ORDER BY dd.id, ddi.id</select>

注意: 该方式由于用到一对多左连接, 所以不支持 sys_dict 级别的分页

这篇关于Mybatis resultMap用法之系统数据字典实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005404

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查