O código Java puro simula o princípio do cache do nível 1 do Hibernate, que é simples e fácil de entender.
A cópia do código é a seguinte:
importar java.util.arraylist;
importar java.util.hashmap;
importar java.util.list;
importar java.util.map;
classe pública LevelOnecache {
// Este objeto é usado para simular o cache do nível 1 do Hibernate
mapa estático privado <Inteiro, aluno> sTus = new Hashmap <Integer, Student> ();
public static void main (string [] args) {
getStudent (1);
getStudent (1);
getStudent (1);
getStudent (2);
getStudent (2);
}
Public Static Student GetStudent (ID inteiro) {
if (stus.containskey (id)) {
System.out.println ("busca dados do cache");
return stus.get (id);
} outro {
System.out.println ("Fetch Data do banco de dados");
Estudante s = mydb.getStudentById (id);
// Coloque os dados obtidos do banco de dados no cache
stus.put (id, s);
retorno s;
}
}
}
// simular banco de dados
classe mydb {
Lista de estática privada <Dent Student> List = new ArrayList <Dentulion> ();
estático{
Aluno s1 = novo aluno ();
s1.setName ("name1");
s1.setId (1);
Aluno s2 = novo aluno ();
s2.setName ("name2");
s2.setId (2);
Aluno s3 = novo aluno ();
s3.setName ("name3");
S3.SetId (3);
// Inicialize o banco de dados
list.add (S1);
list.add (s2);
list.add (S3);
}
// fornecendo métodos de consulta pública no banco de dados
Public Static Student GetStudentById (ID inteiro) {
para (estudante s: list) {
if (s.getId (). igual a (id)) {
retorno s;
}
}
// Se a consulta não puder ser encontrada, o retorno vazio
retornar nulo;
}
}
// Objeto de domínio
Classe Student {
ID inteiro privado;
nome de string privado;
public integer getid () {
ID de retorno;
}
public void SetId (ID inteiro) {
this.id = id;
}
public String getName () {
Nome de retorno;
}
public void setName (nome da string) {
this.name = nome;
}
}