前提:

1、新建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; Insert INTO `article` VALUES ('', '', 'test_title', 'test_content');
Insert INTO `article` VALUES ('', '', 'test_title_2', 'test_content_2');
Insert INTO `article` VALUES ('', '', 'test_title_3', 'test_content_3');
Insert INTO `article` VALUES ('', '', 'test_title_4', 'test_content_4');

实现步骤,也是多对一的实现:

1、新建Article的类,也就是POJOs,与上面新建的article表一一对应,代码如下:

package com.jsoft.testmybatis.models;

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;
} }

注意:文章的用户是怎么定义的,是直接定义的一个User对象,而不是int类型。

2、配置User.xml,这里要引入association,实现多对一,也就是查询这个用户所关联的文章列表,定义如下:

    <!-- User联合文章进行查询方法之一的配置 (多对一的方式) -->
<resultMap id="resultUserArticleList" type="Article">
<id property="id" column="aid" />
<result property="title" column="title" />
<result property="content" column="content" /> <association property="user" javaType="User">
<id property="id" column="id" />
<result property="userName" column="userName" />
<result property="userAddress" column="userAddress" />
</association>
</resultMap>
<select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{id}
</select>

用association来得到关联的用户,这是多对一的情况,因为所有的文章都是同一个用户的。

还有另外一种处理方式,可以复用前面已经定义好的resultMap,前面定义过一个resultListUser,定义如下:

    <!-- User 联合文章进行查询 方法之二的配置 (多对一的方式) -->
<resultMap id="resultUserArticleList-2" type="Article">
<id property="id" column="aid" />
<result property="title" column="title" />
<result property="content" column="content" />
<association property="user" javaType="User" resultMap="resultListUser" />
</resultMap>

3、在IUserOperation接口中加入select对应的id名称相同的方法:

public List<Article> getUserArticles(int id);

4、在Configuration.xml中配置typeAliases:

    <typeAliases>
<typeAlias alias="Article" type="com.jsoft.testmybatis.models.Article" />
</typeAliases>

5、测试核心代码:

                List<Article> articles = userOperation.getUserArticles(1);
for (Article article : articles) {
System.out.println( article.getTitle() + ":" + article.getContent() +
":作者是:" + article.getUser().getUserName() +
":地址:" + article.getUser().getUserAddress());
}

6、测试结果:

测试工程:https://github.com/easonjim/5_java_example/tree/master/mybatis/test4

参考:

http://www.yihaomen.com/article/java/306.htm

最新文章

  1. 使用JspStudy集成环境快速部署jsp项目
  2. JavaScript封装成类
  3. wall 和panel有啥区别
  4. windows 下使用 zip安装包安装MySQL 5.7
  5. Qt学习之路(2)------Qt中的字符串类
  6. VS2008 运行VC\Bin下的link.exe, cl.exe, lib.exe提示找不到mspdb80.dll的解决方法
  7. SVN:cannot map the project with svn provider解决办法
  8. Visual Studio 2017 RC 初探安装
  9. .NET Framework 4.7 安装
  10. vim基本命令(转载自网络)
  11. Android Support Design 控件 FloatingActionButton
  12. /dev/null 2&gt;&amp;1的意思(可以直接参考shell重定向那篇,/dev/null是空设备)
  13. 不同路径(一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?)
  14. cocos2dx 实现文字的一键复制功能(IOS、Android)
  15. @RequestBody注解的参数仅仅读取一次的问题解决。
  16. Visualbox与CentOS 6.4之间鼠标切换
  17. as3.0划线带撤销功能
  18. linux压缩日志并删除原始文件
  19. 百度统计数据的UV和IP为什么不一样?
  20. Ubuntu 系统下卸载 IntelliJ IDEA

热门文章

  1. 望岳物业App开发过程记录
  2. SQL Server 监测语句
  3. CSS设计指南之伪类
  4. Spark+Python+Pycharm在Windows下的配置
  5. strings用法小记
  6. 如何设置项目encoding为utf-8
  7. Spring源码解析-实例化bean对象
  8. Codeforces Round #350 (Div. 2) C
  9. WITH AS 使用
  10. hdu3294 manacher算法