MyBatis级联

简述

级联是一个数据库实体的概念,级联不是必须的,级联的好处是获取关联数据十分方便,但是级联过多会增加系统的复杂度,同时降低系统的性能,所以当级联的层级超过3层时,就不要考虑使用级联,这样会导致多个对象的关联,导致系统耦合度增加,难以维护。

MyBatis的级联分为3种:

  • 鉴别器(discriminator):它是一个根据某些条件决定采用具体实现类级联的方案。
  • 一对一(association):比如身份证和人就是一种一对一的级联关系。
  • 一对多(collection):比如班主任和学生就是一种一对多的级联关系。

注意!MyBatis中没有多对多级联关系,因为多对多级联比较复杂,使用困难,而且可以通过两个一对多级联进行替换,所以MyBatis不支持多对多级联。

下面主要讲解常用的一对一级联与一对多级联。

一对一级联

JavaBean

package com.ronin.blog.entity;

import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
public class Article {

    private Integer articleId;

    private Integer articleUserId;

    private String articleTitle;

    private String articleSummary;

    private Integer articleViewCount;

    private Integer articleCommentCount;

    private Integer articleLikeCount;

    private Integer articleIsComment;

    private Integer articleStatus;

    private Date articleUpdateTime;

    private Date articleCreateTime;

    private String articleHtml;

    private String articleContent;
	//一对一关系
    private User user;
}

配置文件

<resultMap id="BaseResultMap" type="com.ronin.blog.entity.Article" >
    <id column="article_id" property="articleId" jdbcType="INTEGER" />
    <result column="article_user_id" property="articleUserId" jdbcType="INTEGER" />
    <result column="article_title" property="articleTitle" jdbcType="VARCHAR" />
    <result column="article_summary" property="articleSummary" jdbcType="VARCHAR" />
    <result column="article_view_count" property="articleViewCount" jdbcType="INTEGER" />
    <result column="article_comment_count" property="articleCommentCount" jdbcType="INTEGER" />
    <result column="article_like_count" property="articleLikeCount" jdbcType="INTEGER" />
    <result column="article_is_comment" property="articleIsComment" jdbcType="INTEGER" />
    <result column="article_status" property="articleStatus" jdbcType="INTEGER" />
    <result column="article_update_time" property="articleUpdateTime" jdbcType="TIMESTAMP" />
    <result column="article_create_time" property="articleCreateTime" jdbcType="TIMESTAMP" />
    <result column="article_html" property="articleHtml" jdbcType="LONGVARCHAR" />
    <result column="article_content" property="articleContent" jdbcType="LONGVARCHAR" />
    <!-- 一对一级联 -->
    <association property="user" javaType="User">
      <id column="user_id" property="userId"/>
      <result column="user_name" property="userName"/>
    </association>
  </resultMap>

一对多级联

JavaBean

package com.ronin.blog.entity;

import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
public class Article {

    private Integer articleId;

    private Integer articleUserId;

    private String articleTitle;

    private String articleSummary;

    private Integer articleViewCount;

    private Integer articleCommentCount;

    private Integer articleLikeCount;

    private Integer articleIsComment;

    private Integer articleStatus;

    private Date articleUpdateTime;

    private Date articleCreateTime;

    private String articleHtml;

    private String articleContent;
	//一对多关系
    private List<Tag> tagList;
}

配置文件

<resultMap id="BaseResultMap" type="com.ronin.blog.entity.Article" >
    <id column="article_id" property="articleId" jdbcType="INTEGER" />
    <result column="article_user_id" property="articleUserId" jdbcType="INTEGER" />
    <result column="article_title" property="articleTitle" jdbcType="VARCHAR" />
    <result column="article_summary" property="articleSummary" jdbcType="VARCHAR" />
    <result column="article_view_count" property="articleViewCount" jdbcType="INTEGER" />
    <result column="article_comment_count" property="articleCommentCount" jdbcType="INTEGER" />
    <result column="article_like_count" property="articleLikeCount" jdbcType="INTEGER" />
    <result column="article_is_comment" property="articleIsComment" jdbcType="INTEGER" />
    <result column="article_status" property="articleStatus" jdbcType="INTEGER" />
    <result column="article_update_time" property="articleUpdateTime" jdbcType="TIMESTAMP" />
    <result column="article_create_time" property="articleCreateTime" jdbcType="TIMESTAMP" />
    <result column="article_html" property="articleHtml" jdbcType="LONGVARCHAR" />
    <result column="article_content" property="articleContent" jdbcType="LONGVARCHAR" />
    <!-- 一对多级联 -->
    <collection property="tagList" javaType="list" ofType="Tag">
      <!-- 映射主键 -->
      <id column="tag_id" property="tagId"/>
      <!-- 映射普通属性 -->
      <result column="tag_name" property="tagName"/>
      <result column="tag_description" property="tagDescription"/>
    </collection>
  </resultMap>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值