• mybatis 一对一与一对多collection和association的使用


    在mybatis如何进行一对一、一对多的多表查询呢?这里用一个简单的例子说明。

    一、一对一

    1、association

        association通常用来映射一对一的关系,例如,有个类user,对应的实体类如下:(getter,setter方法省略)

        private String id;//主键
        private String userName;//用户姓名

    有个类Article,对应的实体类如下:

        private String id;//主键
        private String articleTitle;//文章标题
        private String articleContent;//文章内容
      

    如果我想查询一个用户的时候,也查到他写的一篇文章,可以怎样写呢?在类user加入一个属性article

       private String id;//主键
       private String userName;//用户姓名
    private Article article;//新增的文章属性
     

    2、mapper.xml 我在user类的mapper.xml这样配置

        

    复制代码
    <resultMap id="userResultMap" type="test.mybatis.entity.User">
      <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
      <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
    //这里把user的id传过去 <association property="article" column="id" select="test.mybatis.dao.articleMapper.selectArticleByUserId" />//test.mybatis.dao.articleMapper为命名空间 </resultMap>
    复制代码

    同时,我的article对应的xml这样写:

    复制代码
    1 <resultMap id="articleResultMap" type="test.mybatis.entity.Article">
    2   <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
    3   <result column="articleTitle" property="articleTitle" jdbcType="VARCHAR" javaType="java.lang.String"/>
    4  <result column="articleContent" property="articleContent" jdbcType="VARCHAR" javaType="java.lang.String"/>
    5  </resultMap>
    (当然,这里还有查询user表的语句,省略)
    复制代码

    同时,在article对应的xml有这样的select语句:

    <select id="selectArticleByUserId"
    parameterType="java.lang.String"
    resultMap="ArticleResultMap" >
    select * from
    tb_article where userId=#{userId} </select>

    二、一对多,collection,理解了一对一,一对多容易理解。

    实体类增加对应属性

      private String id;//主键
       private String userName;//用户姓名
       private List<Article> articleList;

    userMapper.xml这样配置

    复制代码
    <resultMap id="userResultMap" type="test.mybatis.entity.User">
      <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
      <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
    //这里把user的id传过去
       <collection property="articleList" column="id"                       
                select="test.mybatis.dao.articleMapper.selectArticleListByUserId" />
     </resultMap>
    以下省略,类同,Mybatis会把结果封装成List类型。
    复制代码

    三、如果我还想通过Article表另一张表,比如文章中有个fk_id,也可以像上面这样重复配置,把fk_id当做与另一张表关联的参数,那时就可以通过用户查到文章,查到文章关联的另一张表了。

  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/sunsing123/p/10058074.html
Copyright © 2020-2023  润新知