MySql预编译笔记

查询mybatisXML文件中#和$占位符时,在MyBatis之#与¥区别以及sql预编译一文中有以下解释:

#{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。

¥{ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换,${ } 在预编译之前已经被变量替换了,这会存在 sql 注入问题

对于Sql预编译问题,探究mysql预编译预编译语句介绍,以mysql为例两篇博客解释的很清晰,以下是我的理解:

预编译分为服务器预编译(ServerPreParedStatement)和客户端预编译(ClientPrepareStatement),我理解的服务器是指mysql数据库;客户端是指jdbc驱动。

在jdbc驱动5.0.5版本后的版本默认关闭服务器预编译,需要指定 useServerPrepStmts=true 开启。

但是仅仅开启服务器预编译并不能提高效率,只有当指定 cachePrepStmts=true 同时开启预编译缓存时,对于频繁使用的语句才有可观的提升;对于不频繁使用的语句,服务端预编译本身会增加额外的round-trip,使用客户端预编译效率更高(+客户端缓存会有微小提升)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值