`

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

阅读更多

        myBatis系列之三:增删改查是基于单表的查询,如果联表查询,返回的是复合对象,需要用association关键字来处理。 

        如User发表Article,每个用户可以发表多个Article,他们之间是一对多的关系。 

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

-- Create the database named 'hbatis'.
-- It's OK to use `, not OK to use ' or " surrounding the database name to prevent it from being interpreted as a keyword if possible.
CREATE DATABASE IF NOT EXISTS `hbatis` DEFAULT CHARACTER SET = `UTF8`;

-- Drop the table if exists
DROP TABLE IF EXISTS `user`;

-- Create a table named 'User'
CREATE TABLE `user` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`name` varchar(50) DEFAULT NULL,
	`age` int(11) DEFAULT NULL,
	`address` varchar(200) DEFAULT NULL,
	PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- Insert a test record
Insert INTO `user` VALUES ('1', 'bijian', '120', 'hangzhou,westlake');

-- 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');


-- drop table
drop table `user`;
drop table `article`;

 

二.Article类

package com.bijian.study.model;

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

 

三.在IUserMapper中添加

List<Article> getArticlesByUserId(int id);

 

四.在User.xml中添加 

<resultMap type="com.bijian.study.model.Article" id="articleList">
	<id column="a_id" property="id" />
	<result column="title" property="title" />
	<result column="content" property="content" />
	
	<!-- user属性映射到User类 -->
	<association property="user" javaType="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>

 

五.测试方法 

@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:

<resultMap type="User" id="userList"><!-- type为返回列表元素的类全名或别名 -->
	<id column="id" property="id" />
	<result column="name" property="name" />
	<result column="age" property="age" />
	<result column="address" property="address" />
</resultMap>

<resultMap type="com.bijian.study.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" resultMap="userList"/>
</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>

 

文章来源:http://czj4451.iteye.com/blog/1986762

 

分享到:
评论

相关推荐

    myBatis系列之五:与Spring3集成

    本篇文章将深入探讨MyBatis系列中的第五个主题——如何将MyBatis与Spring3进行集成,以实现更高效、更灵活的Java企业级应用开发。 MyBatis是一个轻量级的SQL映射框架,它允许开发者将SQL语句直接写在XML配置文件...

    mybatis系列三:一对多双向关联

    在MyBatis系列的第三部分,我们将深入探讨“一对多双向关联”的概念及其实现方法。 首先,理解“一对多”关联是关键。在数据库设计中,这种关系表示一个实体(如订单)可以与多个其他实体(如订单中的商品)相关联...

    mybatis系列二:单表CRUD

    本文将深入探讨MyBatis系列的第二部分:单表的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,即CRUD。通过理解和掌握这些基本操作,开发者可以有效地管理数据库中的数据。 首先,我们来了解...

    Mybatis系列学习源码

    本资源是"Mybatis系列学习源码",适合初学者和有一定经验的开发者深入理解Mybatis的工作原理和实践应用。下面将详细探讨Mybatis的核心概念和关键功能。 1. **SqlSession与Executor** - **SqlSession**:它是...

    Mybatis系列教程Mybatis基本应用共9页.pdf

    【标题】:Mybatis系列教程Mybatis基本应用共9页.pdf 【描述】:这份教程是关于Mybatis基本应用的详细讲解,包含了9页丰富的内容,旨在帮助学习者深入理解和掌握Mybatis这一强大的持久层框架。 【标签】:Mybatis...

    Mybatis notes系列博客配套资源

    这个压缩包文件 "0809MyBatisHomework" 可能包含了与 Mybatis 相关的一系列实践案例,用于配合作者的"Mybatis notes"系列博客,帮助读者深入理解和应用 Mybatis 技术。 1. **Mybatis 简介**:Mybatis 是一款轻量级...

    Mybatis系列教程Mybatis插件共8页.pdf.z

    【标题】"Mybatis系列教程Mybatis插件共8页.pdf.z" 提供的信息表明,这是一个关于Mybatis框架的教程,特别关注Mybatis插件的使用。Mybatis是一款流行的Java持久层框架,它允许开发者直接编写SQL语句,提供灵活的数据...

    完整版 Java开发实训课程系列-MyBatis框架技术 03.MyBatis关联映射查询与缓存配置(共25页).pptx

    总结来说,MyBatis的关联映射和缓存配置是其核心功能之一,它们帮助开发者高效地处理对象关系和提高数据访问性能。通过深入学习和熟练应用这些特性,Java开发者能够在实际项目中更好地运用MyBatis框架,提升开发效率...

    MyBatis系列操作资源

    这个压缩包文件"MyBatis系列操作资源"显然包含了与MyBatis相关的各种教程、示例代码或者项目实践,特别是涉及到一对一查询的实践。 首先,我们要理解MyBatis的核心概念。MyBatis抛弃了传统的基于JDBC的繁琐数据操作...

    Mybatis系列课程-Association

    "Mybatis系列课程-Association"显然是一个专门针对Mybatis中“关联”这一概念的教程。在本课程中,我们将深入探讨Mybatis如何处理实体类之间的关联关系,以及如何通过XML或注解配置来实现这种关联。 首先,我们需要...

    Mybatis系列课程-一对一

    5. **Nested Select**:Mybatis通过在主查询中嵌入子查询来实现关联数据的加载。例如,使用`&lt;collection&gt;`标签的`select`属性指定一个查询语句,这个查询将被插入到主查询的SQL中,以便获取子对象列表。 6. **...

    Mybatis系列教程Mybatis复杂映射开发共6页.p

    【标题】"Mybatis系列教程Mybatis复杂映射开发共6页" 提供了一个关键信息,即本教程专注于Mybatis的复杂映射开发,这通常指的是在Mybatis框架中处理多对一、一对多、多对多等复杂数据关系的能力。Mybatis作为一个...

    Mybatis系列教程Mybatis架构原理共4页.pdf

    【标题】:Mybatis系列教程Mybatis架构原理共4页.pdf 【描述】:这个压缩文件包含了一份关于Mybatis架构原理的系列教程,总计四页的内容。Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...

    Mybatis系列教程Mybatis注解开发共9页.pdf

    【标题】"Mybatis系列教程Mybatis注解开发共9页.pdf" 提供的是一个关于Mybatis框架注解开发的教程,重点在于讲解如何在Mybatis中使用注解进行数据库操作。Mybatis是一个轻量级的Java持久层框架,它允许开发者通过...

    springmybatis

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

    mybatis-plus IDEA常用插件

    MyBatis-Plus(简称MP)是一个为MyBatis做拓展的工具,它简化了常见的数据操作,如插入、删除、更新和查询。MP提供了CRUD操作的便捷方法,支持主键自动生成、条件构造器、关联查询等功能,使得开发者无需编写大量...

    MyBatis1_areavcc_mybatis_

    9. **一对一、一对多、多对多关系映射**:MyBatis支持复杂的数据关联查询,如联合主键、外键等。 10. **MyBatis Plus**:作为MyBatis的增强工具,提供了更多的实体类操作,如自动填充创建时间和修改时间、批量插入...

    开源框架面试题系列:Spring+SpringMVC+MyBatis

    5. **Spring Data JPA**和**MyBatis**:比较这两者在数据访问层的不同实现,讨论各自的优点和适用场景。 6. **Spring Security**:介绍Spring的安全管理功能,如身份验证、授权和会话管理。 其次,MyBatis是一个...

    Mybatis官方网址跟进学习视频的查询例题

    在"Mybatis官方网址跟进学习视频的查询例题"这个资源中,你可以找到一系列与Mybatis相关的查询实例,这对于初学者来说是非常有价值的。Mybatis-plus是Mybatis的一个增强工具,它在Mybatis的基础上做了很多简化和扩展...

    MyBatis高级查询+JFreeChart热点

    【标题】"MyBatis高级查询+JFreeChart热点"是一个综合的学习项目,它涵盖了数据库操作和数据可视化两个重要领域。MyBatis是Java开发中常用的一个持久层框架,而JFreeChart则是一个用于创建高质量图表的库。下面将...

Global site tag (gtag.js) - Google Analytics