Mybatis 自定義SQL語句(執行任意語句)


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

------------------ 微信支付掃碼贊賞我--------------

        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM