Play Framework klasy modelu
- Klasy modelu umieszczamy w pakiecie models i nie można tego przeskoczyć.
- Każda klasa musi dziedziczyć po klasie play.db.jpa.Model.
- Klasa nie ma pola id ani nie może definiować pola @Id. To dziedziczymy!
- Każda klasa dostaje „w spadku” metody crud. Część metod jest oznaczona jako przestarzała. W przypadku Play Framework jest to o tyle ważne, że wykorzystywany jest mechanizm pracy z bytecodem co może zaowocować jakimś ciekawym errorem.
- Każda klasa modelu jest encją JPA – oznaczona jest za pomocą @Entity.
Coś jeszcze? Nie? No to przykładowa klasa + test. Najpierw w pliku conf/application.conf należy odkomentować linię db=mem. W ten sposób dostajemy skonfigurowanego HSQLDB z bazą w trybie mem. Przydatne do testów.
Listing 1. Klas Simple
package models;
import javax.persistence.Entity;
import play.db.jpa.Model;
@Entity
public class Simple
extends Model {
private String name;
private Long PESEL;
private String password;
public Simple(String name, Long pESEL, String password) {
super();
this.name = name;
PESEL = pESEL;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getPESEL() {
return PESEL;
}
public void setPESEL(Long pESEL) {
PESEL = pESEL;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Zwykłe POJO.
Listing 2. Klasa SimpleTest
package models;
import static org.junit.Assert.*;
public class SimpleTest
extends UnitTest {
@After
public void tearDown(){
// Czyścimy bazę
Fixtures.deleteAll();
}
@Test
public void addTest(){
// tworzymy obiekty i zapisujemy je do bazy
Simple simple = new Simple("1", 1L, "1").save();
Simple simple2 = new Simple("1", 2L, "1").save();
Simple simple3 = new Simple("1", 3L, "2").save();
// sporawdzamy czy są trzy sztuki.
assertEquals(3, Simple.count());
//przykłady wyszukiwania.
assertEquals(3, Simple.find("byName", "1").fetch().size());
assertEquals(2, Simple.find("byPassword", "1").fetch().size());
assertEquals(1, Simple.find("byPESEL", 1L).fetch().size());
}
}
W konsoli uruchamiamy serwer za pomocą play test w katalogu projektu.
Wchodzimy na http://localhost:9000/@tests i uruchamiamy test.
Prawda że proste?
Kod jest dostępny na licencji MIT. Jednak niektóre rozwiązania mogą być objęte inną licencją. W takim przypadku jest, to zaznaczone. Artykuły są dostępne na licencji CC-BY.
Jeżeli spodobał ci się ten wpis, to podziel się nim z innymi lub wesprzyj autora.