2-SSM框架篇-4

简介: 本文详解MyBatis多表查询(关联/集合映射)、动态SQL(9种标签及OGNL执行原理)、延迟加载(association/collection支持)、批量插入(foreach用法)及主键返回机制,涵盖核心开发实践要点。(239字)

16- Mybatis如何实现多表查询

Mybatis是新多表查询的方式也有二种 :

第一种是 : 编写多表关联查询的SQL语句 , 使用ResultMap建立结果集映射 , 在ResultMap中建立多表结果集映射的标签有associationcollection

<resultMap id="Account_User_Map" type="com.heima.entity.Account">
    <id property="id" column="id"></id>
    <result property="uid" column="uid"></result>
    <result property="money" column="money"></result>
    <association property="user">
        <id property="id" column="uid"></id>
        <result property="username" column="username"></result>
        <result property="birthday" column="birthday"></result>
        <result property="sex" column="sex"></result>
        <result property="address" column="address"></result>
    </association>
</resultMap>
<!--public Account findByIdWithUser(Integer id);-->
<select id="findByIdWithUser" resultMap="Account_User_Map">
    select  a.*,  username, birthday, sex, address  from account a , user u where a.UID = u.id and a.ID = #{id} ;
</select>

第二种是 : 将多表查询分解为多个单表查询, 使用ResultMap表的子标签associationcollection标签的select属性指定另外一条SQL的定义去执行, 然后执行结果会被自动封装

<resultMap id="Account_User_Map" type="com.heima.entity.Account" autoMapping="true">
    <id property="id" column="id"></id>
    <association property="user" select="com.heima.dao.UserDao.findById" column="uid" fetchType="lazy"></association>
</resultMap>
<!--public Account findByIdWithUser(Integer id);-->
<select id="findByIdWithUser" resultMap="Account_User_Map">
    select * from account where  id = #{id}
</select>

17-Mybatis都有哪些动态sql?能简述一下动 态sql的执行原理吗?

Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态 拼接sql的功能,Mybatis提供了9种动态sql标签 trim|where|set|foreach|if|choose|when|otherwise|bind。

其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此 来完成动态sql的功能。

18- Mybatis是否支持延迟加载?

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是 一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|false。

19- 如何使用Mybatis实现批量插入 ?

使用foreach标签 , 它可以在SQL语句中进行迭代一个集合。foreach标签的属性主 要有item,index,collection,open,separator,close。

  • collection : 代表要遍历的集合 ,
  • item 表示集合中每一个元素进行迭代时的别名,随便起的变量名;
  • index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用;
  • open 表示该语句以什么开始
  • separator 表示在每次进行迭代之间以什么符号作为分隔符
  • close 表示以什么结束

20- Mybatis 批量插入是否能够返回主键

可以, 返回的主键在传入集合的每个对象属性中封装的

相关文章
|
20天前
|
存储 缓存 NoSQL
4-Redis篇-1
本文详解Redis在项目中的三大应用:热点缓存、业务数据存储(如验证码、排行榜)及分布式锁;涵盖5种基础数据类型、RDB/AOF双持久化机制、惰性+定期混合过期策略,以及8种内存淘汰策略。
|
1月前
|
Arthas 人工智能 Java
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
Arthas Agent 是基于阿里开源Java诊断工具Arthas的AI智能助手,支持自然语言提问,自动匹配排障技能、生成安全可控命令、循证推进并输出结构化报告,大幅降低线上问题定位门槛。
949 64
我们做了比你更懂 Java 的 AI-Agent -- Arthas Agent
|
29天前
|
小程序 NoSQL 调度
跑腿小程序配送费到底怎么定?低价真的能带来订单吗?
本文剖析跑腿小程序配送费设计误区,指出“低价≠多单”,揭示其本质是成本控制、调度效率与利益分配的综合模型。详解阶梯计价、动态加费、数据库设计及防并发方案,强调以履约稳定和骑手收益平衡替代盲目压价。(239字)
|
20天前
|
存储 JSON 开发工具
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(12)Worktree + Task Isolation (Worktree 任务隔离)
本章引入 Git worktree 实现任务隔离:为每个任务分配独立目录与分支,通过任务 ID 双向绑定控制平面(`.tasks/`)与执行平面(`.worktrees/`),配合事件总线记录全生命周期,解决多任务并发修改冲突问题,提升可恢复性与可观测性。
483 0
|
20天前
|
SQL 存储 缓存
3-MySQL篇-4
本文详解MySQL性能优化三大维度:设计上选合适引擎(InnoDB/MyISAM)、字段类型与范式;功能上优化索引、缓存、分库分表;架构上主从复制、读写分离。另涵盖超大分页优化、慢查询定位及EXPLAIN执行分析方法。(239字)
3-MySQL篇-4
|
5天前
|
存储 安全 Java
ConcurrentHashMap 深度解析:从 JDK7 到 JDK8 的演进与并发安全保障
本文详解 Java 中 `ConcurrentHashMap` 的演进:JDK7 采用分段锁(Segment)提升并发性;JDK8 重构为 CAS + synchronized + 红黑树,支持并发扩容与更优查询性能。对比差异,剖析线程安全机制与使用要点。
88 12
|
1天前
|
人工智能 JavaScript 安全
零基础搞定OpenClaw(小龙虾)Windows安装与使用,附最新部署包
OpenClaw(小龙虾)是2026年热门开源AI智能体,本地运行、零代码、可视化,支持办公/开发自动化。隐私安全、5–10分钟一键部署,内置Git/Python/Node.js,适配Win10/11,支持微信/飞书联动与多模型切换。
92 3
|
8天前
|
人工智能 IDE 测试技术
Claude Code 编程哲学正在改变一切:从“理解代码”到“跑通代码”
本文剖析Coding Agent范式演进:传统“理解优先”向量方案在真实工程中失效,因代码动态性、理解≠修改、上下文增噪;Claude Code转向“终端调试范式”,以执行反馈驱动多轮试错;CodeGraph仅优化检索,未解修改正确性难题。核心转变是从“看懂代码”到“跑通代码”,标志AI编程进入执行驱动新阶段。
|
9天前
|
Web App开发 Windows
FDM下载安装教程:fdm_x64_setup_6.14.2.3973完整使用指南
Free Download Manager(FDM)6.14.2.3973是专为Win系统优化的免费下载利器:支持HTTP/FTP/BT/磁力链,多线程加速达浏览器3–5倍,断点续传、轻量无广告。本文详解安装、浏览器接管、BT下载及限速/批量等实用设置,助你秒变下载高手。
466 5
|
20天前
|
缓存 NoSQL 调度
4-Redis篇-4
本文详解Redis三大核心问题:缓存雪崩(大量key同时失效,需加随机过期时间)、热点数据保障(采用LFU淘汰策略)、分布式锁实现(基于SETNX,解决死锁、超时、归一、可重入及阻塞等问题),并附实战应用案例。