java中当数据库新增数据时,获取他的单据id

java中当数据库新增数据时,获取他的单据id,作为参数传递到方法中,应该用什么方式实现这个需求,使用的是jdbc 连接数据库

mysql 的话 直接SELECT LAST_INSERT_ID()
oracle的话 自己去设置序列,查序列值就行了

可以使用一些框架,插入就直接会返回ID,如果不使用框架那就只能去查询了。

select max(id) from table;

使用Mybatis,完成添加后,返回的主键会存在你添加的java对象的id中

mapper.xml

<!-- 添加完成后返回主键 -->
   <insert id="saveUserToId" parameterType="cn.woniu.domain.Users">
       <!-- 
           order:在insert执行前还是前行后获得主键
           keyColumn:要返回哪一列的值(与表中主键列对应)
           resultType:返回数据的类型
           keyProperty:要将返回的主键存到对象的哪个属性中
        -->
       <selectKey order="AFTER" keyColumn="id" resultType="Integer" keyProperty="id">
          select LAST_INSERT_ID();
       </selectKey>
        insert into `user`(username,birthday,sex,address,money) 
        values(#{userName},now(),#{sex},#{address},#{money})
   </insert>

java后台测试

    /**
     * mybatis  mapper代理开发
     * 测试mybatis添加数据并获得主键
     */
    @Test
    public void saveTestToId() {
        //mybatis默认是手动管理事务 
        SqlSession sqlSession=null;
        try {
            // 读取mybaits核心配置文件
            InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
            //读取mybatis核心配置文件的输入流,返回一个SqlSessionFactory对象
            //SqlSessionFactoryBuilder factoryBuilder=new SqlSessionFactoryBuilder();
            
            //获得SqlSessionFactory工厂
            SqlSessionFactory  factory=new SqlSessionFactoryBuilder().build(input);
            //获得ssql语句操作对象SqlSession
            sqlSession=factory.openSession();
            
            //通过SqlSession对象获得dao对象
            UserDao userDao=sqlSession.getMapper(UserDao.class);
            
            //模拟要添加的数据
            Users user=new Users();
            user.setUserName("李四");
            user.setSex("男");
            user.setAddress("河北");
            user.setMoney(new BigDecimal("4000"));
            
            //调用dao中的方法
            int n=userDao.saveUserToId(user);
            if(n>0) {
                //这里id被回传到了对象中,这个id就是最新添加的id
                System.out.println("返回的主键:"+user.getId());
                System.out.println("\t添加成功");
            }else {
                System.out.println("\t添加失败");
            }
        
            //提交事务
            sqlSession.commit();
        } catch (Exception e) {
            //回滚事务
            sqlSession.rollback();
            e.printStackTrace();
        }finally {
            //释放资源
            sqlSession.close();
        }
    }