Auto tạo id theo định dạng trong java

Chào mọi người. Em vừa mới nghĩ ra 1 bài với Java. Nôm na như sau:
Tạo 1 id không trùng nhau với 1 định dạng cho trước, Ví dụ như tạo mã sinh viên với định dạng: SE+<mã kiểu int tăng dần> ex:
id 1: SE001
id 2: SE002
id 3: SE003
. . .
id n: SE111 . . .
Ai giúp em với ạ!
À nhân tiện ai biết lệnh xoá màn hình console trong java chỉ em với ạ. ( Giống lệnh “cls” trong C/C++ đấy ạ) Em cám ơn!

Cái này có sẵn trong project của mình nên post lên luôn, bạn chỉnh lại theo ý của bạn nhé

Mình có 1 bảng employee với 2 cột là idname trong đó id mình muốn tự động tăng theo định dạng EMP0001, EMP0002, EMP0003, ... thì làm như sau

Employee.java

@Entity
@Table(name = "employee")
public class Employee {
	@Id
	// Khai báo phương thức sinh id, sử dụng generator có tên generator_id
	@GeneratedValue(generator = "generator_id")
	// Khai báo generator có tên generator_id định nghĩa trong class StringGeneratorId
	@GenericGenerator(name = "generator_id", strategy = "core.generator.StringGeneratorId")
	private String id;
	private String name;
    // getter, setter 
}

StringGeneratorId.java

public class StringGeneratorId implements IdentifierGenerator {

	private String prefix = "EMP";

	@Override
	public Serializable generate(SharedSessionContractImplementor session, Object object) {
		// Select all id
		QueryImplementor<String> query = session.createQuery("SELECT e.id FROM Employee e", String.class);
		try (Stream<String> stream = query.stream()) {
			Long max = stream.map(t -> t.replace(prefix, "")) // EMP0001 => 0001
					.mapToLong(Long::parseLong)	// String -> Long
					.max()						// Tìm số lớn nhất
					.orElse(0L);				// Nếu không có thì set là 0
			return prefix + String.format("%04d", max + 1); // Tăng lên 1 thành EMP0002
		}
	}
}

Repository

@Repository
public interface EmplRepository extends JpaRepository<Employee, Integer> {

}

Test

@Autowired
EmplRepository repositoty;

String name;
List<Employee> list = new ArrayList<>();
for (int i = 0; i < 9; i++) {
	name = RandomStringUtils.randomAlphabetic(5).toUpperCase();
	list.add(new Employee(null, name));
}
repositoty.saveAll(list);

Xem lại trong database sẽ thấy


Cái này lúc trước mình xem trên Stackjava. Còn về lệnh xóa màn hình console thì hình như không có, chỉ có cách dùng for để in ra nhiều dòng trắng.

4 Likes

Bạn này còn đang hỏi về console thì mình nghĩ chưa đến đoạn SQL đâu :joy:

public class IdGenerator
{
private String prefix;
private String suffix;
private AtomicInteger lastId;
public IdGenerator()
{
this.id = new AtomicInteger();
this.prefix = "";
this.suffix = "";
}
public void init(String prefix, String suffix, int lastId)
{
this.prefix = prefix;
this.suffix = suffix;
this.lastId.set(lastId);
}
public String generate()
{
return this.prefix + this.lastId.incrementAndGet() + this.suffix;
}
IdGenerator generator = new IdGenerator();
generator.init("SE", "", 0);

for (int i = 0; i < n; i += 1)
{
String id = generator.generate();
SinhVien sv = new SinhVien(id);
...
5 Likes

Cám ơn b đã giúp đỡ !

Cám ơn b đã giúp đỡ ! :sunny:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?