MyBaits参数传递注意事项

MyBatis可以使用的基本数据类型和Java的复杂数据类型。
基本数据类型,String,int,date等。

public StudentMdl getStudentById(int id);
但是使用基本数据类型,只能提供一个参数 。所以需要使用Java实体类,或Map类型做参数类型。通过#{}可以直接得到其属性。

如果想传入多个参数,则需要在接口的参数上添加@Param注解。

public List<StudentMdl> queryStudentList(@Param(value="age") int age, 
                                         @Param(value="sex") String sex, 
                                         @Param(value="birthday") Date birthday);

XML映射文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--Function:学生管理-->
<mapper namespace="com.test.StudentDao">
	<!-- resultMap设置 -->
	<resultMap id="studentMap" type="com.test.StudentMdl">
	    <id property="id" column="id"/>
	    <result property="stu_name" column="name"/>
	    <result property="stu_sex" column="sex"/>
	    <result property="stu_age" column="age"/>
	    <result property="stu_birthday" column="birthday"/>
	</resultMap>

	<select id="getStudentById" parameterType="int" resultMap="studentMap">
	    SELECT *
	    FROM student_tab
	    WHERE id = #{id}
	</select>

	<select id="queryStudentList" resultMap="studentMap">
	    SELECT *
	    FROM student_tab
	    WHERE stu_age = #{age}
	    AND stu_sex = #{sex}
	    AND stu_birthday = #{birthday}
	</select>
</mapper>
字符串代入法

默认的情况下,使用#{}语法会促使MyBatis 生成PreparedStatement 属性并且使用PreparedStatement 的参数(=?)来安全的设置值。尽量这些是快捷安全,也是经常使用的。但有时候你可能想直接未更改的字符串代入到SQL 语句中。比如说,对于ORDER BY,你可能会这样使用:

ORDER  BY  ${columnName}

但MyBatis 不会修改和规避掉这个字符串。

注意:这样地接收和应用一个用户输入到未更改的语句中,是非常不安全的。这会让用户能植入破坏代码,所以,要么要求字段不要允许客户输入,要么你直接来检测他的合法性 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值