spring 我想在Sping Boot Java中生成自定义ID,如R2023001

iyfamqjs  于 2023-04-28  发布在  Spring
关注(0)|答案(1)|浏览(165)

但我的问题是id是直接生成到API或在数据库中。
什么是更好的选择,请分享您的答案和建议
我的数据库是MySQL或MS SQL Server
先谢谢你了。
生成自定义ID,当我的应用程序上有流量时,不会在运行时中断。

ar5n3qh5

ar5n3qh51#

我不知道如何才能轻松解决这个问题,但有一个变通办法。您可以创建自定义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);
    }

相关问题