mybatis详解-(8)配置自增主键

在MyBatis中,当使用如MySQL这样的数据库时,可以通过配置自增主键来实现对象ID的自动获取。本文介绍了在不配置、配置主键自增以及在不存在自增主键的数据库(如Oracle)中的配置方法。通过`useGeneratedKeys="true"`和`keyProperty="id"`的设置,可以在插入记录后成功获取到生成的主键值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

延续上一篇增删改查,在添加的时候使用的是数据库的自增主键,如果换成oracle这种没有自增主键的就无法实现,并且保存完成之后,在程序中是获取不到对象id的。我们打印保存后的对象如下:

1.未配置主键自增

    @Test
    public void testMybatisAdd() {//测试添加
            SqlSessionFactory sqlSessionFactory = null;
            SqlSession sqlSession = null;
            try {
                sqlSessionFactory = getSqlSessionFactory();
                //openSession可以添加参数,无参数表示不会自动提交,需要手动提交
                sqlSession = sqlSessionFactory.openSession();
//              sqlSession = sqlSessionFactory.openSession(true);

                EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

                Employee employee = new Employee();
                //数据库设置id自增
                employee.setLastName("huanan");
                employee.setEmail("tang_man@sina.com");
                employee.setGender("2");

                mapper.addEmployee(employee);

                System.out.println(employee);

                sqlSession.commit();

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                sqlSession.close();
            }
    }

DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@184f6be2]
DEBUG - ==> Preparing: insert into mybatis_employee (last_name,email,gender) values (?,?,?);
DEBUG - ==> Parameters: huanan(String), tang_man@sina.com(String), 2(String)
Employee [id=null, lastName=huanan, email=tang_man@sina.com, gender=2]

这里打印的id=null,mybatis可以通过配置,自动生成主键

2.配置主键自增

insert 标签中添加两个值
useGeneratedKeys=”true”表示使用自增主键
keyProperty=”id”表示id为自增主键

<!-- 插入方法 -->
    <insert id="addEmployee" parameterType="org.mybatis.crud.Employee" useGeneratedKeys="true" keyProperty="id">
        insert into mybatis_employee 
        (last_name,email,gender) 
        values 
        (#{lastName},#{email},#{gender});
    </insert>

再次测试添加方法,可以获取到主键的值id=7

DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1f7030a6]
DEBUG - ==> Preparing: insert into mybatis_employee (last_name,email,gender) values (?,?,?);
DEBUG - ==> Parameters: hussanan(String), tang_@qq.com(String), 2(String)
Employee [id=7, lastName=hussanan, email=tang_@qq.com, gender=2]

3.不存在自增主键数据库如何配置

<!-- 插入方法oracle -->
    <insert id="addEmployeeo">
        <!-- 
        keyProperty=id需要赋值主键的属性,一般都是id 
        order=before表示在插入之前执行该查询
        resultType=Integer表示返回值为integer类型
        -->
        <selectKey keyProperty="id" order="BEFORE" resultType="Integer">
            select employees_seq.nextval from dual;
        </selectKey>

        insert into mybatis_employee 
        (id,last_name,email,gender) 
        values 
        (#{id},#{lastName},#{email},#{gender});
    </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值