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();
}
}