2. yagdao
http://www.altuure.com/projects/yagdao
Mert Can Akkan
mcakkan@yahoo.com
http://www.altuure.com
3. 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
4. dependency-heaven
Lightweight framework with minimal dependency
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
6. my first yagdao
easy implementation
public interface UserDAO extends
GenericDAO<User,Long>{
}
7. quickstart
GenericHibernateDAOFactory
userDAO = (UserDAO)
GenericHibernateDAOFactory.createInstance(UserDAO.class,
sessionAccessor);
The GenericHibernateDAOFactory will create instance
of given DAO at the runtime
8. 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"/>
10. 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);
}
11. 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);
12. 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
13. custom methods
append
APPEND Method handler is a simple query builder
in which you can append query strings with not null
parameters
@YMethod(type = YMethodType.APPEND,
select = "pbyte,count(id)",
groupBy = "pbyte",
having = "count(id)>10")
List<SimpleBean> appendQuery(
@YParameter("pint>=?") int i);
14. 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
15. custom methods
criteria
•Custom Paging and order is supported
•Selected field and fetch are supported
•Grouping and having clauses are not supported
@YMethod(type = YMethodType.CRITERIA)
SearchResultList<SimpleBean>
criteria1(@YParameter(value = "pint",
operator = YOperator.GE) Integer arg1);
16. 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
17. 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 list
public SearchResultList(List<T> result,
long totalCount, YPage paging) {
super(result);
this.totalCount = totalCount;
this.paging = paging;
}
18. 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
19. 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);
20. 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
21. thanks
For more please see sample application:
http://code.google.com/p/yagdao/downloads/list?q=label:Type-Sample
maven jetty:run