MyBatis结果集一对多映射
MyBatis结果集一对多映射
需求:重画二维码配置类,根据sizeCode将查询出来的imageCode分组。
DROP TABLE IF EXISTS `size_code`;
CREATE TABLE `size_code` (
`sizeCode` int(11) DEFAULT NULL,
`sizeCodeName` varchar(255) DEFAULT NULL,
`imageCode` int(11) DEFAULT NULL,
`imageCodeName` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- 这里特意将sizeCode相同时,sizeCodeName为了测试设置了不同的值。(本来应该是一致的)
-- ----------------------------
INSERT INTO `size_code` VALUES ('1', '15X19', '1', '红色');
INSERT INTO `size_code` VALUES ('1', '15X18', '2', '橙色');
INSERT INTO `size_code` VALUES ('2', '12X12', '1', '古风');
<?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.mozq.mb.mb01.mapper.SizeCodeMapper">
<select id="find" resultType="com.mozq.mb.mb01.pojo.SizeCode">
select * from size_code
</select>
<!--没有id属性时,result的所有列,(sizeCode,sizeCodeName)的值都不同会创建一个对象,值相同的则将结果封装到imageCodeList-->
<resultMap id="SizeCodeImageCodeMap" type="com.mozq.mb.mb01.pojo.SizeCode">
<result column="sizeCode" property="sizeCode" />
<result column="sizeCodeName" property="sizeCodeName" />
<collection property="imageCodeList" ofType="com.mozq.mb.mb01.pojo.ImageCode">
<result column="imageCode" property="imageCode" />
<result column="imageCodeName" property="imageCodeName" />
</collection>
</resultMap>
<select id="findDetail" resultMap="SizeCodeImageCodeMap">
select * from size_code
</select>
<!--有id属性时,id属性不同,则创建一个单独的对象,其余属性取的时查询出来第1条记录的属性,id相同的记录都封装到imageCodeList -->
<resultMap id="SizeCodeImageCodeMap2" type="com.mozq.mb.mb01.pojo.SizeCode">
<id column="sizeCode" property="sizeCode" />
<result column="sizeCodeName" property="sizeCodeName" />
<collection property="imageCodeList" ofType="com.mozq.mb.mb01.pojo.ImageCode">
<result column="imageCode" property="imageCode" />
<result column="imageCodeName" property="imageCodeName" />
</collection>
</resultMap>
<select id="findDetail2" resultMap="SizeCodeImageCodeMap2">
select * from size_code
</select>
</mapper>
package com.mozq.mb.mb01.mapper;
import com.alibaba.fastjson.JSONObject;
import com.mozq.mb.mb01.pojo.SizeCode;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class SizeCodeMapperTest {
@Autowired
private SizeCodeMapper sizeCodeMapper;
@Test
public void findDetail(){
List<SizeCode> sizeCodes = sizeCodeMapper.findDetail();
System.out.println(JSONObject.toJSONString(sizeCodes));
}
@Test
public void findDetail2(){
List<SizeCode> sizeCodes = sizeCodeMapper.findDetail2();
System.out.println(JSONObject.toJSONString(sizeCodes));
}
@Test
public void find(){
List<SizeCode> sizeCodes = sizeCodeMapper.find();
System.out.println(sizeCodes);
}
}
package com.mozq.mb.mb01.mapper;
import com.mozq.mb.mb01.pojo.SizeCode;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface SizeCodeMapper {
List<SizeCode> find();
List<SizeCode> findDetail();
List<SizeCode> findDetail2();
}
[
{
"imageCodeList":[
{
"imageCode":1,
"imageCodeName":"红色"
}
],
"sizeCode":1,
"sizeCodeName":"15X19"
},
{
"imageCodeList":[
{
"imageCode":2,
"imageCodeName":"橙色"
}
],
"sizeCode":1,
"sizeCodeName":"15X18"
},
{
"imageCodeList":[
{
"imageCode":1,
"imageCodeName":"古风"
}
],
"sizeCode":2,
"sizeCodeName":"12X12"
}
]
[
{
"imageCodeList":[
{
"imageCode":1,
"imageCodeName":"红色"
},
{
"imageCode":2,
"imageCodeName":"橙色"
}
],
"sizeCode":1,
"sizeCodeName":"15X19"
},
{
"imageCodeList":[
{
"imageCode":1,
"imageCodeName":"古风"
}
],
"sizeCode":2,
"sizeCodeName":"12X12"
}
]
MyBatis结果集一对多映射的更多相关文章
- Spring Boot MyBatis 数据库集群访问实现
Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...
- spring + mybatis合集
一.Spring 1. IoC 什么是IoC: 跟我一起学Spring 3(4)–深入理解IoC(控制反转)和DI(依赖注入) Spring中IoC的优点与缺点 spring Ioc 实践 IoC如何 ...
- MyBatis高级查询 一对多映射
数据库表在一对一映射中. 在数据库sys_user_role中新增一条记录 一个用户可以有多个角色.查询出所有用户和所对应的角色. 1.collection集合的嵌套结果映射 <!-- SysU ...
- Mybatis结果集ResultMap映射
基本使用: 解决属性名和数据库字段名不一致的问题 <resultMap id="user" type="com.guan.bean.UserBean"&g ...
- springMVC+spring+MyBatis(SSM)的简单配置
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中: Spring是一 ...
- MyBatis 查询示例
环境搭建 数据库schema 1)datasource.xml配置 <?xml version="1.0" encoding="UTF-8"?> & ...
- mybatis 3.x源码深度解析与最佳实践(最完整原创)
mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...
- Mybatis学习---Mybatis分页插件 - PageHelper
1. Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,S ...
- idea的ssm搭建(复制)
1.工具/原料 • apache-tomcat-7.0.63 http://download.csdn.net/detail/lxfhahaha/9778163 • apache-maven-3.3. ...
随机推荐
- YoungLots Team - Record a software installation
一.写在最前 本文记录安装或配置以下软件或环境的过程:VScode,Xampp,navicat,PHP,html,CSS,SQL,JavaScript. 作者使用的环境:浏览器:Google Chro ...
- Stream系列(十二) PartitioningBy方法使用
分割列表 视频讲解: https://www.bilibili.com/video/av78106120/ EmployeeTestCase.java package com.example.demo ...
- [ch04-03] 用神经网络解决线性回归问题
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.3 神经网络法 在梯度下降法中,我们简单讲述了一下神 ...
- Netty源码分析之ChannelPipeline(二)—ChannelHandler的添加与删除
上篇文章中,我们对Netty中ChannelPipeline的构造与初始化进行了分析与总结,本篇文章我们将对ChannelHandler的添加与删除操作进行具体的的代码分析: 一.ChannelHan ...
- LeetCode 5282. 转化为全零矩阵的最少反转次数
地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...
- react-starter-projects
react-starter-projects These are repositories that you copy and modify to create your own React app. ...
- netty的调优-及-献上写过注释的源码工程
Netty能干什么? Http服务器 使用Netty可以编写一个 Http服务器, 就像tomcat那样,能接受用户发送的http请求, , 只不过没有实现Servelt规范, 但是它也能解析携带的参 ...
- [TimLinux] JavaScript 获取设置在CSS类中的属性值
1. 设置属性值 // 常用方式 var myEl = document.getElementById('idMyEl'); myEl.style.display = "none" ...
- 洛谷 P2254 [NOI2005]瑰丽华尔兹(单调栈优化DP)
题目描述 不妨认为舞厅是一个N行M列的矩阵,矩阵中的某些方格上堆放了一些家具,其他的则是空地.钢琴可以在空地上滑动,但不能撞上家具或滑出舞厅,否则会损坏钢琴和家具,引来难缠的船长.每个时刻,钢琴都会随 ...
- LCT(Link Cut Tree)总结
概念.性质简述 首先介绍一下链剖分的概念链剖分,是指一类对树的边进行轻重划分的操作,这样做的目的是为了减少某些链上的修改.查询等操作的复杂度.目前总共有三类:重链剖分,实链剖分和并不常见的长链剖分. ...