この記事の内容
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>
終わり!