最近学习了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.youkuaiyun.com/kobi521/article/details/16941403