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

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

Mybatis 將table表名作為參數傳入操作

瀏覽:22日期:2023-10-20 18:13:29

使用 $ 符

如在mapper.xml里面的使用:

Mybatis 將table表名作為參數傳入操作

在mapper層就把這個表名當做普通的參數傳入即可:

Mybatis 將table表名作為參數傳入操作

同理,其實如果真的使用了$ ,在不考慮安全的范疇里面,也可以把一些手動拼接的sql語句作為參數傳入。

補充知識:MyBatis動態傳入表名,字段名參數的解決辦法--用于分表--表名是動態的

一直在使用Mybatis這個ORM框架,都是使用mybatis里的一些常用功能。今天在項目開發中有個業務是需要限制各個用戶對某些表里的字段查詢以及某些字段是否顯示,如某張表的某些字段不讓用戶查詢到。這種情況下,就需要構建sql來動態傳入表名、字段名了?,F在對解決方法進行下總結,希望對遇到同樣問題的伙伴有些幫助。

動態SQL是mybatis的強大特性之一,mybatis在對sql語句進行預編譯之前,會對sql進行動態解析,解析為一個BoundSql對象,也是在此處對動態sql進行處理。下面讓我們先來熟悉下mybatis里#{}與${}的用法:

在動態sql解析過程,#{}與${}的效果是不一樣的:

#{ } 解析為一個 JDBC 預編譯語句(prepared statement)的參數標記符。

如以下sql語句

select * from user where name = #{name};

會被解析為:

select * from user where name = ?;

可以看到#{}被解析為一個參數占位符?。

${ } 僅僅為一個純碎的 string 替換,在動態 SQL 解析階段將會進行變量替換

如以下sql語句:

select * from user where name = ${name};

當我們傳遞參數“sprite”時,sql會解析為:

select * from user where name = 'sprite';

可以看到預編譯之前的sql語句已經不包含變量name了。

綜上所得, ${ } 的變量的替換階段是在動態 SQL 解析階段,而 #{ }的變量的替換是在 DBMS 中?!?/p>

#{}與${}的區別可以簡單總結如下:

#{}將傳入的參數當成一個字符串,會給傳入的參數加一個雙引號

${}將傳入的參數直接顯示生成在sql中,不會添加引號

#{}能夠很大程度上防止sql注入,${}無法防止sql注入

${}在預編譯之前已經被變量替換了,這會存在sql注入的風險。如下sql

select * from ${tableName} where name = ${name}

如果傳入的參數tableName為user; delete user; --,那么sql動態解析之后,預編譯之前的sql將變為:

select * from user; delete user; -- where name = ?;

--之后的語句將作為注釋不起作用,頓時我和我的小伙伴驚呆了?。?!看到沒,本來的查詢語句,竟然偷偷的包含了一個刪除表數據的sql,是刪除,刪除,刪除?。?!重要的事情說三遍,可想而知,這個風險是有多大。

${}一般用于傳輸數據庫的表名、字段名等

能用#{}的地方盡量別用${}

進入正題,通過上面的分析,相信大家可能已經對如何動態調用表名和字段名有些思路了。示例如下:

<select resultType='java.util.Map' parameterType='java.lang.String' statementType='STATEMENT'> select ${columns} from ${tableName} where COMPANY_REMARK = ${company} </select>

要實現動態調用表名和字段名,就不能使用預編譯了,需添加statementType='STATEMENT'' 。

statementType:STATEMENT(非預編譯),PREPARED(預編譯)或CALLABLE中的任意一個,這就告訴 MyBatis 分別使用Statement,PreparedStatement或者CallableStatement。默認:PREPARED。這里顯然不能使用預編譯,要改成非預編譯。

其次,sql里的變量取值是${xxx},不是#{xxx}。

因為${}是將傳入的參數直接顯示生成sql,如${xxx}傳入的參數為字符串數據,需在參數傳入前加上引號,如:

String name = 'sprite';

name = '’' + name + '’';

mybatis動態調用表名和字段名,還可以應用于日志的收集上,如數據庫的日志表,每隔一個月動態建一個日志表,表名前綴相同(如log_201610,log_201611等),這樣實現日志的分月分表存儲,方便日志的分析。

以上這篇Mybatis 將table表名作為參數傳入操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 南京欧陆电气股份有限公司-风力发电机官网 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 贝朗斯动力商城(BRCPOWER.COM) - 买叉车蓄电池上贝朗斯商城,价格更超值,品质有保障! | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 留学生辅导网-在线课程论文辅导-留学生挂科申诉机构 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 聚合氯化铝厂家-聚合氯化铝铁价格-河南洁康环保科技 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 光环国际-新三板公司_股票代码:838504 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 干培两用箱-细菌恒温培养箱-菲斯福仪器 | CNC机加工-数控加工-精密零件加工-ISO认证厂家-鑫创盟 | 液氮罐_液氮容器_自增压液氮罐_杜瓦瓶_班德液氮罐厂家 | 协议书_协议合同格式模板范本大全| 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 |