<?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:com.model.professional --><!--namespace保证唯一,习惯上是包名+配置文件的名称如com.pkk.test.mappertest(包名)+userMapper(userMapper.xml配置文件去掉.xml后缀)--><mappernamespace="com.pkk.test.mappertest.UserMapper"><!--普通的查询-查询的唯一标识selectUserById,查询参数类型为int或Integer,返回类型为hashmap,key为字段名,值在value中--><selectid="selectUserById"parameterType="int"resultType="hashmap">
SELECT * FROM USER WHERE id =#{id}
</select><!--parameterMap=""已经废弃,老式风格的参数映射,flushCache为true时执行结束之后会刷新清空本地和二级缓存,默认为false,statementType默认为PREPARED预处理方式(即PreparedStatement)--><!--STATEMENT是普通的吹模式(容易被注入方式注入sql语句中),CALLABLE(CallAbleStatement)调用储存过程,timeout为等待拉区数据的时间秒数,默认依据于驱动--><deleteid="deleteUserById"parameterType="int"flushCache="false"statementType="PREPARED"timeout="10">
DELETE FROM USER WHERE id = #{id}
</delete><updateid="updateUserById1"timeout="10"flushCache="false"parameterType="com.pkk.entity.User"><iftest="id!=null">
UPDATE USER u SET u.username = #{username,jdbcType=VARCHAR} , u.password = #{password,jdbcType=VARCHAR}
where
u.id = #{id}
</if></update><!--id属性值必须唯一,是insert标签--><!--parameterType指明插入时用的数据类型--><!--useGeneratedKeys=true指定使用数据库总动增长策略,需要底层数据库支持,默认为false--><insertid="saveUser"parameterType="com.pkk.entity.User"useGeneratedKeys="true"><!-- 底层的SQL语句 通过#{}来进行获取值和赋值-->
INSERT INTO USER (username,password) VALUE (#{username},#{password})
</insert><!--
针对于Mysql需要设置order="AFTER"
因为SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。将selectKey放在insert之后,通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。插入之后获得ID赋值到传进来的对象中(对象中必须有相应的属性setter方法)
useGeneratedKeys使用自增(依据底层数据库)
parameterType:请求参数类型
flushCache:为true时执行结束之后会刷新清空本地和二级缓存,默认为false
timeout:拉去数据超时时间【单位:秒】
resultType:结果类型
order:序列产生时间,是在插入之前(Oracle)还是插入之后(Mysql)
keyProperty:查询的序列映射给id属性,实体需要有setter方法
statementType:操作模式,默认为PREPARED预处理方式(即PreparedStatement)STATEMENT是普通的吹模式(容易被注入方式注入sql语句中),CALLABLE(CallAbleStatement)调用储存过程
--><insertid="saveUser1"parameterType="com.pkk.entity.User"useGeneratedKeys="true"flushCache="false"timeout="10"><!-- 底层的SQL语句 通过#{}来进行获取值和赋值-->
INSERT INTO USER (username,password) VALUE (#{username},#{password})
/*将selectKey放在insert之后,通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。插入之后获得ID赋值到传进来的对象中(对象中必须有相应的属性)*/
<selectKeyresultType="int"order="AFTER"keyProperty="id"statementType="PREPARED">
SELECT LAST_INSERT_ID() AS id
</selectKey></insert><!--
针对于Oracle需要设置order="Before"
因为SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。将selectKey放在insert之后,通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。插入之后获得ID赋值到传进来的对象中(对象中必须有相应的属性setter方法)
useGeneratedKeys使用自增(依据底层数据库)
parameterType:请求参数类型
flushCache:为true时执行结束之后会刷新清空本地和二级缓存,默认为false
timeout:拉去数据超时时间【单位:秒】
resultType:结果类型
order:序列产生时间,是在插入之前(Oracle)还是插入之后(Mysql)
keyProperty:查询的序列映射给id属性,实体需要有setter方法
statementType:操作模式,默认为PREPARED预处理方式(即PreparedStatement)STATEMENT是普通的吹模式(容易被注入方式注入sql语句中),CALLABLE(CallAbleStatement)调用储存过程
--><insertid="saveUser2"parameterType="com.pkk.entity.User"useGeneratedKeys="true"flushCache="false"timeout="10"><!--这句话会在插入user之前执行(order="BEFORE"),该句话执行完之后,会生成一个ID,传进来的参数User对象里的id字段就会被赋值成sequence的值。--><selectKeyresultType="int"order="BEFORE"keyProperty="id"statementType="PREPARED">
select SEQ_USER_ID.nextval as id from dual
</selectKey><!-- 底层的SQL语句 通过#{}来进行获取值和赋值-->
INSERT INTO USER (username,password) VALUE (#{username},#{password})
</insert></mapper>