文章目录

  • 实体对象
  • Mapper 文件配置
  • 测试用例
  • 接口调用响应
  • 数据库数据
  • 数据库表结构

实体对象

@Data
public class SysUser {private Long id;private String userName;/*** 1: 男* 2: 女* */private Integer sex;/*** 1: 小学* 2: 初中* 3: 高中* 4: 大学* 5: 研究生* 6: 博士* 7: 博士后* */private Integer education;private String address;private String phone;/*** 根据性别不同, 查询的表不同, mapper sql 映射文件中使用的是 discriminator* */private List<Pairs> pairs;/*** 学历为 高中 的才有, 需要使用 discriminator(鉴别器), 目前 mapper sql 映射文件中使用的是 association* */private List<SysCourse> courses;/*** 0: 启用* 1: 禁用* 9: 删除* */private Integer status;
}
@Data
public class SysCourse {private Long id;private String courseName;
}
@Data
public class Pairs {private Long id;private String name;private String value;
}

Mapper 文件配置

<sql id="SysUserColumns">${prefix}.id, ${prefix}.user_name, ${prefix}.sex, ${prefix}.education, ${prefix}.address, ${prefix}.phone, ${prefix}.status
</sql><resultMap id="UsersMap" type="com.answer.ai.entity.SysUser" autoMapping="true"><id column="id" property="id" jdbcType="BIGINT" /><!-- 只有 education=3 才会进行关联查询用户对应的课程名称, 有条件限制(education=3)<discriminator javaType="int" column="education"><case value="3"><association property="courses" select="findCourse" column="{userId=id, status=course_status}" /></case></discriminator>--><!-- 该方式会关联出用户对应的课程名称, 没有条件限制 --><association property="courses" select="findCourse" column="{userId=id, status=course_status}" /><!-- 根据性别的不同找到性别对应的 用户具体信息 --><discriminator javaType="int" column="sex"><case value="1"><association property="pairs" select="findMensInfo" column="id" /></case><case value="2"><association property="pairs" select="findWomensInfo" column="id" /></case></discriminator>
</resultMap><select id="findUsers" resultMap="UsersMap">SELECT<include refid="SysUserColumns"><property name="prefix" value="su" /></include> , 1 AS course_statusFROM ai_sys_user suWHERE su.status = 1
</select><select id="findMensInfo" resultType="com.answer.ai.entity.Pairs">SELECT id, name, valueFROM ai_sys_menWHERE user_id = #{userId}
</select><select id="findWomensInfo" resultType="com.answer.ai.entity.Pairs">SELECT id, name, valueFROM ai_sys_womenWHERE user_id = #{userId}
</select><select id="findCourse" resultType="com.answer.ai.entity.SysCourse">SELECT id, course_nameFROM ai_sys_courseWHERE user_id = #{userId} AND status = #{status}
</select>

注意: 一个 resultMap 标签中无法使用两个 discriminator(鉴定器) 标签

测试用例

@Test
public void doJob() {List<SysUser> users = userService.findUsers();System.out.println();users.forEach(e -> System.out.println(JSON.toJSONString(e) + "\n"));System.out.println();
}

程序运行结果

{"address":"pt","courses":[{"courseName":"数学","id":2},{"courseName":"物理","id":4},{"courseName":"化学","id":5},{"courseName":"生物","id":6}],"education":3,"id":1,"pairs":[{"id":1,"name":"学历","value":"本科"},{"id":2,"name":"职业","value":"程序猿"},{"id":3,"name":"居住地","value":"深圳"}],"phone":"135****4327","sex":1,"status":1,"userName":"answer"}{"address":"as","courses":[{"courseName":"高数","id":13}],"education":5,"id":2,"pairs":[{"id":4,"name":"身高","value":"175"},{"id":5,"name":"爱好","value":"篮球"}],"phone":"135****2011","sex":1,"status":1,"userName":"zhangsan"}{"address":"st","courses":[{"courseName":"语文","id":7},{"courseName":"英语","id":9},{"courseName":"历史","id":10},{"courseName":"地理","id":11},{"courseName":"政治","id":12}],"education":3,"id":3,"pairs":[{"id":1,"name":"身高","value":"170"},{"id":2,"name":"体重","value":"45"}],"phone":"136****5142","sex":2,"status":1,"userName":"linxue"}

接口调用响应

{"code": 10000,"desc": "success","data": [{"id": 1,"userName": "answer","sex": 1,"education": 3,"address": "pt","phone": "135****4327","pairs": [{"id": 1,"name": "学历","value": "本科"},{"id": 2,"name": "职业","value": "程序猿"},{"id": 3,"name": "居住地","value": "深圳"}],"courses": [{"id": 2,"courseName": "数学"},{"id": 4,"courseName": "物理"},{"id": 5,"courseName": "化学"},{"id": 6,"courseName": "生物"}],"status": 1},{"id": 2,"userName": "zhangsan","sex": 1,"education": 5,"address": "as","phone": "135****2011","pairs": [{"id": 4,"name": "身高","value": "175"},{"id": 5,"name": "爱好","value": "篮球"}],"courses": [{"id": 13,"courseName": "高数"}],"status": 1},{"id": 3,"userName": "linxue","sex": 2,"education": 3,"address": "st","phone": "136****5142","pairs": [{"id": 1,"name": "身高","value": "170"},{"id": 2,"name": "体重","value": "45"}],"courses": [{"id": 7,"courseName": "语文"},{"id": 9,"courseName": "英语"},{"id": 10,"courseName": "历史"},{"id": 11,"courseName": "地理"},{"id": 12,"courseName": "政治"}],"status": 1}]
}

数据库数据

mysql> select * from ai_sys_user;
+----+-----------+-----+-----------+---------+-------------+--------+
| id | user_name | sex | education | address | phone       | status |
+----+-----------+-----+-----------+---------+-------------+--------+
|  1 | answer    |   1 |         3 | pt      | 135****4327 |      1 |
|  2 | zhangsan  |   1 |         5 | as      | 135****2011 |      1 |
|  3 | linxue    |   2 |         3 | st      | 136****5142 |      1 |
+----+-----------+-----+-----------+---------+-------------+--------+mysql> select * from ai_sys_men;
+----+---------+--------+--------+
| id | user_id | name   | value  |
+----+---------+--------+--------+
|  1 |       1 | 学历   | 本科   |
|  2 |       1 | 职业   | 程序猿 |
|  3 |       1 | 居住地 | 深圳   |
|  4 |       2 | 身高   | 175    |
|  5 |       2 | 爱好   | 篮球   |
+----+---------+--------+--------+mysql> select * from ai_sys_women;
+----+---------+------+-------+
| id | user_id | name | value |
+----+---------+------+-------+
|  1 |       3 | 身高 | 170   |
|  2 |       3 | 体重 | 45    |
+----+---------+------+-------+mysql> select * from ai_sys_course;
+----+-------------+---------+--------+
| id | course_name | user_id | status |
+----+-------------+---------+--------+
|  1 | 语文        |       1 |      0 |
|  2 | 数学        |       1 |      1 |
|  3 | 英语        |       1 |      0 |
|  4 | 物理        |       1 |      1 |
|  5 | 化学        |       1 |      1 |
|  6 | 生物        |       1 |      1 |
|  7 | 语文        |       3 |      1 |
|  8 | 数学        |       3 |      0 |
|  9 | 英语        |       3 |      1 |
| 10 | 历史        |       3 |      1 |
| 11 | 地理        |       3 |      1 |
| 12 | 政治        |       3 |      1 |
| 13 | 高数        |       2 |      1 |
+----+-------------+---------+--------+

数据库表结构

/*
Navicat MySQL Data TransferSource Server         : localhost
Source Server Version : 50722
Source Host           : 127.0.0.1:3306
Source Database       : dc_config_dbTarget Server Type    : MYSQL
Target Server Version : 50722
File Encoding         : 65001Date: 2019-07-05 17:11:18
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for `ai_sys_course`
-- ----------------------------
DROP TABLE IF EXISTS `ai_sys_course`;
CREATE TABLE `ai_sys_course` (`id` bigint(18) NOT NULL AUTO_INCREMENT,`course_name` varchar(25) NOT NULL,`user_id` bigint(18) NOT NULL,`status` tinyint(1) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of ai_sys_course
-- ----------------------------
INSERT INTO `ai_sys_course` VALUES ('1', '语文', '1', '0');
INSERT INTO `ai_sys_course` VALUES ('2', '数学', '1', '1');
INSERT INTO `ai_sys_course` VALUES ('3', '英语', '1', '0');
INSERT INTO `ai_sys_course` VALUES ('4', '物理', '1', '1');
INSERT INTO `ai_sys_course` VALUES ('5', '化学', '1', '1');
INSERT INTO `ai_sys_course` VALUES ('6', '生物', '1', '1');
INSERT INTO `ai_sys_course` VALUES ('7', '语文', '3', '1');
INSERT INTO `ai_sys_course` VALUES ('8', '数学', '3', '0');
INSERT INTO `ai_sys_course` VALUES ('9', '英语', '3', '1');
INSERT INTO `ai_sys_course` VALUES ('10', '历史', '3', '1');
INSERT INTO `ai_sys_course` VALUES ('11', '地理', '3', '1');
INSERT INTO `ai_sys_course` VALUES ('12', '政治', '3', '1');
INSERT INTO `ai_sys_course` VALUES ('13', '高数', '2', '1');-- ----------------------------
-- Table structure for `ai_sys_men`
-- ----------------------------
DROP TABLE IF EXISTS `ai_sys_men`;
CREATE TABLE `ai_sys_men` (`id` bigint(18) NOT NULL AUTO_INCREMENT,`user_id` bigint(18) NOT NULL,`name` varchar(25) DEFAULT NULL,`value` varchar(25) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of ai_sys_men
-- ----------------------------
INSERT INTO `ai_sys_men` VALUES ('1', '1', '学历', '本科');
INSERT INTO `ai_sys_men` VALUES ('2', '1', '职业', '程序猿');
INSERT INTO `ai_sys_men` VALUES ('3', '1', '居住地', '深圳');
INSERT INTO `ai_sys_men` VALUES ('4', '2', '身高', '175');
INSERT INTO `ai_sys_men` VALUES ('5', '2', '爱好', '篮球');-- ----------------------------
-- Table structure for `ai_sys_user`
-- ----------------------------
DROP TABLE IF EXISTS `ai_sys_user`;
CREATE TABLE `ai_sys_user` (`id` bigint(18) NOT NULL AUTO_INCREMENT,`user_name` varchar(55) NOT NULL,`sex` tinyint(1) NOT NULL COMMENT '1: 男\r\n2: 女',`education` tinyint(4) DEFAULT NULL COMMENT '1: 小学\r\n2: 初中\r\n3: 高中\r\n4: 大学\r\n5: 研究生\r\n6: 博士\r\n7: 博士后',`address` varchar(55) DEFAULT NULL,`phone` varchar(20) DEFAULT NULL,`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0: 启用\r\n1: 禁用\r\n9: 删除',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of ai_sys_user
-- ----------------------------
INSERT INTO `ai_sys_user` VALUES ('1', 'answer', '1', '3', 'pt', '135****4327', '1');
INSERT INTO `ai_sys_user` VALUES ('2', 'zhangsan', '1', '5', 'as', '135****2011', '1');
INSERT INTO `ai_sys_user` VALUES ('3', 'linxue', '2', '3', 'st', '136****5142', '1');-- ----------------------------
-- Table structure for `ai_sys_women`
-- ----------------------------
DROP TABLE IF EXISTS `ai_sys_women`;
CREATE TABLE `ai_sys_women` (`id` bigint(18) NOT NULL AUTO_INCREMENT,`user_id` bigint(18) NOT NULL,`name` varchar(25) DEFAULT NULL,`value` varchar(25) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of ai_sys_women
-- ----------------------------
INSERT INTO `ai_sys_women` VALUES ('1', '3', '身高', '170');
INSERT INTO `ai_sys_women` VALUES ('2', '3', '体重', '45');

Mybatis resultMap discriminator(鉴定器) 实操相关推荐

  1. mybatis学习(54):鉴定器

    数据库表 数据库叫blog_gp1701 author表 数据 blog表 数据 comment表 数据 post表 数据 vechcle 目录结构 jar包导入 先给对应的jar包导入 建立一个ju ...

  2. mybats实操-前期入门写法分析,SqlSessionFactory 获取SqlSession, 系统核心配置文件 mybatis-config.xml,SQL映射XML文件,MyBatis缓存

    标题 偏向这一块的配置 打个预防针 尽量别用中文路径 尤其配置文件 1.导入数据库(smbms_db.sql) 下载maven并且配置环境变量 去IDEA配置好maven 以后maven项目直接用 m ...

  3. SpringBoot集成Mybatis项目实操

    本文为<从零打造项目>系列第三篇文章,首发于个人网站. <从零打造项目>系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 ...

  4. 3-8 基于SpringBoot连接数据库与配置MyBatis实操 创建表sql

    11                    13-8 基于SpringBoot连接数据库与配置MyBatis实操 springSecurity提供了     现成的基于内存管理的类 shiro则必须自 ...

  5. 【李刚-21天通关Python-27】之 案例实操:函数装饰器应用

    [李刚-21天通关Python-27]之 案例实操:函数装饰器应用 一.函数装饰器的广泛应用 @staticmethod 和 @classmethod 的本质就是函数装饰器 staticmethod ...

  6. CRM项目开发【实操篇----市场活动模块】

    CRM项目开发[实操篇----市场活动模块] 前言:本项目来源于B站动力节点视频,CRM项目开发 使用的后端技术栈主要是SSM框架,不涉及boot,老师讲的非常细致,推荐 关于流程图部分,由于是老师创 ...

  7. 2021年氯化工艺实操考试视频及氯化工艺考试试题

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:氯化工艺实操考试视频是安全生产模拟考试一点通生成的,氯化工艺证模拟考试题库是根据氯化工艺最新版教材汇编出氯化工艺仿真模拟考试.20 ...

  8. 2021年中式烹调师(中级)报名考试及中式烹调师(中级)实操考试视频

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:中式烹调师(中级)报名考试考前必练!安全生产模拟考试一点通每个月更新中式烹调师(中级)实操考试视频题目及答案!多做几遍,其实通过中 ...

  9. 2021年广东省安全员C证第三批(专职安全生产管理人员)实操考试视频及广东省安全员C证第三批(专职安全生产管理人员)作业模拟考试

    题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:广东省安全员C证第三批(专职安全生产管理人员)实操考试视频是安全生产模拟考试一点通生成的,广东省安全员C证第三批(专职安全生产管理 ...

最新文章

  1. 网络计算机的广域性有什么,为什么计算机网络有局域网?
  2. 正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询
  3. 中国煤炭行业十四五投资战略与供需形势分析报告2022版
  4. 【Beta阶段】M2事后分析
  5. spring中的spel表达式语言
  6. 传统登录实现方式问题思考
  7. SAP SolMan 严重漏洞的自动化 exploit 代码遭公开
  8. 理解 CMOS IMAGE Sensor
  9. 利用ArcMap渲染DEM的两种方式
  10. 极光尔沃3D打印《英雄联盟》精美手板
  11. web前端开发基础入门教程之HTML5 浏览器支持
  12. c语言找最大素数,C语言实现寻找大素数
  13. 论文解读 | 百度 ERNIE: Enhanced Representation through Knowledge Integration
  14. iphone怎么找本地音乐_为什么iPhone会发出蜂鸣声或振动? 这是找出方法
  15. Mac微信小助手(免认证登录、多开、防撤回)---强烈推荐
  16. cp 命令 提示cp: 略过目录 “/root/temp/sk”
  17. 基于在线学习行为的评价模型的设计与实现
  18. LeetCode 热题 HOT — 字母异位词分组
  19. BZOJ3387栅栏(另一种解法:spfa)
  20. python 绘制 3D 曲面

热门文章

  1. 做毕业设计,前端部分你需要掌握的6个核心技能
  2. 裘千尺裘千仞裘千丈与杨过篇--责任链模式C++实现
  3. CMake——cmake_minimum_required
  4. 基于C语言实现(WinForm)FIFA球队管理系统【100010337】
  5. 返利网java面试_腾讯系统测试面试经验
  6. pandas中的pct_change的用法简介(二)
  7. 对Verilog 初学者比较有用的整理
  8. python 豆瓣爬虫:自动下载周星驰图片
  9. dockerfile自制Linux镜像,使用dockerfile基于centos构建python3镜像
  10. SQL Server中的连接查询