mybatis延迟加载一对多
1、实体类
package cn.bdqn.bean; import java.util.Set; /**
*国家的实体类
*/
public class Country { private Integer cId; // 国家的编号
private String cName; // 国家的名称 private Set<Provincial> provincials; public Integer getcId() {
return cId;
} public void setcId(Integer cId) {
this.cId = cId;
} public String getcName() {
return cName;
} public void setcName(String cName) {
this.cName = cName;
} public Country(Integer cId, String cName) {
super();
this.cId = cId;
this.cName = cName;
} public Country() {
super();
} public Set<Provincial> getProvincials() {
return provincials;
} public void setProvincials(Set<Provincial> provincials) {
this.provincials = provincials;
} @Override
public String toString() {
return "Country [cId=" + cId + ", cName=" + cName;
} } 2、dao层
package cn.bdqn.dao;
import cn.bdqn.bean.Country;
public interface CountryDao {
/**
* 根据国家的id查询出国家的信息 以及国家下面的省会信息
*/
Country selectCountryById(Integer cId);
}
3、Mapper文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
<mapper namespace="cn.bdqn.dao.CountryDao"> <select id="selectProvincialByCountryId" resultType="Provincial">
select pid,pname from provincial
where countryid=#{cid}
</select> <resultMap type="Country" id="countryMap">
<id property="cId" column="cid"/>
<result property="cName" column="cname"/>
<!--设置关联的集合属性
select:需要关联的查询语句
column: select关联语句中需要的参数 -->
<collection property="provincials" ofType="Provincial"
select="selectProvincialByCountryId"
column="cid"/>
</resultMap> <!-- 多表的查询 经常使用 可以使用延迟加载策略 -->
<select id="selectCountryById" resultMap="countryMap">
select cid,cname from country where cid=#{cid}
</select> </mapper>
4、测试类
package cn.bdqn.test; import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import cn.bdqn.bean.Country;
import cn.bdqn.bean.Provincial;
import cn.bdqn.dao.CountryDao;
import cn.bdqn.dao.ProvincialDao;
import cn.bdqn.util.MybatisUtil; public class Test1 {
private Logger logger = Logger.getLogger(Test1.class);
SqlSession session;
ProvincialDao dao;
CountryDao dao2; @Before
public void before() {
// 因为需要关闭session 需要把session提取出去
session = MybatisUtil.getSqlSession();
dao = session.getMapper(ProvincialDao.class);
dao2 = session.getMapper(CountryDao.class);
} @After
public void after() {
if (session != null) {
session.close();
}
} @Test
public void test1() {
Provincial provincial = dao.selectProvincialById(1);
/*logger.debug("provincialId=1======>provincial:" + provincial);*/
/*logger.debug("provincialId=1======>country:" + provincial.getCountry());*/
} @Test
public void test2() {
Country country = dao2.selectCountryById(1);
/*Set<Provincial> provincials = country.getProvincials();
for (Provincial provincial : provincials) {
logger.debug(provincial);
}*/
/*logger.debug("provincialId=1======>provincial:" + provincial);*/
/*logger.debug("provincialId=1======>country:" + provincial.getCountry());*/
}
}
mybatis延迟加载一对多的更多相关文章
- mybatis延迟加载——(十二)
1. 什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能 ...
- 【MyBatis】MyBatis 延迟加载策略
MyBatis 延迟加载策略 文章源码 什么是延迟加载 延迟加载,就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据,也被成为懒加载. 好处:先从单表查询,需要时再从关联表去关联查询,大大提 ...
- mybatis源代码分析:mybatis延迟加载机制改进
在上一篇博客<mybatis源代码分析:深入了解mybatis延迟加载机制>讲诉了mybatis延迟加载的具体机制及实现原理. 可以看出,如果查询结果对象中有一个属性是需要延迟加载的,那整 ...
- mybatis源代码分析:深入了解mybatis延迟加载机制
下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是 ...
- mybatis的一对多,多对一,以及多对对的配置和使用
1.本文章是无意中看见易百教程的Mybatis教程才注意到这个问题,平时都仅仅是在用CRUD,忽略了这方面的问题,真实十分羞愧 2.首先我们开始对mybatis的一对多的探究 根据这个应用场景 ...
- MyBatis延迟加载和缓存
一.延迟加载 1.主对象的加载: 根本没有延迟的概念,都是直接加载. 2.关联对象的加载时机: 01.直接加载: 访问主对象,关联对象也要加载 02.侵入式延迟: 访问主对象,并不加载关联对象 访问主 ...
- Mybatis延迟加载、缓存
一.Mybatis中的延迟加载 1.延迟加载背景:Mybatis中Mapper配置文件中的resultMap可以实现高级映射(使用association.collection实现一对一及一对多(多对多 ...
- Mybatis 延迟加载策略
延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. 好处: 先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速 ...
- Mybatis延迟加载的实现以及使用场景
首先我们先思考一个问题,假设:在一对多中,我们有一个用户,他有100个账户. 问题1:在查询用户的时候,要不要把关联的账户查出来? 问题2:在查询账户的时候,要不要把关联的用户查出来? 解答:在查询用 ...
随机推荐
- 值得学习的C/C++开源框架(转)
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- 用编写一个简单的记事本(C#实现)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- C# linq对分组操作执行子查询
本主题演示创建查询的两种不同方式,此查询将源数据排序成组,然后分别对每个组执行子查询. 每个示例中的基本方法是使用名为 newGroup 的"接续块"对源元素进行分组,然后针对 n ...
- 【Kafka源码】SocketServer启动过程
SocketServer主要用于接收外部的网络请求,并把请求添加到请求队列中. 一.入口 在KafkaServer.scala中的start方法中,有这样的入口: socketServer = new ...
- 关于Linux CentOS 7 时区时间修改问题
原文:http://blog.csdn.net/yin138/article/details/52765089 今天遇到时区的问题,操作系统为CentOS 7 1. 首先进入终端,使用su root ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
- GCC 中的编译器堆栈保护技术
GCC 中的编译器堆栈保护技术 前几天看到的觉得不错得博客于是转发了,但这里我补充一下一些点. GCC通过栈保护选项-fstack-protector-all编译时额外添加两个符号,__stack_c ...
- SVN服务迁移备份操作步骤
SVN服务备份操作步骤 1.准备源服务器和目标服务器 源服务器:192.168.1.250 目标服务器:192.168.1.251 root/rootroot 2.对目标服务器(251)装SVN服务器 ...
- Python学习笔记整理总结【语言基础篇】
一.变量赋值及命名规则① 声明一个变量及赋值 #!/usr/bin/env python # -*- coding:utf-8 -*- # _author_soloLi name1="sol ...
- JavaScript 经典之一 闭包
作为一个前端开发者,闭包是必须要攻克掉的障碍.据说好多面试者挂在闭包面试上.下面我就给大家讲一下我理解中的闭包.不说太多的废话,直接进入主题. 变量作用域 学习编程语言需要明白,变量的作用域.变量作用 ...