我是靠谱客的博主 糊涂保温杯,最近开发中收集的这篇文章主要介绍MyBatis 高级查询之一对多,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

描述:有一个商品类,一件商品对应多个图片,在数据库中分别有一个商品表和一个图片表,在显示商品详情的时候,需要查询改图片及其所对应的所有图片。

  • 实体类中的关系
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 高级查询之一对多所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部