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'
原因:
处理方式:

posted @ 2021-12-15 11:38  amo丶k  阅读(31)  评论(0编辑  收藏  举报