java 产生递增id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 产生递增id相关的知识,希望对你有一定的参考价值。

这些最基本的偶小时候就知道了!
我要的是分布式高并发条件下的递增id

id作为一个static成员并初始化一个值,在构造方法里面对id做自增运算,应该可以实现,但这样做的话,多线程是不安全的,用多线程就要加锁。
public class QQ
static long id = 10000;

public QQ()
id++;




不知道是不是你问的这个意思,是的话,求采纳哦,5044群5871
参考技术A public class zz
public static void main(String args[])
int id=0

while(1==1)
id++;




参考技术B 还是要看具体你需要做什么啊。最简单的就是直接定义一个int,赋一个初始值,然后做完你要做的操作,加个一就是了。其他的就看情况了。要求不同,方法不同 参考技术C 这个很简单的吧。递增就是做完事情后+1不就可以了。具体你要实现什么?

Java/Spring Boot Web 应用程序。插入具有自动递增 id 列的新行

【中文标题】Java/Spring Boot Web 应用程序。插入具有自动递增 id 列的新行【英文标题】:Java/SpringBoot Web app. Insert new row with auto-incremented id column 【发布时间】:2020-02-27 07:44:40 【问题描述】:

我正在尝试使用 Web 应用程序上的几行输入将新行存储到 SQL 表中。我的 jsp 有我需要的所有输入行。但是,我需要在不输入新 ID 的情况下存储新对象,因为它是自动递增的。我可以调用我的构造函数来存储除 id 之外的所有内容。 到目前为止,我对该部分的代码是:

 @RequestMapping(value = "/save", method = RequestMethod.POST)
    public ModelAndView save
            //Index connect
            (@RequestParam("id") String id, @RequestParam("type") String animalType,
             @RequestParam("name") String animalName, @RequestParam("age") int animalAge)
        ModelAndView mv = new ModelAndView("redirect:/");
        AnimalConstruct newAnimal;

        newAnimal.setAnimalType(animalType);
        newAnimal.setAnimalName(animalName);
        newAnimal.setAnimalAge(animalAge);
        animals.save(newAnimal);
        mv.addObject("animalList", animals.findAll());
        return mv;

因此,如果我想存储“(id)11, (type)bird, (name)patty, (age)5”,而我只是将类型、名称和年龄设为可输入,我该怎么做身份证?我认为该对象在技术上将 id 注入为空,但随后我得到了一个错误。我对 java 和 Springboot 很陌生,两者的技能都很薄弱。

【问题讨论】:

【参考方案1】:

在 bean 中使用 id 列注释:

@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private long id;

正如上面@pedrohreis 的回答,您也可以使用GenerationType.AUTO,但前提是您的唯一目的是制作自动增量ID,那么我更喜欢GenerationType.IDENTITY

此外,如果您想禁用对数据的批量更新,那么您应该使用GenerationType.IDENTITY

参考:hibernate-identifiers

【讨论】:

【参考方案2】:

当您希望创建对象时,不应传递 ID。

@RequestMapping(value = "/protected", method = RequestMethod.POST)
public RouteDocument doPost(@RequestBody RouteDocument route) throws ControllerException 
    createNewRoute(route);
    return route;

在前面的例子中,createNewRoute 方法调用了数据库,在我的例子中使用了 spring JpaTemplate 来保存它。对象路由有一个由 JpaTemplate.save 填充的 ID 属性。因此,doPost 返回对象返回您作为参数传递的相同对象,但具有自动分配的 ID。

【讨论】:

【参考方案3】:

魔术发生在 JPA 实现中(例如 Hibernate)。只需将您的 id 字段注释为:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

保存对象时,id会自动生成并保存。

检查一些类似的问题:Hibernate Auto Increment ID 和 How to auto generate primary key ID properly with Hibernate inserting records

【讨论】:

成功了!谢谢!

以上是关于java 产生递增id的主要内容,如果未能解决你的问题,请参考以下文章

LoadRunner能否对请求参数设定递增值?

Java Spring Hibernate:模型类主键自动递增字段:在字段上设置自动和手动

SQL 用户 ID 自动递增

在oracle 怎样设置自动递增的的字段,也就是设置自动递增的ID 主键

mongodb id 递增的吗

核心数据 id 自动递增