EmployeeMapper.xml(oracle(after和before方式,最好使用before方式,after方式可能有问题) mysql分别如何获取)
<!--
mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGeneratoredKeys(),
useGeneratedKeys="true",使用自增主键策略
keyProperty:指定对应的主键属性,也就是mybatis获取到的主键值给javabean的哪个属性
-->
<insert id="addEmp" parameterType="com.stayreal.mybatis.Employee" useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
insert into tbl_employee(last_name,email,gender)
values(#{lastName},#{email},#{gender})
</insert>
<!--
oracle不支持自增,Oracle使用序列来模拟自增,
每次插入的数据的主键是从序列中拿到的值,如何取到这个值
-->
<insert id="addEmp" databaseId="oracle">
<!--查出的主键值封装给javabean的哪个属性
order="BEFORE",当前sql在插入sql之前运行
AFTER,
resultType:查出的数据返回值类型
-->
<!--BERLORE版本-->
<!--<selectKey keyProperty="id" order="BEFORE" resultType="Integer">-->
<!--<!–编写查询主键的sql语句 before–>-->
<!--select EMPLOYEES_SEQ.nextval from dual-->
<!--</selectKey>-->
<!--insert into employees(employee_id,last_name,email)-->
<!--values(#{id},#{lastName},#{email})-->
<!--编写查询主键的sql语句 after版本-->
<selectKey keyProperty="id" order="AFTER" resultType="Integer">
<!--编写查询主键的sql语句 before-->
select EMPLOYEES_SEQ.currval from dual
</selectKey>
insert into employees(employee_id,last_name,email)
values(EMPLOYEES_SEQ.nextval,#{lastName},#{email})
</insert>
Junit测试
// 测试添加
// 插入到数据库生成的id如果是5,getId()返回的结果是5
Employee employee = new Employee(null,"Jerry","Jerry@qq.com","1");
employeeMapper.addEmp(employee);
System.out.println(employee.getId());