Mybatis相关:获取自增id的两种方式selectKey&useGeneratedKeys

1.数据准备

/**
 * 学生实体类
 */
public class Student implements Serializable {
    private int id;

    private String name;

    private String sex;

    private int age;

    private float height;

    private String address;

    public Student() {
    }

    public Student(int id, String name, String sex, int age, float height) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.height = height;
    }
    //getter与setter方法略
}
/**
 * student dao 接口
 * 在IStudentDao.xml 告诉mybatis 如何创建一个实现类
 */
public interface IStudentDao {
   
    /**
     * 增加学生
     * @param student
     * @return
     */
    int addStudent(Student student);
}

1.第一种:使用selectKey方式获取

<insert id="addStudentGetId" parameterType="com.qfedu.entity.Student">
        insert  into student_tb(name,age,sex,height) values(#{name},#{age},#{sex},#{height})
        <selectKey resultType="int" keyColumn="id" keyProperty="id" order="AFTER">
            select last_insert_id()
        </selectKey>

selectKey标签获取自增id

resultType = "int"    这里指的是自增id的类型

keyColumn     对应数据库表自增主键列明

keyProperty     传入的实体类中 主键对应的属性,id值将赋给这个

order="AFTER"  插入成功后执行,即获取插入成功后的这一条数据的id

select last_insert_id()   sql语句,查询上次插入后的id

注:获取到的id会自动赋值到我们插入数据时所传的对象相应的属性。即keyProperty所设置的属性,

我们就可以根据当前对象通过getter方法去获取这个id

2.第二种:使用useGeneratedKeys获取

 <insert id="addStudentGetId" parameterType="Student" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert  into student_tb(name,age,sex,height) values(#{name},#{age},#{sex},#{height})
    </insert>

userGeneratedKeys="true"   获取自增id

keyColumn     对应数据库表自增主键列明

keyProperty     传入的实体类中 主键对应的属性,id值将赋给这个

注:获取到的id会自动赋值到我们插入数据时所传的对象相应的属性。即keyProperty所设置的属性,

我们就可以根据当前对象通过getter方法去获取这个id

测试:

   public static void main(String[] args) {
        SqlSession sqlSession = null;
        try {
            //1.读取配置文件 生成字节流
            InputStream inputStream = Resources.getResourceAsStream("sqlMapperConfig.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //2.获取连接工厂
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
            //获取sqlSession mysq连接,若参数为true,则不需要手动提交
            //默认情况下:关闭自动提交,开启事务
            sqlSession = sqlSessionFactory.openSession();
            //通过sqlSession获取获取dao的代理对象(实现类)
            IStudentDao iStudentDao = sqlSession.getMapper(IStudentDao.class);

            Student student = new Student();
            student.setName("大拿3");
            student.setSex("M");
            student.setAge(19);
            student.setHeight(170);

            //影响的行数
            int num = iStudentDao.addStudentGetId(student);
            System.out.println("受影响行数:" + num);
            //手动提交
            sqlSession.commit();

            //获取自增id
            System.out.println("获取自增id:" + student.getId());
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值