YAGDAO 0.3.1 Yet Another DAO Hibernate Guide. yagdao Mert Can Akkan.

21
YAGDAO 0.3.1 Yet Another DAO Hibernate Guide

Transcript of YAGDAO 0.3.1 Yet Another DAO Hibernate Guide. yagdao Mert Can Akkan.

YAGDAO 0.3.1

Yet Another DAOHibernate Guide

yagdao

http://www.altuure.com/projects/yagdao

Mert Can Akkan [email protected] http://www.altuure.com

overview

Popular Java ORM layer JPA 2.0 Hibernate

Spring 3.0+ Support (optional) Lightweight No Implementation Framework No Static Code Generation Annotation Based GenericDAO/CRUD operations Custom operations

dependency-heaven

GroupId ArtifactId Version Optional

cglib cglib 2.2 No

commons-logging commons-logging 1.0.2 No

org.antlr antlr-runtime 3.2 No

org.slf4j slf4j-log4j12 1.5.8 No

org.apache.geronimo.specs geronimo-jpa_2.0_spec 1.1 JPA

org.hibernate hibernate-core 3.5.1-Final hibernate

org.hibernate hibernate-entitymanager 3.5.1-Final hibernate

org.springframework spring-beans 3.0.4.RELEASE spring support

org.springframework spring-jdbc 3.0.4.RELEASE spring support

org.springframework spring-orm 3.0.4.RELEASE Spring support

Lightweight framework with minimal dependency

maven dependecy

<dependencies>

<dependency>

<groupId>com.altuure</groupId>

<artifactId>com.altuure.yagdao</artifactId>

<version>0.3.1</version>

</dependency>

<dependencies>

<!-- repo.altuure.com-->

<repositories>

<repository>

<id>repo.altuure.com</id>

<name>repo.altuure.com</name>

<url>http://repo.altuure.com</url>

<layout>default</layout>

</repository>

</repositories>

my first yagdao

easy implementation

public interface UserDAO extends GenericDAO<User,Long>{

}

quickstart

GenericHibernateDAOFactoryuserDAO = (UserDAO)

GenericHibernateDAOFactory.createInstance(UserDAO.class, sessionAccessor);

The GenericHibernateDAOFactory will create instance of given DAO at the runtime

springframework support

package scan feature<yagdao:hibernate id="DAOFactory1"

base-package="com.altuure.yagdao.blog.dao"

session-factory=" mySessionFactory "/>

one by one definition <yagdao:hibernate

base-class="com.altuure.yagdao.blog.dao.UserDAO"

session-factory="mySessionFactory"/>

GenericDAO

save(Object entity) update(Object entity) load(T id) loadLazy(T id) delete(Object object) delete(T id) vs….

custom methodscreate & update

Get rid of all setter and getter operations

public interface UserDAO extends GenericDAO<User,Long>{

@YMethod(type = YMethodType.SAVE)

User create(

@YParameter("username")String username,

@YParameter("password")String password,

@YParameter("email")String email);

@YMethod(type = YMethodType.UPDATE)

User updateRoles(long id,

@YParameter("roles")Set roles);

}

custom methodsquery

Embeded Query Support@YMethod(

type = YMethodType.QUERY,

query="select u.username from User u where u.email=:email“

)

String findUsernameByEmailQuery(

@YParameter(value = "email")String email);

Named Query Support@YMethod(type = YMethodType.QUERY,queryName="findByEmail")

String findUsernameByEmailNamed(

@YParameter(value = "email")String email);

custom methodsexecute

@YMethod(type = YMethodType.EXECUTE,

query="update User set password=:password")

int updateAllPasswords(String newPassword);

Tip:All execute methods must return an integer

custom methodsappend

@YMethod(type = YMethodType.APPEND,select = "pbyte,count(id)",groupBy = "pbyte",having = "count(id)>10") List<SimpleBean> appendQuery(

@YParameter("pint>=?") int i);

APPEND Method handler is a simple query builder in which you can append query strings with not null parameters

custom methods criteria &count(experimental)

Criteria method handler is like append method handler tries to build a query with not null values by parsing query parameters.

Due to incomplete criteria API of hibernate it supports hibernate partially

custom methods criteria

@YMethod(type = YMethodType.CRITERIA)

SearchResultList<SimpleBean> criteria1(@YParameter(value = "pint",

operator = YOperator.GE) Integer arg1);

• Custom Paging and order is supported• Selected field and fetch are supported• Grouping and having clauses are not supported

custom methodscount

@YMethod(type = YMethodType.COUNT) long count2(@YParameter(value = "pint", operator = YOperator.GE) Integer arg1, @YParameter(value = "pdate", operator = YOperator.LE) Date endDate);

Returns only count query result of criteria methodTo execute both see SearchResultList

smart parameters & return types YPage: enables order and paging

criteria methods YLimit: enables only paging

append method criteria methods

SearchResultList: fetch total size of result listpublic SearchResultList(List<T> result,

long totalCount, YPage paging) {

super(result);

this.totalCount = totalCount;

this.paging = paging;

}

paging

To add paging to any querying method is easy just add YPage,YLimit as a method parameter

@YMethod(type = YMethodType.APPEND,orderBy = "id desc")

SearchResultList appendPage1(@YParameter("pbyte>=?") byte arg1,YLimit limit);

PS: YLimit is valid in all while YPage is valid on only Criteria Methods

prefetch result size

Defining ‘SearchResultList’ as a return type enables a count queires for all methods

@YMethod(type = YMethodType.CRITERIA)

SearchResultList<SimpleBean> criteria1(@YParameter(value = "pint", operator = YOperator.GE) Integer arg1);

and more

Object based and method based fetch support

@YMethod(type = YMethodType.CRITERIA)

@YFetch({ "product", "order", "order.customer" })

List<OrderItem> findByCustomerCityAndMaxPrice2(…);

projection support at append methods

thanks

For more please see sample application:http://code.google.com/p/yagdao/downloads/list?q=label:Type-Samplemaven jetty:run