作者:乔9000 | 来源:互联网 | 2024-11-24 15:36
本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。
在MyBatis框架中,可以通过#和$两种方式来传递SQL查询参数。#方式通过预编译处理,提高了SQL执行的安全性和效率;而$方式则是直接将参数插入到SQL语句中,这种方式在查看日志时更为直观,尤其是在处理复杂的SQL语句时。
1) 当传递参数为一个实体对象时,接口定义如下:
public List getAttachment(Attachment query);
相应的XML配置如下所示:
<select id="getAttachment" resultMap="baseMap">
SELECT
<include refid="columns"/>
FROM
T_OA_ATTACH atta
WHERE 1 = 1
<if test="name != null and name !='' ">
AND atta.NAME like '%'||#{name,jdbcType=VARCHAR}||'%'
if>
<if test="type != null and type !='' ">
AND atta.TYPE = #{type,jdbcType=VARCHAR}
if>
<if test="path != null and path !='' ">
AND atta.PATH = #{path,jdbcType=VARCHAR}
if>
<if test="createUser != null and createUser !='' ">
AND atta.CREATE_BY = #{createUser,jdbcType=BIGINT}
if>
select>
2) 当传递参数为基本数据类型时,可以使用注解方式进行配置,例如:
@Update("UPDATE T_OA_ATTACH SET STATUS = '0' WHERE ID = #{id} ")
public int delAttachment(@Param("id") Long id);
如果使用XML配置,则可以这样设置:
<if test="id!= null and id!='' ">
AND atta.id= #{id,jdbcType=BIGINT}
if>
或者使用$方式:
<if test="id!= null and id!='' ">
AND atta.id= ${id}
if>
3) 当需要同时传递基本数据类型和对象时,接口定义示例如下:
public List getMyWapScheduling(@Param("curUserId")Long currentUserId, @Param("queryDayFirst")String dayFirst, @Param("query")MyScheduling query);
此时,需要使用@Param注解来修饰参数变量,并且对象中的参数需要使用对象名作为前缀来引用,以确保参数能够正确绑定。例如:
and d.period_rq between to_date('${queryDayFirst}', 'yyyymmdd') and last_day(to_date('${queryDayFirst}', 'yyyymmdd'))
<if test="query.pId != null and query.pId !='' ">
and a2.p_id = #{query.pId,jdbcType=BIGINT}
if>