第一种方式使用useGeneratedKeys属性
User类
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
...
mapper文件
insert into user(username, birthday, sex, address)
values (#{username}, #{birthday}, #{sex}, #{address})
在insert标签中需要将useGeneratedKeys属性设置为true
keyProperty属性值是主键对应的pojo中的属性
返回的主键会放置在入参对象中的id属性上
mapper接口
public interface UserMapper {
void insertUser(User user) throws Exception;
}
测试代码
@Test
public void testInserUser () throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("张三");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("武汉");
userMapper.insertUser(user);
sqlSession.commit();
System.out.println(user.getId());
sqlSession.close();
}
上面的测试代码中入参是一个user对象,返回的主键是在该对象的id属性中,所以使用user.getId()可以获取到该主键。
第二种方式selectKey标签
mapper配置文件
select LAST_INSERT_ID()
insert into user(username, birthday, sex, address)
values (#{username}, #{birthday}, #{sex}, #{address})
keyProperty属性值也是返回的主键值是与对象中的哪一个参数对应
resultType是返回的主键类型
select LAST_INSERT_ID()是mysql中的一个函数,用于自动返回下一个主键
order属性,可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用