2025年3月25日 星期二 甲辰(龙)年 月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > MyBatis

mybatis自增主键的使用

时间:12-09来源:作者:点击数:43

自增主键返回:

Mysql自增主键,它是在insert语句执行之前,自动生成一个自增主键值,通过mysql函数LAST_INSERT_ID();可以获得插入记录的自增主键值。

使用mybatis框架获取自增主键id方法:

第一种方式:开启逆向获取主键值

  • <!-- useGeneratedKeys="true" 开启自增主键策略 keyProperty="id" 将获取的主键值封装到类的id属性当中 -->
  • <insert id="addEmp" parameterType="employee" useGeneratedKeys="true" keyProperty="id">
  • insert into tbl_employee(last_name,gender,email) values (#{lastName},#{gender},#{email})
  • </insert>

测试:

  • @Test
  • public void test2() throws IOException {
  • String resource = "mybatis-config.xml";
  • InputStream inputStream = Resources.getResourceAsStream(resource);
  • SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  • SqlSession sqlSession = null;
  • try {
  • //无参的openSession()获取的sqlSession是不会自动提交数据,执行增删改操作的时候,我们需要手动提交
  • sqlSession = sqlSessionFactory.openSession();
  • //有参的openSession(true)会自动提交事务,我们不需要手动提交
  • //sqlSessionFactory.openSession(true);
  • EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
  • Employee employee = new Employee();
  • //添加
  • employee.setLastName("亚索");
  • employee.setEmail("22@qq.com");
  • employee.setGender("0");
  • System.out.println("新增之前的实体类id:"+employee.getId());
  • Integer integer = mapper.addEmp(employee);
  • System.out.println("新增之后的实体类id:"+employee.getId());
  • //手动提交
  • sqlSession.commit();
  • } finally {
  • sqlSession.close();
  • }
  • }
在这里插入图片描述

第二种方式:

  • <insert id="addEmp" parameterType="employee">
  • <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
  • SELECT LAST_INSERT_ID()
  • </selectKey>
  • insert into tbl_employee(last_name,gender,email) values (#{lastName},#{gender},#{email})
  • </insert>
  • [selectKey标签]:通过select查询来生成主键
  • [keyProperty]:指定存放生成主键的属性
  • [resultType]:生成主键所对应的Java类型
  • [order]:指定该查询主键SQL语句的执行顺序,相对于insert语句
  • [last_insert_id]:MySQL的函数,要配合insert语句一起使用
  • keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性(上述user对象的id属性)
  • orderSELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
  • resultType:指定SELECT LAST_INSERT_ID()的结果类型
  • @Test
  • public void test2() throws IOException {
  • String resource = "mybatis-config.xml";
  • InputStream inputStream = Resources.getResourceAsStream(resource);
  • SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  • SqlSession sqlSession = null;
  • try {
  • //无参的openSession()获取的sqlSession是不会自动提交数据,执行增删改操作的时候,我们需要手动提交
  • sqlSession = sqlSessionFactory.openSession();
  • //有参的openSession(true)会自动提交事务,我们不需要手动提交
  • //sqlSessionFactory.openSession(true);
  • EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
  • Employee employee = new Employee();
  • //添加
  • employee.setLastName("亚索");
  • employee.setEmail("22@qq.com");
  • employee.setGender("0");
  • System.out.println("新增之前的实体类id:"+employee.getId());
  • Integer integer = mapper.addEmp(employee);
  • System.out.println("新增之后的实体类id:"+employee.getId());
  • //手动提交
  • sqlSession.commit();
  • } finally {
  • sqlSession.close();
  • }
  • }
在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门