1、数据库表

CREATE TABLE `country` (
`cid` int(4) NOT NULL AUTO_INCREMENT COMMENT '国家id',
`cname` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE `provincial` (
`pid` int(4) NOT NULL AUTO_INCREMENT,
`pname` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`countryid` int(4) NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

2、实体类

package cn.bdqn.bean;

/**
*国家的实体类
*/
public class Country { private Integer cId; // 国家的编号
private String cName; // 国家的名称 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();
} @Override
public String toString() {
return "Country [cId=" + cId + ", cName=" + cName;
} }
package cn.bdqn.bean;

/**
*
*省会对应的实体类
*/
public class Provincial {
private Integer pId; // 省会的编号
private String pName; // 省会名称
// 关联的国家属性
private Country country; public Country getCountry() {
return country;
} public void setCountry(Country country) {
this.country = country;
} public Integer getpId() {
return pId;
} public void setpId(Integer pId) {
this.pId = pId;
} public String getpName() {
return pName;
} public void setpName(String pName) {
this.pName = pName;
} public Provincial(Integer pId, String pName) {
super();
this.pId = pId;
this.pName = pName;
} public Provincial() {
super();
} /*@Override
public String toString() {
return "Provincial [pId=" + pId + ", pName=" + pName + ", country="
+ country + "]";
}*/ }

3、mybatis.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 通过properties文件配置连接数据库的四要素 -->
<properties resource="jdbc.properties" /> <settings>
<!-- 打开延迟加载的开关 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 将积极加载改为消息加载即按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings> <!-- 设置别名 两种方式 -->
<typeAliases>
<!-- 01.这种方式别名可以随意取 但是如果有多个 类 就需要配置多个typeAlias
<typeAlias type="cn.bdqn.bean.Student" alias="student"/> -->
<package name="cn.bdqn.bean"/><!-- 02.这种方式要求别名必须使用简写的类名 -->
</typeAliases> <!-- 配置运行环境 可以有多个 environment -->
<environments default="mysql"><!-- 默认采用的环境 -->
<environment id="mysql"> <!-- 环境的名称 -->
<!--配置事务管理 采用jdbc默认的事务管理 之后整合的时候 肯定是交给了 spring来处理了 -->
<transactionManager type="JDBC" />
<!-- 数据源采用的是连接池技术 POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件信息 -->
<mappers>
<mapper resource="cn/bdqn/dao/StduentMapper.xml" />
<!-- <mapper resource="cn/bdqn/dao/CountryMapper.xml" /> -->
<mapper resource="cn/bdqn/dao/ProvincialMapper.xml" />
</mappers>
</configuration>

4、Dao层接口

package cn.bdqn.dao;

import cn.bdqn.bean.Provincial;

public interface ProvincialDao {
/**
* 根据省会的id查询出省会和对应国家的信息
*/
Provincial selectProvincialById(Integer pId);
}

5、Mapper.xml

<?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.ProvincialDao">
<select id="selectCountryByProvincialId" resultType="country">
select cid,cname from country
where cid = #{countryid}
</select> <resultMap type="provincial" id="provincialMap">
<id column="pid" property="pId"/>
<result column="pname" property="pName"/>
<association property="country" javaType="Country"
select="selectCountryByProvincialId" column="countryid" >
</association>
</resultMap> <select id="selectProvincialById" resultMap="provincialMap">
select pid,pname,countryid from provincial
where pid = #{pid}
</select>
</mapper>

6、测试类

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.Provincial;
import cn.bdqn.dao.ProvincialDao;
import cn.bdqn.util.MybatisUtil; public class Test1 {
private Logger logger = Logger.getLogger(Test1.class);
SqlSession session;
ProvincialDao dao; @Before
public void before() {
// 因为需要关闭session 需要把session提取出去
session = MybatisUtil.getSqlSession();
dao = session.getMapper(ProvincialDao.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());*/
}
}

mybatis实现延迟加载多对一的更多相关文章

  1. Mybatis的延迟加载和立即加载

    Mybatis的延迟加载和立即加载 示例:在一对多中,当我们有一个用户,他有100个帐户 问题1:在查询用户时,要不要把关联的账户查出来? 问题2:在查询账户时,要不要把关联的用户信息查出来? 问题1 ...

  2. mybatis的延迟加载、一级缓存、二级缓存

    mybatis的延迟加载.一级缓存.二级缓存 mybatis是什么? mybatis是一个持久层框架,是apache下的开源项目,前身是itbatis,是一个不完全的ORM框架,mybatis提供输入 ...

  3. Mybatis之延迟加载机制

    1.  延迟加载的含义: 用到的时候才会去进行相关操作 2.  延迟加载的例子: 2.1 spring的BeanFactory,在getBean()的时候才创建Bean 2.2 物理分页查询,只有点击 ...

  4. Mybatis的延迟加载和缓存

    1. MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力.       注意:MyBatis的延迟加 ...

  5. Mybatis 测试延迟加载

    在学习mybatis的延迟加载时,对 lazyLoadingEnabled 和 aggressiveLazyLoading 的区别并不理解,特别是对查询的条件不同时,执行的查询语句也不一样,所以还是测 ...

  6. MyBatis框架——延迟加载

    延迟加载也叫惰性加载或者懒加载,使⽤延迟是为了提⾼程序的运⾏效率,具体是通过尽量少执⾏ SQL 语句来提升效率.Java 程序与数据库的交互频率越低越好,MyBatis 提供的延迟加载功能就可以做到这 ...

  7. Mybatis框架的多对一关联关系(六)

    一.一对多的关联映射 一对多关联查询多表数据 1接口 public interface IDeptDAO { //根据部门编号查询该部门单个查询 public Emp getEmpById(Integ ...

  8. MyBatis学习--延迟加载

    简介 在resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能.例如:我们查询订单并 ...

  9. 8.Mybatis的延迟加载

    在Mybatis中的延迟加载只有resultMap可以实现,ResultMap 可以实现高级映射(association,collection可以实现一对1和一对多的映射),他们具有延迟加载的功能,r ...

随机推荐

  1. C++ new 解析重载

    C++ new 解析重载 new的三种形式: (1)operator new(运算符new) (2)new operator(new 操作) (3)placement new(特殊的new操作)(不分 ...

  2. 磁盘管理 之 parted命令添加swap,文件系统

    第1章 磁盘管理 1.1 必须要了解的. 1.1.1 ps aux 命令中 RSS 与VSZ的含义 rss 进程占用的物理内存的大小 单位:kb : vsz 进程占用的虚拟的内存大小(物理内存+swa ...

  3. BZOJ-1864-[Zjoi2006]三色二叉树(树形dp)

    Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...

  4. JavaScript Function.call() 函数详解

    语法 functionObject.call( [ thisObj [, arg1 [, arg2 [, args...]]]] ) call()函数用于调用当前函数functionObject,并可 ...

  5. Grunt打包seajs项目

    在使用seajs时,常常将若干脚本分为多次require进来,这样开发中比较方便,但是,会增加http请求次数,在生产环境中需要进行打包合并.压缩等操作. 以Grunt构建工具为例,对一个seajs项 ...

  6. PHP静态化技术

    很多框架的模板引擎都有页面静态化的功能  目的是为了优化网站运行时间 静态化分两种  纯静态和伪静态 一. 纯静态 纯静态展示的是实实在在的静态页面 运行PHP程序 判断是否存在静态页 如果存在 展示 ...

  7. .NET Core多平台项目模板eShopOnContainers编译手记

    之前写了一个功能性的文件上传asp.net core的小程序,加上点七七八八的东西,勉强能够应付了,打算学习一下微软的官方.NET CORE微服务示例https://github.com/dotnet ...

  8. Python学习中的一些小例子

    这篇文章包括用Python编写的斐波那契数列,三位数的水仙花数和百钱买百鸡的基础代码 斐波那契数列: ''' def hanshu(n): n_1 = 1 n_2 = 1 m = n sumn = 0 ...

  9. java_IO流读取本地文件

    package com.ht.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoun ...

  10. python3基础视频教程

    随着目前Python行业的薪资水平越来越高,很多人想加入该行业拿高薪.有没有想通过视频教程入门的同学们?这份Python教程全集等你来学习啦! python3基础视频教程:http://pan.bai ...