21
YAGDAO 0.3.1 Yet Another DAO Hibernate Guide

yagdao-0.3.1 hibernate guide

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: yagdao-0.3.1 hibernate guide

YAGDAO 0.3.1

Yet Another DAO

Hibernate Guide

Page 2: yagdao-0.3.1 hibernate guide

yagdao

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

Mert Can Akkan

[email protected]

http://www.altuure.com

Page 3: yagdao-0.3.1 hibernate guide

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 hibernate guide

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

Page 5: yagdao-0.3.1 hibernate guide

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 hibernate guide

my first yagdao

easy implementation

public interface UserDAO extends

GenericDAO<User,Long>{

}

Page 7: yagdao-0.3.1 hibernate guide

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 hibernate guide

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 hibernate guide

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 hibernate guide

custom methods

create & 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 hibernate guide

custom methods

query

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 hibernate guide

custom methods

execute

@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 hibernate guide

custom methods

append

@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 hibernate guide

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 hibernate guide

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 hibernate guide

custom methods

count @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 method

To execute both see SearchResultList

Page 17: yagdao-0.3.1 hibernate guide

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 hibernate guide

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

Page 19: yagdao-0.3.1 hibernate guide

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

Page 20: yagdao-0.3.1 hibernate guide

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