概述
描述:有一个商品类,一件商品对应多个图片,在数据库中分别有一个商品表和一个图片表,在显示商品详情的时候,需要查询改图片及其所对应的所有图片。
- 实体类中的关系
public class Product{
private Integer id;
private List<ProductImg> productImgs;
//省略其他属性...
}
public class ProductImg{
private Integer id;
private Integer productId;
//省略其他属性...
}
- 数据库中的相对应的表结构
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
... ... ...
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 79 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
CREATE TABLE `product_img` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NULL DEFAULT NULL COMMENT '商品id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 50 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
- mybatis 实现一对多查询
一对多使用<collection>标签
使用<resultMap>标签,该标签是Mybatis的结果集映射的配置标签
在select标签中写resultMap属性,其值为resultMap标签的id属性值
<?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="xx.xxx.xxx.ProductDao">
<!-- id 该封装规则的唯一标识,
type返回值的全限定类名或类型别名
autoMapping值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在`resultMap`内明确注明映射关系才会调用对应的setter方法。
-->
<resultMap type="xx.xxx.xxx.Product" id="productMap">
<id property="id" column="id"></id>
<result property="..." column="..."></result>
....
<!-- 配置product对象里面productImgs集合的映射
property对应的是Product中的List<ProductImg>集合的变量名
ofType对应数据返回的类型ProductImg
-->
<collection property="productImgs" ofType="xxx.xxx.xxx.ProductImg(全类名或者是别名)">
<!--property对应实体类的属性名称,column为数据库字段名-->
<id property="id" column="id"></id>
<result property="productId" column="product_id"></result>
... ... ...
</collection>
</resultMap>
<select id="getById" resultMap="productMap">
SELECT
*
FROM
product p left outer join product_img pi on p.id = pi.product_id
WHERE p.state = 1 AND
pi.state = 1 AND p.id = #{id}
</select>
</mapper>
- 映射结果
[
{
"id":58,
...
"productImgs":[
{
"id":16,
"productId":58,
...
},
{
"id":15,
"productId":58,
...
}],
...
},
最后
以上就是糊涂保温杯为你收集整理的MyBatis 高级查询之一对多的全部内容,希望文章能够帮你解决MyBatis 高级查询之一对多所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复