最近學習了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