JSPWiki logo
Strona główna
Zbieranina
Serwisy
Porady
Projekty
Humor sektora IT
TODO
Nowości
Ostatnie zmiany
Kontakt

Find pages
Unused pages
Undefined pages
Page Index

Set your name in
UserPreferences

Edit this page


Referenced by
News_blogentry_16100...
Projekty




JSPWiki v2.2.33


Pojo Mapper


PojoMapper

Aplikacje 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, aż do kombajnów w rodzaju iBatis czy Hibernate.

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:

  • automatyczne mapowanie kolumn tabeli na pola klasy, nawet gdy nazewnictwo kolumn nie jest zgodne z nazewnictwem klasy beana,
  • automatycznie generowanie poleceń INSERT i UPDATE,
  • gotowe metody do pobierania i usuwania rekordów po kluczu głownym.

Zmiany:

17.10.2006
przystosowanie do pracy z bazą MS SQL Server - poprawne pobieranie wartości generowanych przez mechanizm identity
16.10.2006
można teraz utworzyć beana posiadającego jednocześnie mapowanie Identity oraz Sequuence, w zależności od tego którą opcję wspiera dana baza ta zostanie użyta
25.9.2006
dodanie obsługi getGeneratedKeys() - niektóre drivery JDBC wspierają tę operację oraz usunięcie błędu z nieprawidłowym zapisywaniem beanów o wartościach NULL

Biblioteka do swojego działania wymaga oczywiście Javy w wersji przynajmniej 1.5 oraz bibliotek dbutils oraz commons-logging.

Dokumentacja JavaDoc

Moduł PojoMapper w CVS

Definicja klasy JavaBean reprezentującej rekord z tabeli

Poniż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łównego

	AnnotatedQueryRunner qr = new AnnotatedQueryRunner(dataSource);
	TestBean bean = (TestBean)qr.getBean(TestBean.class, new Integer(1));

Dodanie rekordu do bazy a następnie jego aktualizacja

O 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 rekordu

	AnnotatedQueryRunner qr = new AnnotatedQueryRunner(dataSource);
	TestBean bean = (TestBean)qr.getBean(TestBean.class, new Integer(0));
	int num = qr.deleteBean(TestBean.class, bean);

Attachments:

pojo_mapper.jar Info on pojo_mapper.jar 18103 bytes


Go to top   Edit this page   More info...   Attach file...
This page last changed on 07-Dec-2006 12:32:54 GMT by mikolajr.