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. IIS下自定义错误页面配置的两种方式(亲测可行)--IIS服务器

    网站自定义错误页面的设置,大家应该都知道它的重要性……不多说,下面带大家一步步在IIS下设置网站自定义错误页面…… 1.首先进入你的网站主页,找到[错误页](注意是IIS下的错误页不是.NET错误页) ...

  2. 本地存储之localStorage

    localStorage 本地存储 .对象.存数据 .取数据 存储的数据量在20M左右 localStorage 是window下面的属性,用的时候可以省略window 数据只能存储字符串类型的 lo ...

  3. 用编写一个简单的记事本(C#实现)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. Spring框架学习之高级依赖关系配置(二)

    紧接着上篇内容,本篇文章将主要介绍XML Schema的简化配置和使用SpEL表达式语言来优化我们的配置文件. 一.基于XML Schema的简化配置方式 从Spring2.0以来,Spring支持使 ...

  5. python抓去网页一部分

    import sys, urllib2 headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9. ...

  6. float 浮动

    浮动最开始的目的是为了让文字环绕图片(一个图片和多行文字对齐)   1.包裹性:元素添加 float 属性之后 自动变成 inline-block 元素,能设置 宽高 2.破坏性:破坏自身高度,还会使 ...

  7. ruby 正则表达式 匹配规则

  8. Asp.Net MVC 中的 Cookie(译)

    Asp.Net MVC 中的 Cookie(译) Cookie Cookie是请求服务器或访问Web页面时携带的一个小的文本信息. Cookie为Web应用程序中提供了一种存储特定用户信息的方法.Co ...

  9. hibernate flushMode 错误

    1 十一月 15, 2017 10:13:36 上午 org.apache.struts2.dispatcher.Dispatcher error 2 严重: Exception occurred d ...

  10. C#中泛型之Dictionary

    1.命名空间:System.Collections.Generic(程序集:mscorlib)2.描述: 1).从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组 ...