更多精彩文章欢迎关注公众号“Java之康庄大道”

场景:查询部门的同时,要求查询此部门下的所有用户。

部门(Department)

    private Integer id;
private String departmentName;
private List<Blogger> bloggers;//关联List集合。部门下所有bloggers

用户(Blogger)

    private Integer id;
private String username;
private String password;
private String profile;
private String nickname;
private String sign;
private String imagename;
private Department dep;

方法一:结果集下collection关联

接口DepartMapper.java

package com.yunqing.mybatis.dao;

import com.yunqing.mybatis.bean.Department;

public interface DepartmentMapper {

    Department getDepByIdStep2(Integer id);

    Department getDepAndBloggers(Integer id);

    Department getDepStep(Integer id);
}

DepartmentMapper.xml

<resultMap id="map" type="com.yunqing.mybatis.bean.Department">
<id column="did" property="id"/>
<result column="department" property="departmentName"/>
<collection property="bloggers" ofType="com.yunqing.mybatis.bean.Blogger">
<id column="bid" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
</collection>
</resultMap>
<select id="getDepAndBloggers" resultMap="map">
SELECT d.id did,d.department,b.id bid,b.username,b.`password` FROM t_dep d LEFT JOIN t_blogger b ON d.id=b.depId WHERE d.id=#{id}
</select>

测试类

public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "conf/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
@Test
public void getDepAndBlogger() throws IOException {
SqlSession sqlSession = getSqlSessionFactory().openSession();
DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
Department depAndBloggers = mapper.getDepAndBloggers(1);
System.out.println(depAndBloggers);
System.out.println(depAndBloggers.getBloggers());
}

方法二:分布查询

BloggerMapper.java

//根据部门id查询此部门下的人

package com.yunqing.mybatis.dao;

import com.yunqing.mybatis.bean.Blogger;
import com.yunqing.mybatis.bean.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Select; import java.util.List;
import java.util.Map; public interface BloggerMapper {
@Select("select * from t_blogger")
List<Blogger> getAllBlogger(); @MapKey("username")
Map<String,Blogger> getAllBloggerReturnMap(); Blogger getBloggerAndDepById(Integer id); Blogger getBloggerAndDepByIdAss(Integer id); Blogger getBloggerByIdStep1(Integer id); List<Blogger> getBloggersByDepId(Integer depId); }

BloggerMapper.xml

<resultMap id="mapp" type="com.yunqing.mybatis.bean.Blogger">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
</resultMap>
<select id="getBloggersByDepId" resultMap="mapp">
SELECT id,username,password FROM t_blogger WHERE depId=#{depId}
</select>

再根据部门id查询部门

DepartmentMapper.java

package com.yunqing.mybatis.dao;

import com.yunqing.mybatis.bean.Department;

public interface DepartmentMapper {

    Department getDepByIdStep2(Integer id);

    Department getDepAndBloggers(Integer id);

    Department getDepStep(Integer id);
}

DepartmentMapper.xml

<resultMap id="maop" type="com.yunqing.mybatis.bean.Department">
<id column="did" property="id"/>
<result column="department" property="departmentName"/>
<collection property="bloggers" select="com.yunqing.mybatis.dao.BloggerMapper.getBloggersByDepId"
column="did"> </collection>
</resultMap>
<select id="getDepStep" resultMap="maop">
SELECT id did,department FROM t_dep WHERE id=#{id}
</select>

测试类

@Test
public void getDepStep() throws IOException {
SqlSession sqlSession = getSqlSessionFactory().openSession();
DepartmentMapper mapper = sqlSession.getMapper(DepartmentMapper.class);
Department depStep = mapper.getDepStep(1);
System.out.println(depStep);
System.out.println(depStep.getBloggers()); }

结果打印:

分布查询时如果需要传递多列值,可以

<resultMap id="maop" type="com.yunqing.mybatis.bean.Department">
<id column="did" property="id"/>
<result column="department" property="departmentName"/>
<collection property="bloggers" select="com.yunqing.mybatis.dao.BloggerMapper.getBloggersByDepId"
column="{depId=did}" fetchType="eager"> </collection>
</resultMap>
<select id="getDepStep" resultMap="maop">
SELECT id did,department FROM t_dep WHERE id=#{id}
</select>

传递多列值,column="{column1=key1,column2=key2}"

cloumn1的来源是,select的里的方法的传递的参数。

List<Blogger> getBloggersByDepId(Integer depId);

虽然在设置中已经开启了延迟加载,但是在此处的fetchType也可以控制是否延迟加载,lazy延迟加载,eager立即加载。


mybatis关联集合List&分布查询传递多列值的更多相关文章

  1. Mybatis3.1-[tp_36-37]-_映射文件_select_resultMap关联查询__分步查询传递多列值&fetchType_discriminator鉴别器

    _分步查询传递多列值&fetchType_discriminator鉴别器 笔记要点出错分析与总结 Department.java bean public class Department { ...

  2. 将表中null值替换成想要的值、查询某一列值为null

    用到ISNULL()函数 例如:SELECT 其他列名,ISNULL(列名,替换值)as 重命名  from 表名 (简单参考:http://www.cnblogs.com/netsa/archive ...

  3. mybatis 传入集合参数遍历 查询总结

    出自:http://blog.csdn.net/u013628152/article/details/51184641 1. findByIds(List ids) 如果参数的类型是List, 则在使 ...

  4. mybatis映射文件select_resultMap_关联查询_collection定义关联集合

    知识点:查询一个实体类,并查出这个类下面的集合 Employee.java实体类 package com.hand.mybatis.bean;public class Employee {    pr ...

  5. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  6. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  7. mybatis关联查询之一对多查询

    一对多,是最常见的一种设计.就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键.这主要看以哪张表为中心,下面的测试数据中,从employee 表来看,一个员工对应一个部门 ...

  8. MyBatis 关联查询的实现:一对多

    有2个实体:用户.订单,一个用户可以拥有多个订单,同时这多个订单属于一个用户,即一对多. user_tb: order_tb: 在“多”的一方(order)添加“一”的一方(user)的主键(user ...

  9. MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射

    先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出 ...

随机推荐

  1. [javaSE] java上传图片给PHP

    java通过http协议上传图片给php文件,对安卓上传图片给php接口的理解 java文件: import java.io.DataOutputStream; import java.io.File ...

  2. rabbit的fanout扇形交换机

    rabbit引入交换机概念. 交换机与生产者绑定. 队列与消费者绑定. 队列又与交换机绑定. 扇形交换机是  fanout类型的. 类似于其他消息中间件的 topic.一对多(生产者推送消息到指定交换 ...

  3. 简单来看看JavaBean

    1.什么是JavaBean? JavaBean是一个遵循特定写法的java类. 用作JavaBean的类必须有一个公共的,无参数的构造方法. JavaBean的属性与普通的Java类的属性的概念一样, ...

  4. 关于css伪类,伪元素详解总结

    伪类 伪类就是一种虚构的状态或者说是一个具有特殊属性的元素可以使用CSS进行样式修饰.常见的几种伪类是: :link , :visited , :hover , :active , :first-ch ...

  5. 佣金百万so easy!阿里云推广联盟喊你来赚钱

    淘客速来,佣金百万so easy!阿里云推广联盟喊你来赚钱 阿里云CPS推广阶梯返佣活动火热升级! 坐享15%佣金!一笔成交即有奖励!最高奖励2000元! 超高客单价.高转化率.高佣金! 招募淘客推广 ...

  6. 【Machine Learning】训练集 验证集 测试集区别

    最近在Udacity上学习Machine learning课程,对于验证集.测试集和训练集的相关概念有些模糊.故整理相关资料如下. 交叉检验(Cross Validation) 在数据分析中,有些算法 ...

  7. Spring3实战第二章第二小节 IOC依赖注入 list和map集合

    Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式. 1.Set注入 2.构造器注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new ...

  8. windows下编译基于nginx插件的rtmp流媒体服务nginx-rtmp

    1 概述 rtmp流媒体服务器,开源方案有多种,包括srs,red5,crtmpserver,fms,nginx插件等.本文描述了基于nginx插件的方式来实现rtmp流媒体服务器nginx-rtmp ...

  9. c# 依赖注入之---反射(转)

    详细请看http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 定义一个接口,和两个类(实现该接口) IButton: using ...

  10. [问题记录]cocos2dx编译打包apk过程&问题记录

    目录: 1. 入门 2. 编译 3. 问题 4. 总结 5. 参考 ------------------------------------------------------------------ ...