Upload
martha-octavia-mosley
View
215
Download
0
Embed Size (px)
Citation preview
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>
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