Mybatis 自定義SQL語句(執行任意語句)
阿新 • • 發佈:2020-11-30
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