1.场景

1把钥匙带1把锁

JavaBean:private Lock lock;//当前钥匙能开哪个锁;

1)、

interface KeyDao:

public Key getKeyByIdSimple(Integer id);//步一

interface LockDao:

public Lock getLockByIdSimple(Integer id);//步二

2)、

KeyDao.xml:

<!--     id  keyname     lockid   -->

<select id="getKeyByIdSimple" resultMap="mykey02">

select * from t_key where id=#{id}

</select>

LockDao.xml:

<select id="getLockByIdSimple" resultType="com.atguigu.bean.Lock">

select * from t_lock where id=#{id}

</select>

定义两个最原生简单的查询,作为两步

3)、KeyDao.xml:

<resultMap type="com.atguigu.bean.Key" id="mykey02">

<id property="id" column="id"/>

<result property="keyName" column="keyname"/>

<!--告诉mybatis自己去调用一个查询查锁子,步二

select="":指定一个查询sql的唯一标识;mybatis自动调用指定的sql将查出的lock封装进来

<!--column:指定将哪一列的数据传递过去,传递到LockDao.xml:

-->

<association property="lock"

select="com.atguigu.dao.LockDao.getLockByIdSimple"

column="lockid" fetchType="lazy"></association>

</resultMap>

【注意】LockDao.xml:中select * from t_lock where id=#{id}这个id是单个属性可以随便写{haha}

关键是会将KeyDao.xml:中column="lockid" 作为参数传入

Key表                                                            Lock表

4)、测试

KeyDao mapper = openSession.getMapper(KeyDao.class);

Key key = mapper.getKeyByIdSimple(1);

System.out.println(key);

【打印】

Key [id=1, keyName=1号钥匙, lock=Lock [id=1, lockName=1号锁]]

2.延迟加载(全局)和按需加载(属性)

由于分布查询的第二步mybatis自己去调用一个查询查锁子,步二,也就是说在测试的时候Key key = mapper.getKeyByIdSimple(1);返回的这个key一定是包括Lock信息的不管你需不需要。这就会造成严重的性能问题

在全局配置文件mybatis-config.xml配置两项

<settings>

<!-- 开启延迟加载开关 -->

<setting name="lazyLoadingEnabled" value="true"/>

<!-- 开启属性按需加载 -->

<setting name="aggressiveLazyLoading" value="false"/>

</settings>

测试:

Key key = mapper.getKeyByIdSimple(1);

System.out.println(key);//只会发一条sql,即步1

//          Thread.sleep(3000);

//          String lockName = key.getLock().getLockName();//规定这个时候再发第二条sql,即步2

//          System.out.println(lockName);

3.不过

<resultMap type="com.atguigu.bean.Key" id="mykey02">

<id property="id" column="id"/>

<result property="keyName" column="keyname"/>

<!--告诉mybatis自己去调用一个查询查锁子,步二

select="":指定一个查询sql的唯一标识;mybatis自动调用指定的sql将查出的lock封装进来

column:指定将哪一列的数据传递过去

-->

<association property="lock"

select="com.atguigu.dao.LockDao.getLockByIdSimple"

column="lockid" fetchType="lazy"></association>

</resultMap>

在<association></association>标签体里有一个属性

fetchType="lazy"/eager

会覆盖这两个全局配置

【串线篇】sql映射文件-分布查询(上)association 1-1的更多相关文章

  1. 【串线篇】sql映射文件-分布查询(下)cellection的1-n

    1.场景 一个门人手一把钥匙 1-n 一个Lock对应一个Key集合(collection自动整成list) Map不是collection的子接口或者实现类.Map是一个接口. JavaBean:p ...

  2. 【串线篇】SQL映射文件-联合查询(完结association+cellection)

    1.级联属性的方式封装查出1-1 查钥匙的时候顺别把对应的级联的那把锁也查出来 1).两个JavaBean,Key里有对应的Lock(private Lock lock;//当前钥匙能开哪个锁:) 2 ...

  3. 关于mybatis中sql映射文件模糊查询的使用

    1.从前台传递一个String类型的参数到后台进行查询,如果牵涉到模糊查询会报错,应该把参数封装到对象中再进行传递然后进行模糊查询 2.一个查询框,多个查询条件 <if test="c ...

  4. 二:SQL映射文件

    二:SQL映射文件 1.SQL映射文件: (1)mapper:映射文件的根元素节点,只有一个属性namespace(命名空间) 作用:用于区分不同的mapper全局唯一 绑定dao接口即面向接口编程, ...

  5. Mybatis sql映射文件浅析 Mybatis简介(三)

    简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML为载体映射SQL 之前提到过,各项配置信息将Mybatis应用的整 ...

  6. Mybatis sql映射文件浅析 Mybatis简介(三) 简介

    Mybatis sql映射文件浅析 Mybatis简介(三)   简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...

  7. MyBatis -- sql映射文件具体解释

    MyBatis 真正的力量是在映射语句中. 和对等功能的jdbc来比价,映射文件节省非常多的代码量. MyBatis的构建就是聚焦于sql的. sql映射文件有例如以下几个顶级元素:(按顺序) cac ...

  8. MyBatis 的基本要素—SQL 映射文件

    MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单.对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且 ...

  9. SSM - Mybatis SQL映射文件

    MyBatis 真正的力量是在映射语句中.和对等功能的jdbc来比价,映射文件节省很多的代码量.MyBatis的构建就是聚焦于sql的. sql映射文件有如下几个顶级元素:(按顺序) cache配置给 ...

随机推荐

  1. rk3328编译Linux固件

    一.编译 Linux 固件 这一章将介绍编译 ROC-RK3328-CC Linux 固件的整个流程. 1.1 准备工作 Linux 固件在如下的环境中编译: Ubuntu 16.04 amd64 安 ...

  2. 【Unity优化】Unity中究竟能不能使用foreach?

    关于这个话题,网络上讨论的很多,我也收集了一些资料,都不是很齐全,所以自己亲自测试,这里把结果分享给大家. foreach究竟怎么了? 研究过这个问题的人都应该知道,就是它会引起频繁的GC Alloc ...

  3. [CSP-S模拟测试]:X国的军队(贪心)

    题目描述 $X$国和$Y$国开战了! 作为$X$国的军事参谋,你了解到事态的严峻性.为了更好地应付敌人,你收集到了$Y$国城市中$n$个据点的信息,你打算攻破这$n$个据点! 每个据点$i$的信息由火 ...

  4. FCC 成都社区·前端周刊 第 10 期

    1. Node.js 10 正式发布 在过去的一周,Node.js 10.0.0 正式发布,带来大量改进和修复.这是自 Node.js Foundation 开展以来的第七个主要版本,并将在 2018 ...

  5. LLDB动态调试

  6. PHP常用工具函数之手机号相关

    1.手机号正确与否判定 //测试手机号 $phone = '17777777777'; $pattern = '/^1[356789]\d{9}$/'; $is = preg_match($patte ...

  7. 像计算机科学家一样思考python-第2章 变量、表达式和语句

    感想: 1.程序出现语义错误时,画状态图是一个很好的调试办法.打印出关键变量在不同代码处理后值的变化,就能发现问题的蛛丝马迹. 2.每当学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看 ...

  8. Vagrant 手册之同步目录 - 基本用法

    原文地址 - 概述 原文地址 - 基本用法 同步目录 Synced folder 支持在宿主机和客户机之间共享目录,从而允许你在宿主机的项目文件上工作,但是可以在客户机上编译并运行. 默认情况下,Va ...

  9. 第1 章 mysql数据库之简单的DDL和DML sql语句

    一.SQL 介绍 1.什么是sql? SQL,英文全称(Structured Query Language),中文是结构化查询语言,它是一种对关系数据库中数据进行定义和操作的语言方法,是大多数关系数据 ...

  10. 题解1433. 数码问题 (Standard IO)

    Description Alice有一个N*N的格子,把1-N^2按照从上到下从左到右的顺序填进表格中,允许在表格上进行两种操作: (1) 旋转行——这一行的数向右移动一个位置,而最后一列的数会移到第 ...