当前位置: 首页 > article >正文

Mybatis进阶(一)

一、MyBatis 基于接口代理方式实现 Dao 层开发1.1 介绍采用 Mybatis 的基于接口代理方式实现 持久层 的开发这种方式是我们后面进入企业的主流。 基于接口代理方式的开发只需要程序员编写 Mapper 接口Mybatis 框架会为我们动态生成实现类的对象。1.2 开发规范重要1.定义Mapper接口接口方法名与XML中id一致参数/返回值与SQL匹配2.编写Mapper XML映射文件文件名与接口名一致如UserMapper.xmlnamespace指向接口全类名3.配置MyBatis扫描Mapper在mybatis-config.xml中指定Mapper位置4.获取代理对象并调用通过SqlSession.getMapper()获取接口代理对象直接调用方法二、MybatisConfig.xml配置文件2.1 配置内容在MybatisConfig.xml中配置文件的顺序如下1. properties属性2. settings全局配置参数3. typeAliases类型别名4. plugins插件5. environments环境集合属性对象--environment环境子属性对象-----transactionManager事务管理---------dataSource数据源6. mappers映射器2.2 properties属性作用将数据连接单独配置在db.properties中只需要在SqlMapConfig.xml中加载db.properties的属性值在SqlMapConfig.xml中就不需要对数据库连接参数进行硬编码。数据库连接参数只配置在db.properties中方便对参数进行统一管理其它xml可以引用该db.properties从而提高了效率。在resource目录下创建db.properties文件jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/mybatis jdbc.usernameroot jdbc.passwordrootMybatisConfig.xml引用如下?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration !--引入数据源properties文件-- properties resourcedb.properties /properties !-- 配置使用的日志 -- settings setting namelogImpl valueLOG4J/ /settings !--设置别名-- typeAliases !--为多个实体类配置别名-- !-- typeAlias typecom.sy.pojo.User aliasuser/-- !-- typeAlias typecom.sy.pojo.Orders aliasorders/-- !--扫描包的方式-- package namecom.sy.pojo/ /typeAliases !--配置数据库环境可以配置多套环境 开发环境:development 测试环境 -- environments defaultdevelopment !--开发环境-- environment iddevelopment !-- transactionManager 事务管理器对象 typejdbc 设置事务管理方式 -- transactionManager typeJDBC/ !-- dataSource:数据源对象 typePOOLED POOLED- 这种数据源的实现利用了池的概念将JDBC连接对象组织起来避免了创建新的连接实例时所必须的初始化和认证时间-- dataSource typePOOLED property namedriver value${jdbc.driver}/ property nameurl value${jdbc.url}/ property nameusername value${jdbc.username}/ property namepassword value${jdbc.password}/ /dataSource /environment /environments !-- mappers:加载sql映射文件,映射文件中写的是定义的sql语句-- mappers !-- 加载指定的 SQL 映射文件 -- mapper resourcemappers/UserMapper.xml/ mapper classcom.sy.mapper.UserMapper/ !--通过包扫描 要求:包的定义要和接口的包名保持一致-- package namecom.sy.mapper/ /mappers /configuration2.3 typeAliases类型别名在 mapper.xml 中定义很多的 statementstatement 需要 parameterType 指定输入参数的类型、需要 resultType 指定输出结果的映射类型。如果在指定类型时输入类型全路径不方便进行开发可以针对 parameterType 或 resultType 指定的类型定义一些别名在 mapper.xml 中通过别名定义方便开发。2.4 mappers映射器Mapper配置有两种方法第一种mapper resource /扫描指定的配置文件如mapper resourcemappers/UserMapper.xml /第二种mapper class /使用mapper接口类路径如mapper classcom.sy.pojo.UserMapper/三、动态sql语句3.1 动态sql语句介绍动态SQL通过变量值逻辑判断动态拼接SQL满足复杂业务的多条件数据库操作需求解决简单SQL无法覆盖的场景。3.2 动态sql主要解决的问题动态sql主要解决根据条件判断附加动态sql主要解决多条件变化查询实现自动判断记录字段是否需要更新根据条件判断附加条sql条件实现批量添加数据、批量修改数据、批量修删除数据等优化sql语句提高执行效率。3.3 where标签3.3.1where标签简介作用替代SQL的WHERE关键字根据条件动态生成WHERE子句。逻辑若条件成立自动添加WHERE关键字。若条件不成立则不添加WHERE。自动去除最近的无关AND/OR。格式where条件/where3.3.2where标签使用接口编写映射文件:测试程序:3.4 if标签3.4.1 if标签简介if标签表示逻辑条件判断如果条件成立就附加if/if之间的sql语句,如果条件不成立就不附加if/if之间的sql语句。格式:if test表达式sql语句/if3.4.2 条件中的转义符号如果在条件判断中加入 大于 小于号 这类的关键字跟xml文件中标签的符号冲突程序可能会出错所以使用转义符解决注意and 代表的是: or 代表的是||3.4.3 if标签使用接口编写:映射文件:注意: 字符串类型的数据需要做不等于空字符串校验。测试程序:3.5 sql片段3.5.1 sql片段简介在实际开发中会遇到许多相同的SQL比如根据某个条件筛选这个筛选很多地方都能用到我们可以将其抽取出来成为一个公用的部分这样修改也方便一旦出现了错误只需要改这一处便能处处生效了此时就用到了sql这个标签了。Sql中可将重复的sql提取出来使用时用include引用即可最终达到sql重用的目的。3.5.2 sql片段使用把username, sex, email提取出来作为sql片段注意:引用sql片段使用include标签refid指向sql片段的id如果共享其他mapper文件当中的sql片段只需要refid前面加上另外一个mapper映射文件的namespace即可3.6 set标签3.6.1 set标签简介set标签用于更新语句中代替set关键字可以有效对指定字段进行更新提升sql的执行效率。当set标签中有条件成立时就会附加set标签set标签会去除无关的逗号。set标签中一般嵌套if标签进行使用其格式为:setif testusername ! null and username ! username #{uname},/ifif testsex ! null and sex ! sex #{sex},/ifif testemail ! null and email ! email #{email},/if/set3.6.2 set标签使用接口编写:映射文件:测试程序:3.7 trim标签3.7.1 trim标签简介trim标签为万能标签可用于set或where等。属性:prefix表示要附加的前缀关键字suffix表示要附加的后缀关键字,prefixOverrides表示要忽略前置字符suffixOverrides表示要忽略后置字符。3.7.2 trim标签使用3.7.2.1 修改set标签接口编写:映射文件:测试程序:3.7.2.2 修改where标签接口编写:映射文件:测试程序:3.8 choose标签3.8.1 choose标签简介choose标签作用条件判断来拼接指定的条件它和if不太相同choose似类于java中的switch语句用法只要有条件成立其它判断将得不到执行如果所有条件都不成立则执行otherwise标签中的内容。3.8.2 choose标签使用接口编写:映射文件:测试程序:​​​​​​​

相关文章:

Mybatis进阶(一)

一、MyBatis 基于接口代理方式实现 Dao 层开发1.1 介绍采用 Mybatis 的基于接口代理方式实现 持久层 的开发,这种方式是我们后面进入企业的主流。 基于接口代理方式的开发只需要程序员编写 Mapper 接口,Mybatis 框架会为我们动态生成实现类的对象。1.2 开…...

[协程]-[详解]-launch与async

launch作用构建一个协程, 直接返回Job使用// lifecycleScope 协程作用域 lifecycleScope.launch { // 启动一个父协程delay(10000) // 模拟任务耗时 }源码解析public fun CoroutineScope.launch(context: CoroutineContext EmptyCoroutineContext,start: CoroutineStart Coro…...

开发者在 CSDN 的“修行”过程

目录 第一阶段:踩坑与复盘(底层输出) 第二阶段:CSDN 发帖逻辑(流量密码) 第三阶段:高阶答疑(建立信任) 第四阶段:涨粉与影响力变现(全链路总结…...

采购报销-发票预制及过账 增强供应商应付按订单行

1、术语发票校验:采购发票是供应商开给购货单位,据以付款、记账、纳税的依据。参照采购订单和采购入库单,按内容、价格进行发票正确性检查。一张发票过帐时,系统在供货商帐中创建一个未清项目,然后由财务会计在支付中结…...

OpenClaw 小龙虾保姆级安装教程

OpenClaw 小龙虾保姆级安装教程 小白 10 分钟搞定本地部署(Windows 系统 - 接入飞书) 引言 OpenClaw 最近实在是太火了,很多人已经做起了上门安装 500 块一次的生意,甚至有人计算下来说,靠这门手艺有机会年收入百万…...

安卓wakelock 学习

目录 1, wakelock 是什么 2,如何使用wakelock 3, 安卓系统中使用wakelock 的实例 4, 实际项目中wakelock 遇到的问题 1, wakelock 是什么 Wake Lock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠&…...

MySQL【表的约束上】

一、表的约束在 MySQL 数据库的使用过程中,我们会发现仅靠数据类型来限制字段远远不够 —— 数据类型的约束能力单一,无法从业务逻辑层面保证数据的正确性。比如要求用户表的邮箱字段唯一、订单表的用户 ID 必须关联存在的用户,这些需求都需要…...

CPS、CPA、CPL、CPC 是什么?联盟营销 4 大模式一次读懂

如果你正在研究联盟营销,却被各种名词绕得头大——CPS、CPA、CPL、CPC 到底是什么意思?差别在哪?什么时候该用?别急,这篇文章会用最简单的语言,在一分钟内让你彻底弄懂 4 大联盟营销模式,并教你…...

(104页PPT)DG1067全面企业绩效管理(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (104页PPT)DG1067全面企业绩效管理.pptx_IT运维服务质量评价体系资源-CSDN下载 资料解读:(104 页)DG1067 全面企业绩效管理 详细资料请…...

ZBlog 爆款主题宁静致远|1.6 万 + 下载、9.89 分、6 年更新,自媒体 / 资讯站首选主题

ZBlog爆款主题「宁静致远(Quietlee)」实测推荐!累计下载16141次,评分9.89/10,自2020年上线至今持续迭代近6年,适配Z-BlogPHP 1.7.0、PHP5.6及以上版本,是个人自媒体、资讯站、小型内容平台的建站…...

IT系统全生命周期管理和运营方案(Word)

1 项目总体概述1.1 项目背景1.2 蓝图架构1.3 核心业务流程1.4 系统总体架构1.5 系统业务模型流程1.6 实施阶段划分1.7 一阶段建设目标2 一阶段解决方案2.1 系统总体架构2.2 系统总体流程2.3 软件功能设计2.3.1 统一门户(含多租户、权限、用户、角色、菜单、授权管理…...

高通跃龙QCS9100平台上工业缺陷检测实战(1): 从摄像头到端侧推理的最小闭环

💡 前言 本系列将聚焦高通跃龙QCS9100平台实施工业缺陷检测。 本文第一篇我们在该QCS9100平台将缺陷检测链路完整跑通。 你跑完这篇,应该能看到两件非常具体的东西: runs/ 里不断冒出带框的图片终端里能看到每次推理大概多少毫秒、FPS 大概…...

论文党「反内耗」神器:Paperzz 把毕业论文初稿写成「开卷答题」,4 步搞定从 0 到成稿

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 谁懂啊家人们!写毕业论文就像在玩「地狱级闯关游戏」:对着空白文档发呆半天写不出开头…...

2026 学术写作破局:Paperzz 如何用「四步闭环法」解决毕业论文初稿难产,让你 3 天写完合格初稿

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 引言:被毕业论文初稿困住的年轻人,正在用一种更高效的方式毕业 2026 年,国…...

从选题到成稿零焦虑:Paperzz 毕业论文初稿写作,让学术创作告别 “卡壳式内耗”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 在毕业论文的漫长写作路上,你是否也陷入过这样的循环:对着空白文档发呆半天写不出开头…...

TMS320F2812光伏并网逆变器设计:高效MATLAB电路仿真与DSP代码实现结合方案,含...

TMS320F2812 光伏并网逆变器设计方案,附有相关的matlab电路文件,以及DSP的程序代码,方案、仿真文件、代码三者结合使用效果好,事半功倍。 备注:赠送逆变器并联环流matlab文件,基于矢量控制的环流抑制策略和下垂控制的环…...

鸿蒙中 应用的权限(一)

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新 一、权限管控 什么是应用权限? 系统提供一种通用权限访问方式,允许应用访问系统资源(如通讯录)和系统能力&#xff…...

LabVIEW图像处理框架核心结构示意图

labview通用图像处理框架程序源码 详情见图做图像处理的朋友应该都经历过这种尴尬:写个Demo三分钟搞定,项目一复杂就变成意大利面条代码。今天分享的这套LabVIEW通用框架,核心就三句话——状态机打底、队列传数据、插件式开发。咱们直接扒开源…...

Pyrene-PEG-NH2 氨基功能化芘荧光PEG活细胞成像与示踪探针

芘丁酸酯聚乙二醇氨基(Pyrene-PEG-NH2)是一种结合了芘(Pyrene)、聚乙二醇(PEG)和氨基(NH2)的多功能化合物。【基本信息】中文名称:芘丁酸酯-聚乙二醇-氨基;芘…...

【智慧商城 | 项目笔记】第六天

前言:智慧商城项目是关于前端的Vue2的项目,本系列文章,我讲总结我从这个项目中学到的知识点,写项目笔记。如果你也在初学Vue或想巩固Vue相关的知识,希望这系列文章可以帮助到你。 【智慧商城 | 项目笔记】第六天今日完…...

高速多串激光泵浦二极管驱动电路:可扩展、高电流、高电压、多重安全保护电路架构参考

高速多串激光泵浦二极管驱动电路,可扩展, 连续电流可达25A,支持最高电压90V; 调制频率可达10kHz 多重安全保护电路; 可单独屏蔽故障电流串; 闭环控制,带电流输出; 电路架构是基于多年…...

西门子V15及以上版本通用模拟量处理程序块:1200与1500模拟量滤波程序及报警功能

西门子1200和1500通用模拟量处理程序块,模拟量滤波程序,程序块可方便直接调用,用于过滤峰值且可以方便调用模拟量高低报警。 博图版本V15及以上。工业现场模拟量信号处理总带着点玄学,尤其是车间里那些老设备,时不时给…...

【Python一周入门】学习笔记归纳(二)六大基本类型

文章目录数字(Number)字符串String列表List元组Tuple字典Dictionary集合Set推导式列表推导式字典推导式集合推导式元组推导式(生成器推导式)数字(Number) 数字类型是客观的不可变的,分为整型,浮点型&#…...

Linux(1)的基本使用

系统每次开机默认进入字符界面[rootnode11 ~]# systemctl set-default multi-user.target系统每次开机默认进入图形界面[rootnode11 ~]# systemctl set-default graphical.targetweb界面登录(很少用)[rootnode11 ~]# systemctl enable --now cockpit.soc…...

LatentMorph:将隐式潜空间推理融入图像生成

目录 一、前言 二、 LatentMorph 论文概述 核心问题 方法:LatentMorph 实验结果 核心贡献 三、四个组件是怎么运作的,输入输出是啥 四个组件详解 1. 视觉记忆凝结器 (Memory Condensers) 2. 强化学习驱动的推理调用器 (Reason Invoker) 3.…...

2000-2024年上市公司迪博内部控制指数评分及评级数据

迪博内部控制指数简介迪博内部控制指数(DIB内部控制指数)由深圳迪博企业风险管理技术有限公司发布,是国内权威的上市公司内部控制评价体系。该指数从内部控制五要素(控制环境、风险评估、控制活动、信息与沟通、内部监督&#xff…...

基于Matlab的不变矩算法实现数字验证码识别过程及其GUI界面构建

基于matlab不变矩算法实现数字验证码 过程:先对验证图像进行去噪、定位、归一化等预处理,然后计算待识别数字的不变矩,再进行特征匹配,得到识别结果。 以Matlab软件为开发平台来进行设计实现及仿真,并构建相应的GUI界面…...

M3U8 调试不用愁,这款在线播放工具帮你高效搞定

在音视频开发、流媒体运维的日常工作中,M3U8 格式的流验证与调试是高频需求,不管是验证直播流链路是否通畅,还是排查点播 M3U8 播放异常,都需要一款便捷的工具来支撑。而本地播放器配置繁琐、原生浏览器对 HLS 协议支持有限&#…...

一款轻量高效的 M3U8 在线播放工具,开发者调试必备

在音视频开发、流媒体测试的日常工作中,我们经常会遇到 M3U8 格式的视频流验证需求 —— 不管是检查直播流的可用性,还是调试点播链接的播放兼容性,都需要一个便捷的工具来快速验证。而原生 HTML5 的 video 标签对 HLS 协议支持有限&#xff…...

常见二进制漏洞原理及分析

本文将介绍常见二进制漏洞类型及避免方法。一.虚拟内存的布局Linux中进程使用虚拟内存,再由MMU转换成物理内存,其虚拟内存布局如下,其中堆区向高 地址生长,栈区向低地址生长,且代码段和rodata段为只读属性。栈区 …...