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

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

Mybatis中處理特殊SQL處理邏輯解析

瀏覽:6日期:2023-09-28 21:00:59
目錄0、前言1、模糊查詢2、動態表名3、獲取自增的組件4、批量刪除0、前言

在MyBatis中可能會有一些特殊的SQL需要去執行,一般就是模糊查詢、批量刪除、動態設置表名、添加功能獲取自增的主鍵這幾種,現在分別來進行說明。為了方便演示 ,定義了訪問的接口

public interface SQLMapper { /** * 根據用戶名模糊查詢用戶信息 */ List<User> getUserByLike(@Param('username') String username); /** * 批量刪除 */ int deleteMore(String ids); /** * 查詢指定表中的數據 */ List<User> getUserByTableName(String tableName); /** * 添加用戶 */ void insetUser(User user);}1、模糊查詢

模糊查詢非常的有用,對于一些訪問量不是很大的搜索都是直接使用模糊查詢的方式來做的。SQLMapper類:

public interface SQLMapper { /** * 根據用戶名模糊查詢用戶信息 */ List<User> getUserByLike(@Param('username') String username);}

對于SQLXml的編寫;

<!-- List<User> getUserByLike(@Param('username') String username);--><!-- 使用#{},因為包括在單引號里,會被認為是字符串的一部分:select * from t_user where username like '%#{username}%'--><!-- 三種方式--> <select resultType='User'> <!-- 第一種 select * from t_user where username like '%${username}%' 第二種 select * from t_user where username like concat('%', #{username}, '%')--> <!--第三種 推薦使用-->select * from t_user where username like '%'#{username}'%' </select>

需要注意的是Mybatis對JDBC進行了進一步封裝,使得我們可以更加便捷的使用Java操作數據庫。Mybatis獲取參數值有兩種方式:#{}和${}

在大部分情況下,#{}和${}都能相互替代,使用兩者之一即可,更加推薦使用#{},因為可以防止SQL注入問題,但是由于#{}和${}本質上的不同,部分SQL語句使用#{}和${}需要格外注意

#{}和${}本質區別

#{}本質上是占位符賦值,為字符串類型或日期類型的字段進行賦值時,可以自動添加單引號${}本質上是字符串拼接,為字符串類型或日期類型的字段進行賦值時,需要手動加單引號

這個場景下,使用#{}和${}都能達到目的,但是用法稍有不同如果是直接使用

<select resultType='pojo.User'>select * from user where user_name like '%#{username}%'</select>

這種方式,?被作為是字符串來處理了。

將#{}換成${}

<select resultType='pojo.User'> select * from user where user_name like '%${username}%'</select>

成功執行如果非要使用#{},也不是沒有解決辦法使用""拼接

<select resultType='pojo.User'> select * from user where user_name like '%'#{username}'%'</select>

執行結果

或者是使用concat()函數來拼接

<select resultType='pojo.User'> select * from user where user_name like concat('%',#{likeString},'%')</select>

結果是;

2、動態表名

在某些場景下,我們需要來回操作各種表,但SQL語句功能一致,這時我們可以使用動態表名,即傳參為表名類型,這時就要從#{}和${}中進行選擇了Mapper接口

List<User> selectAllFromTable(@Param('tableName') String tableName);

如果是直接使用#{}的方式

<select resultType='pojo.User'> select * from #{tableName}</select>

結果報錯,原因在于#{}為占位符賦值,傳參為String的話就會自動補上單引號'',而表名不允許添加單引號,所以導致出錯。

直接使用${}的方式

<select resultType='pojo.User'> select * from ${tableName}</select>

結果成功了,所以在動態表名的情況下,我們只能使用${}

3、獲取自增的組件

需要在xml中配置 useGeneratedKeys , keyProperty 兩個屬性的值.

<!-- void insetUser(User user);--><!-- 方法的返回值是固定的useGeneratedKeys 設置當前標簽中的sql使用了自增的主鍵 (id)keyProperty 將自增的主鍵的值 賦值給 傳輸到映射文件中的參數的某個屬性(user.id)--> <insert useGeneratedKeys='true' keyProperty='id'>insert into t_user values(null, #{username}, #{password},#{age},#{gender},#{email}) </insert>4、批量刪除

有些場景,需要我們根據id數組批量刪除記錄,這個時候也有一些坑由于id數組的長度是不確定的,所以我們不能確定參數的個數,但是我們可以使用in關鍵字,這個時候我們將id數組轉為字符串進行傳參就好了。[1,2,3] => 1,2,3Mapper接口

Integer deleteByIds(String Ids);

使用#{}

<delete id='deleteByIds'> delete from user where id in (#{ids})</delete>

結果報錯,原因在于in后面的小括號里面的'1,2,3'為字符串類型且為一個整體,與整數類型不符,因此不能使用#{}

使用${}

<delete id='deleteByIds'> delete from user where id in (${ids})</delete>

結果成功了,看來有些場景不得不使用${}

到此這篇關于Mybatis中處理特殊SQL處理邏輯的文章就介紹到這了,更多相關Mybatis特殊SQL處理內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MsSQL 數據庫
主站蜘蛛池模板: 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 神马影院-实时更新秒播 | 顺辉瓷砖-大国品牌-中国顺辉 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 数字展示在线_数字展示行业门户网站 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 干洗店加盟_洗衣店加盟_干洗店设备-伊蔻干洗「武汉总部」 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | SRRC认证|CCC认证|CTA申请_IMEI|MAC地址注册-英利检测 | 小学教案模板_中学教师优秀教案_高中教学设计模板_教育巴巴 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 石英粉,滑石粉厂家,山东滑石粉-莱州市向阳滑石粉有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 中国在职研究生招生信息网| 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 湖南教师资格网-湖南教师资格证考试网 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 上海质量认证办理中心 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 苏州教学设备-化工教学设备-环境工程教学模型|同科教仪 |