一、association 标签(一对一)
association通常用来映射一对一的关系,例如,有个类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; }
如果我想查询一个用户的时候,也查到他写的一篇文章,那么怎样写呢?其实可以在类User中加入一个属性Article类:
@Data public class User { /** * 主键 */ private String id; /** * 用户姓名 */ private String userName; /** * 类Article */ private Article article; }
mapper.xml 我在user类的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>
同时,我的article对应的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>
二、collection 标签(一对多)
一对多,collection,理解了一对一,一对多容易理解
@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>
完结!