mybatis: mapperXML 增删改 配置及含义

73 阅读1分钟
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--致力于减少使用成本  让用户专注SQL文件-->
<!--
 mapper 根节点
 namespace  一般情况:一个mapper对应一个不同的命名空间
 如果使用接口绑定的方式  必须输入对应接口的完整限定名

-->
<mapper namespace="com.kdy.mapper.EmpMapper">
    <select id="selectEmp" resultType="com.kdy.pojo.Emp">
        select id,username from emp where id = #{id}
    </select>
    <select id="selectUsername" resultType="string">
        select username as username from emp where id = #{id}
    </select>

    <!--    insert  update delete
      id          同一个命名空间中只能由唯一的ID 同一个接口中也只能有唯一的方法名  虽然在Java语法中没有问题  但是mybatis是不支持的
parameterType     用来设置该SQL的参数类型 可以当它不存在  因为mybatis会根据接口方法的参数能够自动读取参数的类型
flushCache        设置true后  只要语句被调用 都会导致本地缓存和二级缓存被清空
statementType     statementType="CALLABLE|PREPARED|STATEMENT" 用来设置当前的statement
                   PREPARED    支持参数预解析  默认的
                   STATEMENT   不支持参数解析
                   CALLABLE    执行存储过程的    不利于维护及数据库迁移
useGeneratedKeys  用于获取插入后自动增长的主键(Mysql和SQLserver)
keyProperty        将自动增长的主键赋值到那个属性中去
【useGeneratedKeys 和 keyProperty   一般配合使用】
keyColumn          因为数据表存在组合主键的情况  可以使用keyColumn指定获取其中哪一个字段
databaseId         数据库厂商ID

增删改的返回值 除了int 还可以返回 boolean类型


    -->
    <insert id="insertEmp" useGeneratedKeys="true" keyProperty="id" >

        insert into Emp(username) values(#{username})
    </insert>

    <insert id="insertEmp2" >
<!--        如果数据库不支持自动增长列 可以使用下面方式 -->
        <selectKey keyProperty="id" resultType="int" order="BEFORE">
            select max(id)+1 as id from Emp
        </selectKey>
        insert into Emp(username) values(#{username})
    </insert>
    <update id="updateEmp">
        update Emp set username=#{username} where id=#{username}
    </update>
    <delete id="deleteEmp">
        delete from emp where id = #{id}
    </delete>



</mapper>