Mybatis 直接執行SQL 好久不更新博客了,今天開發遇到一個問題就是如何在mybatis中直接執行sql,直接上代碼: <select id="selectBysql" parameterType="java.lang.String" resultType="java.lang.Integer"> ${sql}//#{sql} </select> 上網查了下,網上的解釋是: 使用${}代替#{} 解釋是:默認情況下, #{}語法會促使MyBatis生成PreparedStatement屬性並且使用PreparedStatement的參數(=?)來設置值。如果你想直接將未更改的字符串代入到sql中,可以使用${}也就是說,MyBatis看到 “#{}”會認為你在給sql中的變量賦值,就像JDBC編程中給問號賦值一樣(比如MyBatis會判斷它的類型,並自動在前后加單引號。而當MyBatis看到”${}”的時候會直接將之替換成變量的值而不做任何處理。所以在使用${}的時候,不需要像#{}一樣寫”jdbcType=VARCHAR”之類的屬性。 但是這樣做會報錯說:sql沒有getter方法 解決辦法就是,把sql放到一個vo里面去,用getter取出來在MyBatis中賦值就可以了,如下: <select id="selectBysql" parameterType="com.tuniu.car.data.center.monitor.vo.SqlVo" resultType="java.lang.Integer"> ${sql} </select> 其中 com.tuniu.car.data.center.monitor.vo.SqlVo 是: public class SqlVo { private String sql; public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } } 使用的時候,只要 SqlVo sql = new SqlVo(); sql.setSql(sqlString); 然后在 Mapper中傳入這個 sql 就可以了,如: List<Integer> selectBysql(SqlVo sql);
原文鏈接:https://blog.csdn.net/qq827245563/article/details/87871827
------------------ 微信支付掃碼贊賞我--------------
