使用Mybatis查询信息,这件事大家应该都是会做的。但是其中还是有一些细节问题值得注意,所以写出来提醒自己以后注意。
首先说一下mapping映射文件,其中的mapper namespace选项对应interface,里面有需要操作sql的方法。
然后就是具体sql,如下
<select id="selectUsers" parameterType="java.util.Map" resultType="com.mybatis.model.BCuCallList">
select
<include refid="column"/>
from b_cu_call_list
where INST_DATE like '${instDate}%'
</select>
其中id对应interface中的方法名称,如果只有一个查询条件,parameterType可以使用String或者Integer,然是如果有多个条件的话,要使用Map,(注意这里不可以使用List)而且sql语句中引用的变量(图中的instDate)一定要和程序中Map的key值保持一致。resultType一般为实体的名字。
再来说一下精准查询和模糊查询的区别,精准查询使用#,例如:#{custNo},如果模糊查询,使用 '${instDate}%'。
这里再说一下# 和 $的区别:
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{user_id},如果传入
的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".因此#可以
有效防止sql注入。
2. $将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值
为order by user_id, 如果传入的值是id,则解析成的sql为order by id。因此$不可以防止sql注入,不到迫不得已
不要使用。