MyBatis:映射文件
点击查看代码
<?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">
<mapper namespace="com.kw.mapper.EmployeeMapper">
<select id="getEmployeeList" resultType="com.kw.pojo.Employee">
select * from Employee
</select>
<select id="getEmployeeById" parameterType="int" resultType="com.kw.pojo.Employee">
select * from Employee where id=#{id}
</select>
<!--通过使用useGeneratedKeys="true" keyProperty="id"可以获取自增主键的值-->
<insert id="addEmployee" parameterType="com.kw.pojo.Employee" useGeneratedKeys="true" keyProperty="id">
insert into Employee(empName,empSex,empPhone,hireDate) values (#{empName},#{empSex},#{empPhone},#{hireDate})
</insert>
<delete id="deleteEmployee" parameterType="int">
delete from Employee where id=#{id}
</delete>
<update id="updateEmployee" parameterType="com.kw.pojo.Employee">
update Employee set empName=#{empName},empSex=#{empSex},empPhone=#{empPhone},hireDate=#{hireDate} where id=#{id}
</update>
</mapper>
参数处理
1、单个参数
mybatis不做特殊处理,使用#{参数名},取出参数值。
2、多个参数
mybatis会做特殊处理,多个参数会被封装为一个map。
key:param1,param2...
value:传入的参数值
所以需要使用#{param1}取出对应的参数值
3、多个参数建议处理方式
使用@Param注解对参数进行标注
Employee getEmployeeById(@Param("id") int id);
然后使用#{参数名},取出参数值
4、#{}与${}区别
'#{}':是以预编译的形式,将参数设置到sql中,防止sql注入。
${}:取出的值直接封装到sql语句中,存在注入漏洞的安全问题。${}主要用于拼接模糊查询,例如
<select id="getUserMap" parameterType="map" resultType="com.kw.mvc.model.User">
select * from User where username like #{name} and password=#{pwd}
select * from User where username like "%"#{name}"%" and password=#{pwd}
select * from User where username like '%${name}%' and password=#{pwd}
</select>
注意:常见报错
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'empName' in 'class java.lang.String'
原因:
处理方式: