[Mybatisの使用法] Mybatisフレームワークでの1対1、1対多の関連付けとコレクションの使用例

この記事の内容

1.関連付けラベル(1対1)

2、コレクションラベル(1対多)


1.関連付けラベル(1対1)

アソシエーションは通常、1対1の関係をマップするために使用されます。たとえば、クラスUserがあり、対応するエンティティクラスは次のとおりです(getterメソッドとsetterメソッドは省略されています)。

@Data
public class User {
    /**
     * 主键
     */
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
}

クラスArticleがあり、対応するエンティティクラスは次のとおりです。

@Data
public class Article {
    /**
     * 主键
     */
    private String id;
    /**
     * 文章标题
     */
    private String articleTitle;
    /**
     * 文章内容
     */
    private String articleContent;
}

ユーザーにクエリを実行して、ユーザーが書いた記事を見つけたい場合、どのように書くのですか?実際、属性ArticleクラスをUserクラスに追加できます。

@Data
public class User {
    /**
     * 主键
     */
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
    /**
     * 类Article
     */
    private Article article;
}

mapper.xmlユーザークラスのUserMapper.xmlでこのよう構成します

<mapper namespace="com.uiot.practice.mysqltest.dao.UserMapper">
	<resultMap type="com.uiot.practice.mysqltest.entity.Article" id="articleMap">
		<id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
		<result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
		<!--这里把user的id传过去,com.uiot.practice.mysqltest为命名空间-->
		<association property="article" column="id" select="com.uiot.practice.mysqltest.selectArticleByUserId" />
	</resultMap>
</mapper>

同時に、私の記事に対応するArticleMapper.xmlは次のように記述されています。

<mapper namespace="com.uiot.practice.mysqltest.dao.ArticleMapper">
    <resultMap type="com.uiot.practice.mysqltest.entity.Article" id="ArticleResultMap">
        <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
        <result column="articleTitle" property="articleTitle" jdbcType="VARCHAR" javaType="java.lang.String"/>
        <result column="articleContent" property="articleContent" jdbcType="VARCHAR" javaType="java.lang.String"/>
    </resultMap>

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

2、コレクションラベル(1対多)

1対多、コレクション、1対1を理解、1対多は理解しやすい

@Data
public class User {
    /**
     * 主键
     */
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
    /**
     * 类Article
     */
    private List<Article> articleList;
}

UserMapper.xmlは次のように構成されています

<mapper namespace="com.uiot.practice.mysqltest.dao.UserMapper">
	<resultMap type="com.uiot.practice.mysqltest.entity.User" id="articleMap">
		<id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
		<result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
		<!--这里把user的id传过去,com.uiot.practice.mysqltest为命名空间-->
		<collection property="articleList" column="id" select="com.uiot.practice.mysqltest.selectArticleByUserId"/>
	</resultMap>
	<!--以下省略,类同,Mybatis会把结果封装成List类型。-->
</mapper>

 

終わり!

おすすめ

転載: blog.csdn.net/weixin_44299027/article/details/112919200