电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Mybatis動態SQL的實現示例

瀏覽:51日期:2023-10-22 11:10:40

場景

在實際應用開發過程中,我們往往需要寫復雜的 SQL 語句,需要拼接,而拼接SQL語句又稍微不注意,由于引號,空格等缺失可能都會導致錯誤。Mybatis提供了動態SQL,也就是可以根據用戶提供的參數,動態決定查詢語句依賴的查詢條件或SQL語句的內容。

動態SQL標簽

if 和 where 標簽

<!--動態Sql : where / if--> <select resultType='com.lks.domain.User'> select <include refid='tableAllkey'/> from users <where> <if test='id != null and id != 0'>AND id = #{id} </if> <if test='name != null and name != ’’'>AND name = #{name} </if> <if test='county != null and county != ’’'>AND county = #{county} </if> </where> </select>

一般開發列表業務的查詢條件時,如果有多個查詢條件,通常會使用 標簽來進行控制。 標簽可以自動的將第一個條件前面的邏輯運算符 (or ,and) 去掉,正如代碼中寫的,id 查詢條件前面是有“and”關鍵字的,但是在打印出來的 SQL 中卻沒有,這就是 的作用。打印SQL語句的使用可以在mybatis-config文件中添加setting標簽:

<settings> <!-- 打印查詢語句 --> <setting name='logImpl' value='STDOUT_LOGGING' /> </settings>

choose、when、otherwise 標簽

這三個標簽需要組合在一起使用,類似于 Java 中的 switch、case、default。只有一個條件生效,也就是只執行滿足的條件 when,沒有滿足的條件就執行 otherwise,表示默認條件。

<!--動態Sql: choose、when、otherwise 標簽--> <select resultType='com.lks.domain.User'> select * from users <where> <choose><when test='name != null and name != ’’'> AND name = #{name}</when><when test='county != null and county != ’’'> AND county = #{county}</when><otherwise> AND id = #{id}</otherwise> </choose> </where> </select>

在測試類中,即使同時添加name和county的值,最終的sql也只會添加第一個屬性值。

set 標簽

使用set標簽可以將動態的配置 SET 關鍵字,并剔除追加到條件末尾的任何不相關的逗號。使用 if+set 標簽修改后,在進行表單更新的操作中,哪個字段中有值才去更新,如果某項為 null 則不進行更新,而是保持數據庫原值。

<!--動態Sql: set 標簽--> <update parameterType='com.lks.domain.User'> update users <set> <if test='name != null and name != ’’'>name = #{name}, </if> <if test='county != null and county != ’’'>county = #{county}, </if> </set> where id = #{id} </update>

trim 標簽

trim 是一個格式化標簽,可以完成< set > 或者是 < where > 標記的功能。主要有4個參數:① prefix:前綴

② prefixOverrides:去掉第一個and或者是or

③ suffix:后綴

④ suffixOverrides:去掉最后一個逗號,也可以是其他的標記

<!--動態Sql: trim 標簽--> <select resultType='com.lks.domain.User'> select * from users <trim prefix='where' suffix='order by age' prefixOverrides='and | or' suffixOverrides=','> <if test='name != null and name != ’’'>AND name = #{name} </if> <if test='county != null and county != ’’'>AND county = #{county} </if> </trim> </select>

foreach 標簽

foreach標簽主要有以下參數:item :循環體中的具體對象。支持屬性的點路徑訪問,如item.age,item.info.details,在list和數組中是其中的對象,在map中是value。index :在list和數組中,index是元素的序號,在map中,index是元素的key,該參數可選。open :表示該語句以什么開始close :表示該語句以什么結束separator :表示元素之間的分隔符,例如在in()的時候,separator=','會自動在元素中間用“,“隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該參數可選。

list批量插入

<!--動態Sql: foreach標簽, 批量插入--> <insert useGeneratedKeys='true' keyProperty='id'> insert into users (name, age, county, date) values <foreach collection='list' item='user' separator=',' >(#{user.name}, #{user.age}, #{user.county}, #{user.date}) </foreach> </insert>

Mybatis動態SQL的實現示例

從結果可以看出,我們一下插入了兩條數據,每條數據之間使用“,”進行分割,separator=',' 的作用就是如此。其中< foreach >標簽內部的屬性務必加上item.

list集合參數

<!--動態Sql: foreach標簽, list參數查詢--> <select resultType='com.lks.domain.User'> SELECT * from users WHERE id in <foreach collection='list' item='id' open='(' close=')' separator=',' > #{id} </foreach> </select>

Mybatis動態SQL的實現示例

可以看出我們的 SQL 語句新增了:( ? , ? ) ,前后的括號由 open='(' close=')' 進行控制,用“?”占位符占位,并通過separator以:“,”隔開,內部兩個循環遍歷出的元素。array 集合與 list 的做法也是類似的:

<!--動態Sql: foreach標簽, array參數查詢--> <select resultType='com.lks.domain.User'> select * from users WHERE id in <foreach collection='array' item='id' open='(' close=')' separator=','> #{id} </foreach> </select>

map參數

< map> 標簽需要結合MyBatis的參數注解 @Param()來使用,需要告訴Mybatis配置文件中的collection='map'里的map是一個參數:

<!--動態Sql: foreach標簽, map參數查詢--> <select resultType='com.lks.bean.User'> select * from users WHERE <foreach collection='map' index='key' item='value' separator='='> ${key} = #{value} </foreach> </select>

需要主要${}和#{}的使用。

到此這篇關于Mybatis動態SQL的實現示例的文章就介紹到這了,更多相關Mybatis動態SQL內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 宽带办理,电信宽带,移动宽带,联通宽带,电信宽带办理,移动宽带办理,联通宽带办理 | 安徽泰科检测科技有限公司【官方网站】 | 电镀标牌_电铸标牌_金属标贴_不锈钢标牌厂家_深圳市宝利丰精密科技有限公司 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 微动开关厂家-东莞市德沃电子科技有限公司 | 巩义市科瑞仪器有限公司| 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 火锅底料批发-串串香技术培训[川禾川调官网] | 金库门,金库房,金库门厂家,金库门价格-河北特旺柜业有限公司 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 胀套-锁紧盘-风电锁紧盘-蛇形联轴器「厂家」-瑞安市宝德隆机械配件有限公司 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 | 大数据营销公司_舆情监测软件_上海SEO公司-文军营销官网 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 湖南自考_湖南自学考试网| 中视电广_短视频拍摄_短视频推广_短视频代运营_宣传片拍摄_影视广告制作_中视电广 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 | 微信小程序定制,广州app公众号商城网站开发公司-广东锋火 | 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 杭州成人高考_浙江省成人高考网上报名| 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 广东佛电电器有限公司|防雷开关|故障电弧断路器|智能量测断路器 广东西屋电气有限公司-广东西屋电气有限公司 |