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

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

淺談Mybatis #和$區別以及原理

瀏覽:3日期:2023-10-23 16:42:34

總結:

1.#可以防止Sql 注入,它會將所有傳入的參數作為一個字符串來處理。2.$ 則將傳入的參數拼接到Sql上去執行,一般用于表名和字段名參數,$ 所對應的參數應該由服務器端提供,前端可以用參數進行選擇,避免 Sql 注入的風險

為什么?

為什么# 和 $ 的作用不同,Mybatis 對他們做了哪些慘無人道的處理,我們看一下下面的例子,并追蹤一下源碼總結。

示例代碼:

創建一個 tb_class 表(具體字段不做解釋)。

創建一個 ClassDao.java 并使用注解的方式 ,tableName 代表查詢的表,id代表主鍵 :

public interface ClassDao { /** * 測試 # 和 $ 符號區別 * @param tableName 表名 * @param id 主鍵 * @return */ @Select('select * from ${tableName} where class_id = #{id}') ClassInfo selectEntityByTableNameAndId(@Param('tableName') String tableName, @Param('id') Integer id);}

創建一個Test 方法:

@Test public void testMybatis() throws IOException { ClassInfo classInfo = classDao.selectEntityByTableNameAndId('tb_class', 1); System.err.println('classInfo : ' + JSONObject.toJSONString(classInfo)); }

源碼分析:

看過代碼的小伙伴應該知道, Mybatis 執行 入口是 DefaultSqlSession.selectOne()方法。我們Debug 啟動 testMybatis()方法,并在 DefaultSqlSession.selectOne()添加斷點,一行行執行Mybatis 代碼:

淺談Mybatis #和$區別以及原理

一步步向下走,當走到代碼: org.apache.ibatis.executor.statement.PreparedStatementHandler#query方法時,可以看到 PreparedStatement 相信大家對這個應該不會陌生,預編譯Sql并通過占位符的方式放置參數,現在 我們對比一下我們在 Dao 中的 sql : select * from ${tableName} where class_id = #{id}

淺談Mybatis #和$區別以及原理

如圖所示,我們會發現, Mybatis 已經將 sql中 ${tableName} 替換成了 tb_class ,#{id} 也已經變成了 占位符 ?,生成了 Sql : select * from tb_class where class_id = ?。這已經是一目了然了,Mybaitis 封裝了JDBC ,執行時會將我們注解 或 Mapper 中的 Sql 和參數進行處理,并交給 PreparedStatement 來執行。

至于Mybatis怎么修改的Sql 大家可以Debug追蹤 org.apache.ibatis.mapping.BoundSql 中參數 sql 來理解。

到此這篇關于淺談Mybatis #和$區別以及原理的文章就介紹到這了,更多相關Mybatis #和$區別內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 数显恒温油浴-电砂浴-高温油浴振荡器-常州迈科诺仪器有限公司 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 制冷采购电子商务平台——制冷大市场 | elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 桁架楼承板-钢筋桁架楼承板-江苏众力达钢筋楼承板厂 | 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 科普仪器菏泽市教育教学仪器总厂 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 苏州教学设备-化工教学设备-环境工程教学模型|同科教仪 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 截齿|煤截齿|采煤机截齿|掘进机截齿|旋挖截齿-山东卓力截齿厂家报价 | 学生作文网_中小学生作文大全与写作指导 | 旗帜网络笔记-免费领取《旗帜网络笔记》电子书 | 膜片万向弹性联轴器-冲压铸造模具「沧州昌运模具」 | 北京公积金代办/租房发票/租房备案-北京金鼎源公积金提取服务中心 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 软启动器-上海能曼电气有限公司| 继电器模组-IO端子台-plc连接线-省配线模组厂家-世麦德 |