Mybaits主键值回写
有时需要获取sql执行后新插入行的主键值,而这个值是数据自动生成,需要使用以下方法来获该值。
- 返回当前会话生成的主键值(MySQL,Oracle都支持)
- 通过属性设置就可以完成主键值的回写,原理不明(只有MySQL支持)
返回当前会话生成的主键值(MySQL,Oracle都支持)
<insert id="addUser2" parameterType="user" >
<!-- 获取当前会话中生存的主键 -->
<selectKey keyProperty="id" resultType="int">
select LAST_INSERT_ID()
</selectKey>
insert into t_user (name,age)values(#{name},#{age})
</insert>
测试一下
@Test
public void test2() throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession(true);
// 获取代理类
UserMapper dao = session.getMapper(UserMapper.class);
User user = new User();
user.setName("cads");
user.setAge(12);
dao.addUser2(user);
System.out.println("生成的id:"+user.getId());
session.close();
}
打印结果粘贴
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Preparing: insert into t_user (name,age)values(?,?)
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Parameters: cads(String), 12(Integer)
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | <== Updates: 1
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Preparing: select LAST_INSERT_ID()
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Parameters:
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | <== Total: 1
生成的id:56
通过属性设置就可以完成主键值的回写,原理不明(只有MySQL支持)
<!--
useGeneratedKeys="true" 使用生存的key
keyProperty="id" 将生存的key绑定到user对象的id属性中
-->
<insert id="addUser1" parameterType="user" useGeneratedKeys="true" keyProperty="id">
insert into t_user (name,age)values(#{name},#{age})
</insert>
测试一下
@Test
public void test1() throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession(true);
// 获取代理类
UserMapper dao = session.getMapper(UserMapper.class);
User user = new User();
user.setName("cads");
user.setAge(12);
dao.addUser1(user);
System.out.println("生成的id:"+user.getId());
session.close();
}
打印结果粘贴
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Preparing: insert into t_user (name,age)values(?,?)
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Parameters: cads(String), 12(Integer)
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | <== Updates: 1
生成的id:57
项目打包 提取码:ix65
环境:eclipse,maven