MyBatis 获取自增主键值

在持久层开发中,我们有时需要在Dao方法执行完毕后,获取数据库自动生成的主键值。MyBatis提供两种方式帮助我们获取自增长主键值。

1 selectKey标签

1.1 Dao添加save1方法

/**
 * 添加
 */
public void save1(Customer customer);

1.2 配置save1方法

<!--1.方式一:通过selectkey标签获取自增主键值-->
<insert id="save1" parameterType="com.yiidian.domain.Customer">
    <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
    INSERT INTO t_customer(NAME,gender,telephone) VALUES(#{name},#{gender},#{telephone})
</insert>

selectKey: 获取数据库产生的主键值
 order: 查询主键值的SQL在insert之前或之后
     BEFORE:在insert之前
     AFTER:之insert后
 keyColumn:主键字段名称
 keyProperty: 把获取到的主键值赋给对象的哪个属性
 resultType: 主键的类型

1.3 编写Junit测试代码

/**
 * 添加-通过selectkey标签获取自增主键值
 */
@Test
public void testSave1(){
    //1.获取SqlSession对象
    SqlSession session = MyBatisUtils.getSession();

    //2.生成Dao代理对象
    CustomerDao customerDao = session.getMapper(CustomerDao.class);

    //3.调用save方法
    Customer customer = new Customer();
    customer.setName("小苍");
    customer.setGender("女");
    customer.setTelephone("15755556666");

    System.out.println("插入数据前:"+customer);
    
    customerDao.save1(customer);

    System.out.println("插入数据后:"+customer);
    
    //4.关闭连接
    session.close();
}

1.4 运行测试

2 useGeneratedKeys属性

2.1 Dao添加save2方法

/**
 * 添加
 */
public void save2(Customer customer);

2.2 配置save2方法

<!--2.方式二:通过useGeneratedKeys属性获取自增主键值-->
<insert id="save1" parameterType="com.yiidian.domain.Customer" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
    INSERT INTO t_customer(NAME,gender,telephone) VALUES(#{name},#{gender},#{telephone})
</insert>

2.3 编写Junit测试方法

/**
 * 添加-通过useGeneratedKeys属性获取自增主键值
 */
@Test
public void testSave2(){
    //1.获取SqlSession对象
    SqlSession session = MyBatisUtils.getSession();

    //2.生成Dao代理对象
    CustomerDao customerDao = session.getMapper(CustomerDao.class);

    //3.调用save方法
    Customer customer = new Customer();
    customer.setName("小泽");
    customer.setGender("女");
    customer.setTelephone("13422223333");

    System.out.println("插入数据前:"+customer);

    customerDao.save2(customer);

    System.out.println("插入数据后:"+customer);

    //4.关闭连接
    session.close();
}

2.4 运行测试

 

源码下载:https://pan.baidu.com/s/17K6F2nCfgieTkQ_I0stfVQ