浏览 3949 次
锁定老帖子 主题:又一个DynamicDao
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-14
最后修改:2009-01-20
模型如下: @Entity public class Topic { @Id @GeneratedValue private int id; private String title; private Date createdAt; ....... }
用法如下: public interface TopicDao { @Find Topic find(int id); @Find(load = true) Topic load(int id); @Save void save(Topic topic); @Delete void delete(Topic topic); @Query("from Topic where title like ?") List<Topic> findByTitle(String title); @Query("from Topic") List<Topic> findAll(@FirstResult int firstResult, @MaxResults int maxResults); @Query("from Topic where id = ?") boolean isExist(int id); @Query(value = "delete from Topic where createdAt < ?", update = true) int deleteByCreatedAt(Date createdAt); @Query("select count(*) from Topic") long count(); }
然后在配置文件中增加如下代码: <bean id="topicDao" class="com.dynamicDao.DynamicDaoFactoryBean" p:daoInterface="com.dynamicDao.dao.TopicDao">
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-05-14
没看出来dynamic在哪?就是自己实现了一套Criteria,而且GenericDao都继承Session了,等于把Session整个都暴露给调用dao的人了,那还要dao干虾米?直接访问session不就完了,不明白这个dynamic dao的设是什么目的。
|
|
返回顶楼 | |
发表时间:2008-05-14
最后修改:2009-02-09
Norther 写道
没看出来dynamic在哪?就是自己实现了一套Criteria,而且GenericDao都继承Session了,等于把Session整个都暴露给调用dao的人了,那还要dao干螃蟹?直接访问session不就完了,不明白这个dynamic dao的设是什么目的。
|
|
返回顶楼 | |
发表时间:2008-05-14
实现Query Annotation的主要代码如下: public class AnnotationQueryInterceptor extends AbstractMethodInterceptor{ public Object invoke(MethodInvocation mi) throws Throwable { Query query = mi.getMethod().getAnnotation(Query.class); if(null != query){ if(Collection.class.isAssignableFrom(mi.getMethod().getReturnType())){ return super.genericDao.findByHsql(query.value(), mi.getArguments()); } else{ return super.genericDao.findFirstByHsql(query.value(), mi.getArguments()); } } return mi.proceed(); } } @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Query { String value() default ""; } 最后在GenericDaoFactoryBean的方法initInternalAdvices() 中加入addAdvice(new AnnotationQueryInterceptor())即可; void initInternalAdvices() { addAdvice(new SessionInterceptor()); addAdvice(new SimpleCriteriaInterceptor()); addAdvice(new TypedSessionInterceptor()); addAdvice(new DynamicFinderInterceptor()); addAdvice(new AnnotationQueryInterceptor()); } 要扩展其他接口,如ActiveRecord中的find_or_create_by等功能也比较简单。
|
|
返回顶楼 | |
发表时间:2008-05-14
呵呵,老大你写的东东,不错。我学习了(刚刚一新手哈!)
不过,要是再写一点注释就更好了!仍有很多东东没懂。不过慢慢研究了! 不过呢,也谢谢了! |
|
返回顶楼 | |