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
------------------ 微信支付掃碼贊賞我--------------
