mybaits的映射关系

mybaits的映射关系

主要是围绕一个resultmap的标签而展开讨论的。

GoodsDao.xml

 <resultMap id="BaseResultMap" type="com.qianfeng.study.pojo.entity.Goods">
        <id column="goods_id" jdbcType="BIGINT" property="goodsId"/>
        <result column="title" jdbcType="VARCHAR" property="title"/>
        <result column="old_price" jdbcType="DECIMAL" property="oldPrice"/>
        <result column="now_price" jdbcType="DECIMAL" property="nowPrice"/>
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
        <result column="update_user" jdbcType="TIMESTAMP" property="updateUser"/>
        <result column="sold" jdbcType="INTEGER" property="sold"/>
        <result column="score" jdbcType="DOUBLE" property="score"/>
        <result column="merchant_id" jdbcType="BIGINT" property="merchantId"/>
        <result column="img" jdbcType="VARCHAR" property="img"/>
        <!--    一对一-->
        <association property="merchant" resultMap="merchantResultMap"/>
        <!--    一对多-->
        <collection property="merchants" resultMap="merchantResultMap"/>
        <!--      多对多-->
    </resultMap>
 <result column="sold" jdbcType="INTEGER" property="sold"/>

其中column是数据库的列字段,property是实体类或者VO类中的属性名称,这里会形成一个映射关系
1. 【掌握】association标签的关联使用。

实体类

@Data
public class Goods implements Serializable {

    // 我在这里加
    private Merchant merchant;  //一对多

    private List<Merchant>  merchants;// 代理商 多对多
    
    /**
     * 这个是跟后边的分布式雪花算法做铺垫的:
     */
    private Long goodsId;
    /**
     * 商品类型:
     */
    private String title;
    /**
     * 这个商品是哪个商户的,外键
     */
    private Long merchantId;

    /**
     * 商品的图片地址
     */
    private String img;

    private static final long serialVersionUID = 1L;
}

GoodsDao.xml

 <!--一对一-->
        <association property="merchant" resultMap="merchantResultMap"/>
        

GoodsDao.xml完整的resultMap标签代码在文章开头

虽然在实际工作可能用不到,但是面试可能会用到。我们后面有更好的放,用单表加流式处理来解决多表联查的性能问题,以及大大降低sql语句联表查询的复杂度。

 <resultMap id="merchantResultMap" type="com.qianfeng.study.pojo.entity.Merchant">
        <id column="merchant_id" jdbcType="BIGINT" property="merchantId"/>
        <result column="shop_name" jdbcType="VARCHAR" property="shopName"/>
        <result column="lng" jdbcType="DOUBLE" property="lng"/>
        <result column="lat" jdbcType="DOUBLE" property="lat"/>
        <result column="address" jdbcType="VARCHAR" property="address"/>
        <result column="logo" jdbcType="VARCHAR" property="logo"/>
    </resultMap>
 <select id="selectGoodsTest" useCache="false" flushCache="false">
    select g.title,m.shop_name   from goods g,merchant m where g.merchant_id=m.merchant_id and g.goods_id=1
    </select>

这种方式既有优点,也有缺点
优点:

  1. 数据量少的时候跟单表分布查询差不多
  2. 处理结果集方便,直接得到结果,无需额外的进行封装
  3. 对业务开发能力要求不高
    缺点:
  4. sql语句冗长,不好理解
  5. 数据量大,性能降低
  6. 维护蛮烦,对编写sql要求稍微高一点

单分布查询的优缺点
优点:

  1. sql语句基本会少写很多
  2. sql语句简单
  3. 好维护,性能高
    缺点:
  4. 业务层增加了复杂度
  5. 对java基础知识要求比较高(流处理,lambda表达式,函数式接口)

2. 【掌握】cillection标签的关联使用

  <!-- 一对多-->
        <collection property="merchants" resultMap="merchantResultMap"/>
 <resultMap id="merchantResultMap" type="com.qianfeng.study.pojo.entity.Merchant">
        <id column="merchant_id" jdbcType="BIGINT" property="merchantId"/>
        <result column="shop_name" jdbcType="VARCHAR" property="shopName"/>
        <result column="lng" jdbcType="DOUBLE" property="lng"/>
        <result column="lat" jdbcType="DOUBLE" property="lat"/>
        <result column="address" jdbcType="VARCHAR" property="address"/>
        <result column="logo" jdbcType="VARCHAR" property="logo"/>
    </resultMap>

多对多不在配置文件搞,暂未更新,敬请期待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值