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值,实现了自增。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值