星空网 > 软件开发 > Java

myBatis系列之四:关联数据的查询

myBatis系列之三:增删改查是基于单表的查询,如果联表查询,返回的是复合对象,需要用association关键字来处理。 
如User发表Article,每个用户可以发表多个Article,他们之间是一对多的关系。

1. 创建Article表,并插入测试数据:

-- Drop the table if exists DROP TABLE IF EXISTS `Article`;  -- Create a table named 'Article' CREATE TABLE `Article` (   `id` int NOT NULL AUTO_INCREMENT,   `user_id` int NOT NULL,   `title` varchar(100) NOT NULL,   `content` text NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;  -- Add several test records INSERT INTO `article` VALUES ('1', '1', 'title1', 'content1'), ('2', '1', 'title2', 'content2'), ('3', '1', 'title3', 'content3'), ('4', '1', 'title4', 'content4');

2. com.john.hbatis.model.Article类: 

public class Article {   private int id;   private User user;   private String title;   private String content;   // Getters and setters are omitted } 

3. 在IUserMapper中添加:

List<Article> getArticlesByUserId(int id); 

4. 在User.

<resultMap type="com.john.hbatis.model.Article" id="articleList">   <id column="a_id" property="id" />   <result column="title" property="title" />   <result column="content" property="content" />      <association property="user" javaType="User"><!-- user属性映射到User类 -->     <id column="id" property="id" />     <result column="name" property="name" />     <result column="address" property="address" />   </association> </resultMap>  <select id="getArticlesByUserId" parameterType="int" resultMap="articleList">   select u.id, u.name, u.age, u.address, a.id a_id, a.title, a.content   from article a   inner join user u   on a.user_id=u.id and u.id=#{id} </select>

5. 测试方法:

@Test public void getArticlesByUserIdTest() {   SqlSession session = sqlSessionFactory.openSession();   try {     IUserMapper mapper = session.getMapper(IUserMapper.class);     List<Article> articles = mapper.getArticlesByUserId(1);     for (Article article : articles) {       log.info("{} - {}, author: {}", article.getTitle(), article.getContent(), article.getUser().getName());     }   } finally {     session.close();   } } 

附:除了在association标签内定义字段和属性的映射外,还可以重用User的resultMap: 

<association property="user" javaType="User" resultMap="userList" />

 

  1. <resultMap type="com.john.hbatis.model.Article" id="articleList">  
  2.     <id column="a_id" property="id" />  
  3.     <result column="title" property="title" />  
  4.     <result column="content" property="content" />  
  5.       
  6.     <association property="user" javaType="User"><!-- user属性映射到User类 -->  
  7.         <id column="id" property="id" />  
  8.         <result column="name" property="name" />  
  9.         <result column="address" property="address" />  
  10.     </association>  
  11. </resultMap>  
  12.   
  13. <select id="getArticlesByUserId" parameterType="int" resultMap="articleList">  
  14.     select u.id, u.name, u.age, u.address, a.id a_id, a.title, a.content  
  15.     from article a  
  16.     inner join user u  
  17.     on a.user_id=u.id and u.id=#{id}  
  18. </select>



原标题:myBatis系列之四:关联数据的查询

关键词:mybatis

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

只要牢记这些,19年的销量没在怕:https://www.ikjzd.com/articles/15629
亚马逊直播类型及直播建议:https://www.ikjzd.com/articles/1562958139364429825
shopee店铺运营思路,shopee运营策略模式总接发展规划:https://www.ikjzd.com/articles/1562974057582776321
影响海外独立站SEO优化的十大关键因素,你知道多少?:https://www.ikjzd.com/articles/1562981726284632066
拼多多北美站入驻流程是什么?如何入驻:https://www.ikjzd.com/articles/1562988354903953409
仅剩1个多月,德国站拉响停售预警!:https://www.ikjzd.com/articles/1562991853698060289
大连有啥好玩的景点-大连有啥好玩的景点推荐孩子:https://www.vstour.cn/a/411235.html
咸阳机场到临潼景点 西安咸阳机场到临潼有多远:https://www.vstour.cn/a/411236.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流