傳值設置mybatis查詢的 列名(字段名),以及如何查看mybatis中執行的SQL語句

 
最近學習了mybatis,並用ssm框架(Spring,Springmvc,mybatis)搭建項目。使用mybatis的好處就不多說了,請自行查找。

由於本人的mybatis是屬於看着視頻速成的那種,所以遇到了很多坑。廢話不多說了,開始正題:

但是今天遇到一個問題,在導出表格的時候,由於導出的數據不固定,所以需要動態的傳入查詢表的字段名。問題雖簡單,但對於我這種小白來說就有些困擾。

於是一開始就使用了那種中規中矩的方式來寫:

<select id="expoertExcel" parameterType="java.util.List" resultType="TeacherInfo">
      select 
      <foreach collection="list" item="item" index="index" separator="," >
           #{item}
      </foreach>
      from teacherinfo
</select>
咋一看沒啥問題啊,怎麼看都對。然而在打開導出的excel表格時就出現了坑爹的情況。導出的信息全部是字段名字,沒有一條真正的數據。

這就尷尬了,啥情況啊?想來想去就想到了查看  mybatis 執行的SQL語句,經過一番搜索,很容易找到通過日誌打印SQL腳本。

就是通過配置log4j配置文件查看SQL。這時就能看到在控制檯輸出了信息

 Preparing:select ?,?,?,? from teacherinfo 
 Parameters: tno(String), tname(String), tbirthday(String), tage(String)

這下就不明白了,這樣看着也沒有錯啊。於是麼,有去苦心研究去了。突然看到一篇文章寫的 #{} 和 ${}  的區別;
原來 #{} 就是一個佔位符  所以看到了是一個個?的存在。在處理接受的字段名是就會當做字符串處理加上引號  所以查詢sql語句就成了

select "tno" , "tname" , "tbirthday" , "tage" from teacherinfo 

這樣查出來的不是字段名才奇了怪了呢
然後果斷換成${}  這次就發現果然沒毛病了

 Preparing: select tno , tname , tbirthday , tage from teacherinfo 

不過呢雖然實現了,數據庫就不安全了。所以儘量不要使用${}


http://blog.csdn.net/kobi521/article/details/16941403


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章