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. Java调用C++类库--JNI

    JNI是Java平台中的一个重要的功能,这里我把我做的Demo总结一下,分享一下,我会把每个步骤尽量的详细的展现出来. 这里我就不讲解JNI的原理了,google,百度一下,到处都是 好了,直接来讲步 ...

  2. 操作系统--进程管理1--单个CPU情况

    1.进程概念 进程:一个正在执行的程序:操作系统提出进程概念目的:是为了跟踪程序在执行期间的状态.而程序只是一段代码,是一个静态的概念 无法准确描述程序执行时候发生的一切.程序代码被加载进内存后就以进 ...

  3. 0_Simple__cppIntegration

    引用已经编好的 .cu 和 .cpp 代码来混合使用.在 main.cpp 中调用了使用GPU的 cppIntegration.cu (测试函数也在其中) 和使用CPU的 cppIntegration ...

  4. 面向亿万级用户的QQ一般做什么?——兴趣部落的Web同构直出分享

    作者:李强,腾讯web开发工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/348.html 一.什么是同构 ...

  5. java 中 针对数组进行的工具类

    1.遍历数组的方法: public static void printfArray(int[] arr)  2. 获取数组中最大值: public static int getMax(int[] ar ...

  6. Servlet 学习笔记

    Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...

  7. C#.Net调用VB.Net中的MY

    用过VB.NET的人应该只要MY有多强大了吧,是不是很想在C#中也能调用呢? 当然是可以的,.net作为微软的跨语言的平台,必须是能实现的,不然微软就自己打自己嘴巴了~ 回到正题上: 1.在程序中加上 ...

  8. [转载] Java集合---HashMap源码剖析

    转载自http://www.cnblogs.com/ITtangtang/p/3948406.html 一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射 ...

  9. SpringAware

    哈哈,终于把分布式的课程演讲给混过去了,下面开始随便自己学点东西. 正题:SpringAware--------在实际项目中,用到spring容器的本省功能资源,这是Bean必须意识到Spring容器 ...

  10. net user命令详解

    net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...