|
Strona główna Zbieranina Serwisy Porady Projekty Humor sektora IT TODO Nowości Ostatnie zmiany Kontakt Find pages
Set your name in
UserPreferences Referenced by
JSPWiki v2.2.33
|
PojoMapperAplikacje bazodanowe w Javie z użyciem JDBC. W zależności od rozmiaru aplikacji można użyć odpowiedniego narzędzia: od gołych wywołań JDBC, poprzez małe dodatki w stylu jakarta commons dbutils Omawiany projekt stanowi rozbudowę bardzo zgrabnej biblioteki dbutils firmowanej przez Jakartę. Dodana została możliwość mapowania pól beanów na kolumny bazy danych przy pomocy annotacji dostępnych od Javy 1.5. Dzięki temu kodowanie stało się jeszcze prostrze. Używam tej biblioteki w paru już projektach i jestem z niej bardzo zadowolony. Zalety w stosunku do oryginalnej biblioteki dbutils:
Zmiany:
Biblioteka do swojego działania wymaga oczywiście Javy w wersji przynajmniej 1.5 oraz bibliotek dbutils Definicja klasy JavaBean reprezentującej rekord z tabeliPoniższy kod pokazuje typową klasę JavaBean z listą pól oraz standardowymi getterami i setterami. Dodane są dwie annotacje poziomu klasy opisujące połączoną tabelę oraz sposób generowania wartości klucza głównego. Przy odpowiednich setterach/getterach dodane są annotacje mapujące na poszczególne kolumny w tabeli. Jeśli trzeba, to określają one też typ SQL kolumny. Annotacja @Identity posiada też 'siostrzaną' annotację @Sequence("name") określającą sekwencję o podanej nazwie. Jeśli definicja tabeli określa automatyczną generację kluczy głównych to wtedy wogólnie nie musimy podawać ww annotacji.
@Table("tabela")
@Identity
public class TestBean {
private Integer id;
private String name;
private Integer age;
private Double account;
private Date date;
@Field("account_value")
public Double getAccount() {
return account;
}
public void setAccount(Double account) {
this.account = account;
}
@Field("age")
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Field("created_date")
@Type(Types.TIMESTAMP)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Integer getId() {
return id;
}
@PrimaryKey("id")
public void setId(Integer id) {
this.id = id;
}
@Field("name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Odczytanie zawartości tabeli do listy beanów
QueryRunner qr = new AnnotatedQueryRunner(dataSource);
List<TestBean> list = (List<TestBean>)qr.query("select * from tabela", new AnnotatedListHandler(TestBean.class));
Odczytanie rekordu wskazywanego przez wartość klucza głównegoAnnotatedQueryRunner qr = new AnnotatedQueryRunner(dataSource); TestBean bean = (TestBean)qr.getBean(TestBean.class, new Integer(1)); Dodanie rekordu do bazy a następnie jego aktualizacjaO ile określono dla beana pole klucza głównego, to jego wartość zostanie odpowiednio wygenerowana - albo pobrana z sekwencji, albo poprzez identity.
AnnotatedQueryRunner qr = new AnnotatedQueryRunner(dataSource);
TestBean bean = new TestBean();
bean.setName("foo foo");
bean.setDate(new Date());
int rows = qr.insertBean(TestBean.class, bean);
bean.setName("off");
int rows = qr.updateBean(TestBean.class, bean);
Usunięcie rekorduAnnotatedQueryRunner qr = new AnnotatedQueryRunner(dataSource); TestBean bean = (TestBean)qr.getBean(TestBean.class, new Integer(0)); int num = qr.deleteBean(TestBean.class, bean);
|
||||||