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