`

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

阅读更多
myBatis系列之一:搭建开发环境
myBatis系列之二:以接口方式交互数据
myBatis系列之三:增删改查
myBatis系列之五:与Spring3集成
myBatis系列之六:与SpringMVC集成
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.xml中添加:
<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" />


参考:
http://www.yihaomen.com/article/java/306.htm
分享到:
评论

相关推荐

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    springboot+mybatis+dubbo 本项目是基于微服务架构的班车预约系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于SpringBoot + Mybatis + Thymeleaf 商品管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    该项目设计了基于SpringBoot+Mybatis框架的私人影院预约系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于SpringBoot + Mybatis + Thymeleaf + MySQL开发的购书商城系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    一个基于spring boot、druid、mybatis、mysql的后端基础.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于SpringBoot+Mybatis+MySql+thyemleaf的个人博客系统设计与实现.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于SpringBoot+Redis+Mybatis+MySQL+RabbitMQ技术的仿大众点评项目.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    一个基于Java、Spring、SpringMVC、Mybatis、MySQL的玫瑰商城。.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    竞拍网后台,基于springboot、mybatis-plus、jpa、mysql。数据库已提供.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于SSM的电影购票系统 .zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于Vue和SpringBoot的医院门诊预约挂号管理系统.zip

    采用Redis作菜单缓存,MyBatis读写MySQL数据,业务上包含登录注册、科室管理、医生管理、医生放号、预约挂号、我的挂号、用户留言和新闻资讯功能,模拟了患者从零开始挂号就医的过程。 MySQL 是一款广受欢迎的开源...

    基于Vue+SpringBoot 前后端分离在线学习平台系统,包含PC端与移动端.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    Fzshuai-Blog 是一个基于 Ruoyi-Vue-Plus 框架开发的前后端分离的博客系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    Java学习指南(8) MySQL数据库与JDBC框架

    * 高级SQL查询,多表关联查询 * 表的设计:主键,索引,内连接外连接,外键? * MySQL配置管理: 用户授权,远程访问,备份还原 * JDBC连接: 使用JDBC连接数据库,执行增删改查操作 *?基于JDBC数据库框架的设计(afsql...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    Mybatis CAS Dubbo 工作能力 软实力 应急能力 创新能力 管理能力 分享能力 学习能力 沟通能力 解决问题能力 经历 技术攻关案例 程序开发案例 程序设计案例 设计 设计原则 单一职责原则 开闭原则...

    FCat企业级基础功能框架-其他

    核心技术:angualr、Spring Cloud、OAuth2、jwt、Spring Cloud Security、Eureka、Zuul、Hystrix、Feign、Ribbon、Redis、Mybatis、Mysql。 功能: 1、用户管理 2、菜单管理 3、组织类型管理 4、组织架构管理——...

Global site tag (gtag.js) - Google Analytics