Mybatis学习笔记四:关联查询
2016-11-14 10:42
363 查看
在上一章中,主要实现了使用Mybatis进行增删查改。在本章中,主要来看下如何使用mybatis进行关联查询。
配置User.xml,在其中添加getUserArticles方法:
association也可以定义为:
其中需要说明的是,如果两个表中存在重名字段,如上文所述uesr表中有id字段,article表中同样有id字段,在使用Mybatis进行联合查询的过程中,会遇到只返回一条数据的情况。然而在数据库中直接运行sql语句是正常的。
在这里需要注意的是,在出现重名字段时,配置Mybatis文件时需要把字段重新命名,否则Mybatis会混乱。
结果如下:
![](http://img.blog.csdn.net/20161114104023015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2)当存在不同表有重名字段时,使用别名进行区分,否则mybatis只能返回一条数据。
未尽之处后期再补,代码下载地址:https://github.com/EdwardEricZhang/MybatisFun
1、创建Article表
-- ---------------------------- -- Table structure for `article` -- ---------------------------- DROP TABLE IF EXISTS `article`; CREATE TABLE `article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userid` int(11) NOT NULL, `title` varchar(100) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of `article` -- ---------------------------- BEGIN; INSERT INTO `article` VALUES ('1', '1', 'test_title', 'test_content'), ('2', '1', 'test_title_2', 'test_content_2'), ('3', '1', 'test_title_3', 'test_content_3'), ('4', '1', 'test_title_4', 'test_content_4'); COMMIT;
2、添加Article类
在model包中创建一个article类:public class Article { private int id; private User user; //用户使用类进行定义 private String title; private String content; public int getId() { return id; } public void setId(int id) { this.id = id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "Article{" + "id=" + id + ", user=" + user + ", title='" + title + '\'' + ", content='" + content + '\'' + '}'; } }其中,User是我们在前三章中定义好的类。
3、修改相关配置文件
根据第一章所述,我们在定义了一个新的model文件之后,就需要定义他的别名,首先在mybatis-config.xml中定义Article的别名:<typeAlias alias="Article" type="com.dfz.mybatis.model.Article"/>在UserMapper接口中添加一个新的方法
public List<Article> getUserArticles(int userId);这个方法从名字上就可以看出,我们想要使用userid来查出用户相关的文章。
配置User.xml,在其中添加getUserArticles方法:
<resultMap id="resultUserArticleList" type="Article"> <id property="id" column="aid"/> <result property="content" column="content"/> <result property="title" column="title"/> <!-- --> <association property="user" javaType="User"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="password" column="password"/> <result property="address" column="address"/> </association> </resultMap> <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList"> select user.id,user.username,user.address,user.password,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{id} </select>使用association来定义user,并进行联合查询。
association也可以定义为:
<association property="user" javaType="User" resultMap="resultListUser"/>以提高代码复用程度。
其中需要说明的是,如果两个表中存在重名字段,如上文所述uesr表中有id字段,article表中同样有id字段,在使用Mybatis进行联合查询的过程中,会遇到只返回一条数据的情况。然而在数据库中直接运行sql语句是正常的。
在这里需要注意的是,在出现重名字段时,配置Mybatis文件时需要把字段重新命名,否则Mybatis会混乱。
<id property="id" column="aid"/> select user.id,user.username,user.address,user.password,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{id}如代码中所示,在这里就把article表中的id字段命名为了aid,即可正常显示。
结果如下:
4、总结
1)Mybatis联合查询可以使用association标签进行配置;2)当存在不同表有重名字段时,使用别名进行区分,否则mybatis只能返回一条数据。
未尽之处后期再补,代码下载地址:https://github.com/EdwardEricZhang/MybatisFun
相关文章推荐
- MyBatis:学习笔记(3)——关联查询
- MyBatis:学习笔记(3)——关联查询
- MyBatis-学习笔记(3)——关联查询
- MyBatis-学习笔记(3)——关联查询
- 关联查询---Mybatis学习笔记(九)
- MyBatis-学习笔记(3)——关联查询
- Java学习笔记32:Spring整合mybatis使用
- mybatis学习笔记2-SQL的简单应用
- mybatis学习笔记---入门
- MyBatis 学习笔记
- MyBatis多参数传递之默认命名方式示例——MyBatis学习笔记之十二 推荐
- mybatis学习笔记--常见的错误
- MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八 推荐
- MyBatis For .NET学习笔记[3]:工作原理解析
- MyBATIS3入门学习笔记
- Mybatis学习笔记三(Mybatis SQL映射文件)
- Mybatis学习笔记一(环境搭建)
- MyBatis For .NET学习笔记[2]:配置环境
- MyBatis collection的两种形式——MyBatis学习笔记之九
- mybatis 学习笔记