Mybatis实现useGeneratedKeys="true" keyProperty="id"立即获取自增id
1.前提条件:
设有一数据表如下:
CREATE TABLE Student2
(id int primary key,
Sid CHAR(20) ,
Sname CHAR(20) ,
Password CHAR(20),
Superuser CHAR(20),
State int );
注意,自增字段必须是int类型且为主键,如上表的id字段。
2.设置自增
3.代码
3.1.实体类:
public class User {
private int id;
private String sid;
private String sname;
private String password;
private Integer superuser;
private Integer state;
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getSuperuser() {
return superuser;
}
public void setSuperuser(Integer superuser) {
this.superuser = superuser;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", sid='" + sid + '\'' +
", sname='" + sname + '\'' +
", password='" + password + '\'' +
", superuser=" + superuser +
", state=" + state +
'}';
}
}
3.2.接口:
public interface UserMapper {
int addUser(User user);
}
3.3.映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper标签:执行增删改查 -->
<!-- namespace属性:映射文件的命名空间,在整个应用中必须唯一,属性值任意填写(如果使用接口编程,命名空
间必须是接口的全限定类) -->
<!-- 要求1:命名空间必须是接口的全限定类名 -->
<mapper namespace="edu.xlh.dao.UserMapper">
<!-- 没有useGeneratedKeys="true" keyProperty="id"也能自增,但不能通过测试类中user.getId()得到id,此时输出的id为0 -->
<insert id="addUser" useGeneratedKeys="true" keyProperty="id" >
insert into student2 ( sid , sname , password ,superuser,state)
values ( #{sid} , #{sname} , #{password} , #{superuser} , #{state});<!-- 加上id也没事,只要在测试类不设置id值,id自动增加 -->
</insert>
</mapper>
3.4.测试类:
@Test
public void test04() {
SqlSession sqlSession = MyBatisUtil.createSqlSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user =new User();
user.setSid("S25"); //并没有设置user.setId(1)
user.setSname("俞亮");
user.setPassword("123");
user.setSuperuser(2);
user.setState(1);
if(mapper.addUser(user) > 0) {
System.out.println("新增成功");
System.out.println(user.getId());
}
else
System.out.println("新增失败");
sqlSession.commit();
}catch (Exception e){
sqlSession.rollback();
}
finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
}
4.测试结果:
插入时并未设置id值,实现了自增。