更多精彩文章欢迎关注公众号“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. DataGridView初始化,加载数据

    1,创建winform窗体应用程序 2,在界面上拖入DataGridView控件 3,添加相应的列如图: 4,开始编写后面的代码: private DataTable CountryDt = new ...

  2. [javaEE] EL表达式调用java方法

    1.新建个类,类里面定义静态方法 package com.tsh.utils; import java.net.URLEncoder; public class ELFunc { public sta ...

  3. 四 Scatter/Gather

    scatter/gather用于描述从Channel中读取或者写入到Channel的操作. 分散(scatter):从Channel中读取在读操作中将读取的数据写入多个Buffer中.因此,Chann ...

  4. TCP基础知识(二)三次握手与四次挥手

    TCP详解(2):三次握手与四次挥手 TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你 ...

  5. Linux 创建python虚拟环境

    使用virtualenv包管理工具来管理虚拟环境 1.安装virtualenv 不知啥原因,第一次安装超时失败,第二次下载到30%超时失败,第三次才安装成功 2.创建虚拟环境 只有python2.7及 ...

  6. ubuntu 16.10安装nginx

    1 : cd /usr/local 2 : sudo wget http://nginx.org/download/nginx-1.2.8.tar.gz 3 : sudo tar -zxvf ngin ...

  7. 用CSS隐藏页面元素的5种方法

    1.opacity设置一个元素的透明度只是从视觉上隐藏元素,对页面布局还是有影响,读屏软件会原样读出 2.visibility设置为hidden将隐藏我们的元素,对网页布局还是起作用,子元素也会被隐藏 ...

  8. UNIX/Linux系统管理技术手册(1)----脚本和shell

    1. 管道和重定向 (i) 要让第二条命令只有在第一条命令成功完成之后才执行,可以用一个 && 符号把两条命令隔开.例如: $ > /dev/null && cd ...

  9. Logistic Regression 之错误翻译

    根据周志华老师的讲法,这里 logistic 是对数几率的意思,所以正确的翻译方法应该叫 对数几率回归, 所以不要以为这个东西叫 逻辑回归,逻辑回归是错误的翻译.

  10. 微信jssdk 返回的 config invalid signature

    这几天一直在调试wxjssdk,按照api的需求,http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html ,先是根据a ...