21
YAGDAO 0.3.1 Yet Another DAO Hibernate Guide

Yagdao 0.3.1

  • Upload
    mariah

  • View
    28

  • Download
    0

Embed Size (px)

DESCRIPTION

Yagdao 0.3.1. Yet Another DAO Hibernate 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 - PowerPoint PPT Presentation

Citation preview

Page 1: Yagdao  0.3.1

YAGDAO 0.3.1

Yet Another DAOHibernate Guide

Page 2: Yagdao  0.3.1

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

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

Page 3: Yagdao  0.3.1

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

Page 4: Yagdao  0.3.1

dependency-heaven

GroupId ArtifactId Version Optional

cglib cglib 2.2 Nocommons-logging commons-logging 1.0.2 Noorg.antlr antlr-runtime 3.2 Noorg.slf4j slf4j-log4j12 1.5.8 Noorg.apache.geronimo.specs geronimo-jpa_2.0_spec 1.1 JPAorg.hibernate hibernate-core 3.5.1-Final hibernateorg.hibernate hibernate-entitymanager 3.5.1-Final hibernateorg.springframework spring-beans 3.0.4.RELEASE spring supportorg.springframework spring-jdbc 3.0.4.RELEASE spring supportorg.springframework spring-orm 3.0.4.RELEASE Spring support

Lightweight framework with minimal dependency

Page 5: Yagdao  0.3.1

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>

Page 6: Yagdao  0.3.1

my first yagdao easy implementation

public interface UserDAO extends GenericDAO<User,Long>{

}

Page 7: Yagdao  0.3.1

quickstart GenericHibernateDAOFactoryuserDAO = (UserDAO)

GenericHibernateDAOFactory.createInstance(UserDAO.class, sessionAccessor);

The GenericHibernateDAOFactory will create instance of given DAO at the runtime

Page 8: Yagdao  0.3.1

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"/>

Page 9: Yagdao  0.3.1

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

Page 10: Yagdao  0.3.1

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);

}

Page 11: Yagdao  0.3.1

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);

Page 12: Yagdao  0.3.1

custom methodsexecute@YMethod(type = YMethodType.EXECUTE,

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

int updateAllPasswords(String newPassword);

Tip:All execute methods must return an integer

Page 13: Yagdao  0.3.1

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

Page 14: Yagdao  0.3.1

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

Page 15: Yagdao  0.3.1

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

Page 16: Yagdao  0.3.1

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

Page 17: Yagdao  0.3.1

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; }

Page 18: Yagdao  0.3.1

pagingTo 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

Page 19: Yagdao  0.3.1

prefetch result sizeDefining ‘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);

Page 20: Yagdao  0.3.1

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

Page 21: Yagdao  0.3.1

thanks

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