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());