例子1、

    <?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="com.atguigu.dao.KeyDao"> <!--public List<Key> getKeysByLockId(Integer id);
按照锁子id查出所有的key
-->
<select id="getKeysByLockId" resultType="com.atguigu.bean.Key">
select * from t_key where lockid=#{id}
</select> <!-- public Key getKeyByIdSimple(Integer id); -->
<!-- 查询key的时候也可以带上锁子信息 -->
<!--
private Integer id;//钥匙的id
private String keyName;//钥匙的名
private Lock lock;//当前钥匙能开哪个锁;
-->
<!-- id keyname lockid -->
<select id="getKeyByIdSimple" resultMap="mykey02">
select * from t_key where id=#{id}
</select>
<resultMap type="com.atguigu.bean.Key" id="mykey02">
<id property="id" column="id"/>
<result property="keyName" column="keyname"/>
<!--告诉mybatis自己去调用一个查询查锁子
select="":指定一个查询sql的唯一标识;mybatis自动调用指定的sql将查出的lock封装进来
public Lock getLockByIdSimple(Integer id);需要传入锁子id
告诉mybatis把哪一列的值传递过去
column:指定将哪一列的数据传递过去
-->
<association property="lock"
select="com.atguigu.dao.LockDao.getLockByIdSimple"
column="lockid" fetchType="lazy"></association>
</resultMap> <!-- getKeyById(Integer) -->
<!--
private Integer id;//钥匙的id
private String keyName;//钥匙的名
private Lock lock;//当前钥匙能开哪个锁; id keyname lockid lid lockName
-->
<select id="getKeyById" resultMap="mykey">
select k.id,k.`keyname`,k.`lockid`,
l.`id` lid,l.`lockName` from t_key k
left join t_lock l on k.`lockid`=l.`id`
where k.`id`=#{id}
</select> <!-- 自定义封装规则:使用级联属性封装联合查询出的结果 -->
<!-- <resultMap type="com.atguigu.bean.Key" id="mykey">
<id property="id" column="id"/>
<result property="keyName" column="keyname"/>
<result property="lock.id" column="lid"/>
<result property="lock.lockName" column="lockName"/>
</resultMap> --> <!-- mybatis推荐的 <association property=""></association>-->
<resultMap type="com.atguigu.bean.Key" id="mykey">
<id property="id" column="id"/>
<result property="keyName" column="keyname"/>
<!-- 接下来的属性是一个对象,自定义这个对象的封装规则;使用association;表示联合了一个对象 -->
<!-- javaType:指定这个属性的类型 -->
<association property="lock" javaType="com.atguigu.bean.Lock">
<!-- 定义lock属性对应的这个Lock对象如何封装 -->
<id property="id" column="lid"/>
<result property="lockName" column="lockName"/>
</association>
</resultMap>
    例子2、

    <?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="com.atguigu.dao.LockDao"> <!-- public Lock getLockByIdByStep(Integer id);
id lockName
1 1号锁
-->
<select id="getLockByIdByStep" resultMap="mylockstep">
select * from t_lock where id=#{id}
</select>
<!-- collection分步查询 -->
<resultMap type="com.atguigu.bean.Lock" id="mylockstep">
<id property="id" column="id"/>
<result property="lockName" column="lockName"/>
<!-- collection指定集合类型的属性封装规则 -->
<collection property="keys"
select="com.atguigu.dao.KeyDao.getKeysByLockId"
column="{id=id}"></collection>
<!-- {key1=列名,key2=列名} -->
</resultMap> <!--
update bs_book
set title=?,author=?,price=?,sales=?,stock=?,img_path=?
where id=?"; String sql = "update bs_book set";
if(employee.getTitle()){
sql+="title=?,"
}
if(){
sql + = "price=?,";
}
--> <!--public Lock getLockByIdSimple(Integer id); -->
<select id="getLockByIdSimple" resultType="com.atguigu.bean.Lock">
select * from t_lock where id=#{id}
</select> <!-- public Lock getLockById(Integer id); -->
<select id="getLockById" resultMap="mylock">
select l.*,k.id kid,k.`keyname`,k.`lockid` from t_lock l
left join t_key k on l.`id`=k.`lockid`
where l.id=#{id}
</select> <!--
private Integer id;
private String lockName;
//查询锁子的时候把所有的钥匙也查出来
private List<Key> keys; id lockName kid keyname lockid
3 303办公室的锁子 3 303钥匙1 3
3 303办公室的锁子 4 303钥匙2 3
3 303办公室的锁子 5 303钥匙3 3
-->
<resultMap type="com.atguigu.bean.Lock" id="mylock">
<id property="id" column="id"/>
<result property="lockName" column="lockName"/>
<!--
collection:定义集合元素的封装
property="":指定哪个属性是集合属性
javaType:指定对象类型;association
ofType="":指定集合里面元素的类型
-->
<collection property="keys" ofType="com.atguigu.bean.Key">
<!-- 标签体中指定集合中这个元素的封装规则 -->
<id property="id" column="kid"/>
<result property="keyName" column="keyname"/>
</collection>
</resultMap>

Mybatis的关联关系的配置的更多相关文章

  1. mybatis之关联关系

    前言:在我们之前的hibernate中我们是学过了关联关系的,所以我们在本章给讲一讲mybatis的关联关系. mybatis的关联关系一对多的测试1.通过逆向工程生成Hbook,HbookCateg ...

  2. Mybatis的二级缓存配置

    一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的.  Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的 ...

  3. 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置

    [转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...

  4. Mybatis非mapper代理配置

    转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  5. MyBatis 源码分析——配置信息

    MyBatis框架的启动前期需要加载相关的XML配置信息.从官网上我们可以了解到他具有十几个节点.其中笔者认为比较重要的节点是settings节点.properties节点.environments节 ...

  6. Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html     http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...

  7. mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置

    mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置 ============================== 蕃薯耀 2018年3月14 ...

  8. MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...

  9. Java Web开发之Spring | SpringMvc | Mybatis | Hibernate整合、配置、使用

    1.Spring与Mybatis整合 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web ...

  10. mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?

    mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...

随机推荐

  1. Kotlin:【Map集合】集合创建、集合遍历、元素增加

    to本身是一个函数

  2. VuePress 博客之 SEO 优化(四) Open Graph protocol

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲讲 ...

  3. Redis缓存异常及解决方案

    本文分享自天翼云开发者社区<Redis缓存异常及解决方案>,作者:l****n 本文向读者解释了Redis使用过程中,数据不一致.缓存雪崩.缓存击穿和缓存穿透等问题的定义,并给出对应的解决 ...

  4. 安全可信|权威认证!天翼云边缘安全加速平台AccessOne护航企业行稳致远!

    8月25日,由中国信息通信研究院(以下简称"中国信通院")和中国通信标准化协会联合主办的2023首届SecGo云和软件安全大会公布了可信安全最新评估结果,天翼云通过"首批 ...

  5. InfluxDB修改数据存储位置(二进制安装版)

    InfluxDB修改数据存储位置(二进制安装版) 在二进制安装方式下,修改InfluxDB的数据存储位置通常涉及以下几个步骤.以下步骤以InfluxDB 2.x版本为例进行说明,因为InfluxDB ...

  6. C#/.NET/.NET Core技术前沿周刊 | 第 25 期(2025年2.1-2.9)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  7. FreeSql学习笔记——1.入门

    前言 学习过程中,使用的是.Net 5 WebApi项目,数据库使用的是SQL Server,主要会整理下常用的api,现在就开始吧~   初始化 先选择一个WebCoreApi项目进行创建,创建完项 ...

  8. Transformer-Squared:停止微调 LLMs

    Transformer-Squared:停止微调 LLMs 自适应大语言模型背后的架构.Transformer-Squared 的数学与代码,以及奇异值分解 DALL-E 生成的图片 我们已经进入了这 ...

  9. Typora Emoji图标

    转自: https://www.cnblogs.com/wangjs-jacky/p/12011208.html People  :smile:  :laughing:    :blush:  :sm ...

  10. 牛客题解 | 单组_spj判断YES与NO

    题目 题目链接 解题思路 后台有spj代码,能对同学们的输出数据进行校验,符合条件即可通过. 附赠 spj 代码 #include <iostream> #include <fstr ...