提问者:小点点

我想在Spring Boot中生成R2023001表中的自定义IDJava


但我的问题是id是直接生成到api或数据库中的。

什么是更好的选择,请分享您的答案和建议

我的数据库是MySQL或MSSQL服务器

提前感谢。

生成自定义Id,当我的应用程序上有流量时,不会在运行时中断。


共1个答案

匿名用户

我不知道我们如何才能轻松解决它,但有一个解决方法。您可以创建一个自定义id生成器类。不要忘记,在设置ID之前,您必须检查数据库中id的最后一个值。

以下是示例:

@Service
public class CustomIdGenerator {

    private static final String PREFIX = "R";
    private static AtomicInteger counter;

    private final YourRepository yourRepository;

    public CustomIdGenerator(YourRepository yourRepository) {
        this.yourRepository = yourRepository;
    }

    @PostConstruct
    private void init() {
        int lastId = getLastIdFromDatabase();
        counter = new AtomicInteger(lastId);
    }

    public String generateId() {
        return PREFIX + counter.incrementAndGet();
    }

    private int getLastIdFromDatabase() {
        String lastId = yourRepository.findLastId();
        if (lastId == null) {
            return 2023000;
        }
        return Integer.parseInt(lastId.substring(PREFIX.length()));
    }
}

    @Repository
    public interface YourRepository extends JpaRepository<YourEntity,  String> {
        @Query(value = "SELECT id FROM your_table ORDER BY id
         DESC LIMIT 1", nativeQuery = true)
        String findLastId();
    }

用法:

 public void saveYourEntity(YourEntity entity) {
        entity.setId(customIdGenerator.generateId());
        yourRepository.save(entity);
    }