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. JDBC(MySQL)一周学习总结(二)

    上一篇文章我们总结了获取数据库连接以及操作数据表的一些知识点,本篇将继续上次的文章给大家分享! 1. 上一篇文章我们可以对数据表进行增删改查的操作了,对与一些小项目的部分功能我们也足以胜任.但现在有一 ...

  2. Python filter用法

    class filter(object) | filter(function or None, iterable) --> filter object | | Return an iterato ...

  3. Linux上MySQL的安装

    a.检测是否安装了mysql rpm  -qa | grep mysql b.卸载系统自带的mysql rpm -e --nodeps 卸载的包 rpm -e --nodeps mysql-libs- ...

  4. pie.htc 在IE下不起作用~~~

    一直用的IE11 然后选择其中的兼容模式来测试IE 7~10的情况. 最近由于客户要求 圆角阴影兼容IE,只能选择PIE.HTC的方案. 但是反复测试发现不起作用. 官方文档的几种说明: 1. pie ...

  5. mysql +keeplive+drbd高可用架构

    1MySQL+DRBD+keepalived高可用架构 DRBD(DistributedReplicatedBlockDevice)是一个基于块设备级别在远程服务器直接同步和镜像数据的开源软件,类似于 ...

  6. 如何部署Java_web项目到云服务器上

    步骤 1:购买 Linux 实例(略) 步骤2:安装JDK 本节介绍如何安装java jdk. 软件包中包含的软件及版本如下: Tomcat:1.8.0_121 说明:这是写文档时参考的软件版本.您下 ...

  7. mapbox-gl 开发包dev生成

    mapbox-gl简介 mapbox-gl采用webgl,提供在线地图实时渲染功能,具有以下特点: 1.多图层显示 2.图层元素显示样式在颜色.字体.大小范围等.是否显示等可实时更改 3.定位抓取选择 ...

  8. hiero_v2.0的下载安装和使用

    程序地址:http://www.n4te.com/hiero/hiero.jnlp http://slick.cokeandcode.com/demos/hiero.jnlp(目测该网址需翻*墙才能进 ...

  9. Redis全面介绍

    最近重新认识了一下Redis,借着这个机会,也整理一篇算是比较详尽和全面的文章吧.   缓存 缓存就是数据交换的缓冲区(称作Cache)——摘自百度百科.无论是在计算机硬件体系结构还是软件体系结构中, ...

  10. hibernate:There is a cycle in the hierarchy! 造成死循环解决办法

    下面是报的异常:在网上搜了关于:There is a cycle in the hierarchy!,才知道原来是因为死循环造成的!解决了好久,没有成功,后台不得已请教老大,老大说是因为在使用JSON ...