mybatis实现延迟加载多对一
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();}@Overridepublic 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();}/*@Overridepublic 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 provincialwhere 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;@Beforepublic void before() {// 因为需要关闭session 需要把session提取出去session = MybatisUtil.getSqlSession();dao = session.getMapper(ProvincialDao.class);}@Afterpublic void after() {if (session != null) {session.close();}}@Testpublic void test1() {Provincial provincial = dao.selectProvincialById(1);/*logger.debug("provincialId=1======>provincial:" + provincial);*//*logger.debug("provincialId=1======>country:" + provincial.getCountry());*/} }
转载于:https://www.cnblogs.com/wiseroll/p/7347003.html
mybatis实现延迟加载多对一相关推荐
- mybatis教程--延迟加载详解
延迟加载 1 使用延迟加载意义 在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度要快. 如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联 ...
- mybatis高级映射多对多查询(二)
在这篇博客中,我来介绍下mybatis中的多对多查询的案例,在mybatis中,如何使用ResultMap来实现多对多的查询? 案例:一个user可以有很多role,一个role可以有很多entitl ...
- mybatis手写多对多关联映射
mybatis手写多对多关联映射 1.一对一关联查询 1.1resultType实现 1.2resultMap实现 2.一对多关联查询 3.多对多关联查询 4.resultType与resultMap ...
- mybatis 的延迟加载
mybatis 的延迟加载 (1)什么是延迟加载? 延迟加载,也称为懒加载(LazyLoding). 当代码中执行到查询语句时,并不是直接到DB中执行select语句进行查询,而是根据设置好的延迟策略 ...
- mybatis一对多多对多
转:http://www.cnblogs.com/selene/p/4627446.html 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: View Code 测试数据代码: View ...
- Mybatis(五) 延迟加载和缓存机制(一级二级缓存)
踏踏实实踏踏实实,开开心心,开心是一天不开心也是一天,路漫漫其修远兮. --WZY 一.延迟加载 延迟加载就是懒加载,先去查询主表信息,如果用到从表的数据的话,再去查询从表的信息,也就是如果没用到从表 ...
- MyBatis(延迟加载 缓存)
mybatis目录 一对一延迟加载 1.在SqlMapConfig.xml中配置setting标签 2.在IAccoutDao.xml中配置association标签 3.测试类 4.成功运行 一对多 ...
- mybatis一对多 多对一
一.一对多: 实体类 package com.ming.entity;import java.util.List;public class Station {private String Sname; ...
- Mybatis中的多对一、一对一、一对多
首先在数据库创建3个表,老师表.学生表和课程表 其中 1 某一课程和老师是一对一的关系 2 所有课程和老师是多对一的关系 3 某一课程和学生是一对多的关系 表和表中的数据sql语句 /* Navica ...
- Mybatis - 一对多/多对一映射
文章目录 前言 项目结构 一.数据库表 1. 员工表 t_emp 2. 部门表 t_dept 二.实体类 1. Emp 员工实体类(添加多对一属性) 2. dept 部门实体类(添加一对多属性) 三. ...
最新文章
- 火遍全国的网络热梗“yyds”,创造者被判刑3年
- 第十次ScrumMeeting博客
- as3 java 交互_求大佬用 Java 实现这段 AS3 的 socket 通讯功能
- 音视频技术开发周刊 | 227
- 分布式系统基本副本协议
- xcode 4 最低的要求是 10.6.6的版本,如果你是 10.6.3的版本,又不想升级的话。可以考虑通过修改版本号的方法进行安装
- uva 10026 Shoemaker's Problem(排序)
- 初识 Vue(01)---(输出 Hello World)
- 测试工程师应懂的Python知识
- slf4j打印未捕获异常信息_谁再悄咪咪的吃掉异常,我上去就是一 JIO
- 华为harmonyos公测,华为开启HarmonyOS2.0开发者Beta公测招募第二期
- x86 android 显卡 tablet2,Re: android4.4.2将tablet更改为phone
- 加密WebSphere Application Server系统密码
- 第一届腾讯社招广告大赛总结
- 【转载】MAC帧在经过路由器时,其源地址和目的地址会发生改变,路由器的目的地址会出现子在MAC帧中”如何理解?
- matlab 复权数据,〖Matlab〗基于通达信股价数据的复权处理(fantuanxiaot版本)
- 解决联通宽带域名劫持
- Q50:TCP如何保证可靠性?
- keras进行时间序列预测
- 怎么彻底删除office注册表信息?
热门文章
- java中reg=new,JavaScript replace new RegExp使用介绍
- javascript拖拽之从浏览器外拖拽(drag)
- Hadoop2.7.3完全分布式集群搭建(三节点)
- 还在使用集合类完成这些功能?不妨来看看 Guava 集合类!!!
- jenkins根据已打包的镜像,自动生成正式镜像
- git还原所有更改,拉取远程分支到本地
- 某些情况下java md5 base64_encode 与 php md5 base64_encode的签名
- dubbox 2.8.4的配置和使用
- php的process_field,使用Boost :: Process运行php命令
- 有关风向及风向处理的笔记