yagdao 0.3.1 yet another dao hibernate guide. yagdao mert can akkan

21
YAGDAO 0.3.1 Yet Another DAO Hibernate Guide

Upload: martha-octavia-mosley

Post on 24-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

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