Mybatis — 使用主键生成策略
上一篇说到Mybatis的全局配置内容 Mybatis — 全局配置文件
这一篇主要来讲解Mybatis如何使用到主键生成策略
完整目录结构 :
-
首先我们先了解一下Mybatis中的主键生成方式
1. 若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置useGeneratedKeys=”true”,然后再把keyProperty 设置到目标属性上。
EmployeeMapper.xml :
test :<!-- public void addEmp(Employee employee); --> <!-- parameterType:参数类型,可以省略, 获取自增主键的值: mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys(); useGeneratedKeys="true";使用自增主键获取主键值策略 keyProperty;指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性 --> <insert id="addEmp" parameterType="cbuc.life.bean.Employee" useGeneratedKeys="true" keyProperty="id" databaseId="mysql"> insert into employee(last_name,email,gender) values(#{lastName},#{email},#{gender}) </insert>
@Test public void test03() throws IOException{ SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //1、获取到的SqlSession不会自动提交数据 SqlSession openSession = sqlSessionFactory.openSession(); try{ EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //测试添加 Employee employee = new Employee(null, "jerry4",null, "1"); mapper.addEmp(employee); System.out.println(employee.getId()); //使用了useGeneratedKeys,我们就可以直接在这里获取到插入的id //2、手动提交数据 openSession.commit(); }finally{ openSession.close(); } }
2. 而对于不支持自增型主键的数据库(例如Oracle),则可以使用 selectKey 子元素:selectKey 元素将会首先运行,id 会被设置,然后插入语句会被调用 :