您当前的位置:首页 > 计算机 > 编程开发 > MyBatis

mybatis自增主键的使用

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

自增主键返回:

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属性)
order:SELECT 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();
        }
    }
在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门