您的位置:首页 > 其它

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

2016-08-29 22:34 309 查看
在mybatis如何进行一对一、一对多的多表查询呢?这里用一个简单的例子说明。

一、一对一

1、association

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

privateStringid;//主键
privateStringuserName;//用户姓名


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

privateStringid;//主键
privateStringarticleTitle;//文章标题
privateStringarticleContent;//文章内容


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

privateStringid;//主键
privateStringuserName;//用户姓名
privateArticlearticle;//新增的文章属性



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

<resultMapid="userResultMap"type="test.mybatis.entity.User">
<idcolumn="id"property="id"jdbcType="VARCHAR"javaType="java.lang.String"/>
<resultcolumn="userName"property="userName"jdbcType="VARCHAR"javaType="java.lang.String"/>
//这里把user的id传过去
<associationproperty="article"column="id"
select="test.mybatis.dao.articleMapper.selectArticleByUserId"/>//test.mybatis.dao.articleMapper为命名空间

</resultMap>


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

<resultMapid="articleResultMap"type="test.mybatis.entity.Article">
<idcolumn="id"property="id"jdbcType="VARCHAR"javaType="java.lang.String"/>
<resultcolumn="articleTitle"property="articleTitle"jdbcType="VARCHAR"javaType="java.lang.String"/>
4<resultcolumn="articleContent"property="articleContent"jdbcType="VARCHAR"javaType="java.lang.String"/>
5</resultMap>
(当然,这里还有查询user表的语句,省略)


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

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


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

实体类增加对应属性

privateStringid;//主键
privateStringuserName;//用户姓名
privateList<Article>articleList;


userMapper.xml这样配置

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


三、如果我还想通过Article表另一张表,比如文章中有个fk_id,也可以像上面这样重复配置,把fk_id当做与另一张表关联的参数,那时就可以通过用户查到文章,查到文章关联的另一张表了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: