<?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>