该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-16
http://www.iteye.com/topic/168780),让人眼前一亮,特别是基于annotation的warp-dynamic-finder部分给人印象非常深刻,利用它,80%情况下Dao的实现不用去写了,只要定义个interface,加几个annotation轻松搞定,自己就着手实现了一个,基于spring的HibernateDaoSupport,其用法也很简单,如下:
看了Robbin前两天发的那帖,Warp framework - 一个相当有前途的Java轻量级Web开发框架(
public interface StudentDao { @Save Long save(Student student); @Delete void delete(Student student); @Get Student get(Long id); @Query("from Student as s where s.name = ? and s.age = ?") Student getByNameAndAge(String name, Integer age);//根据参数出现的次序绑定 @Query("from Student as s where s.age > :age") List<Student> getStudentsAgeMoreThan( @Parameter("age") Integer age);//name绑定 @Query("from Student as s where s.name like ?") Student getStudentNameLike( @Like(matchMode = MatchMode.START) String name);//支持like @Query(value = "delete Student where name = ?", executeUpdate = true) int deleteStudentByName(String name);//批量更新 @Query("from Student as s order by s.id desc") @Conditions({ @Condition("s.name = ?"), //动态条件添加,如果第一个参数不为null,该条件会被插入query string @Condition("s.age = ?") }) Student query(String name, Integer age); } 这样一个Dao就定义OK了,非常容易,有两种使用方式,一种是利用AutoInjectDynamicDaoBeanPostProcessor,在spring中的bean初始化好之后,找到有InjectDao标注的方法就,利用动态代理生成StudentDao的代理实现并注入: <bean class="com.norther.dynamic.dao.AutoInjectDynamicDaoBeanPostProcessor"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="studentService " class="com.norther.dynamic.dao.test.StudentService" /> public class StudentService { private StudentDao studentDao; @InjectDao//会被注入StudentDao动态代理实现 public void setStudentDao(StudentDao studentDao) { this.studentDao = studentDao; } 还有另一种方式是基于FactoryBean的DynamicDaoProxy,并自己指定要实现的Dao接口,如下: <bean id="studentDao " class="com.norther.dynamic.dao.DynamicDaoProxy"> <property name="dao" value="com.norther.dynamic.dao.test.StudentDao" /> </bean> <bean id="teacherDao " class="com.norther.dynamic.dao.DynamicDaoProxy"> <property name="dao" value="com.norther.dynamic.dao.test.TeacherDao" /> </bean> 非常的简单,也很初级,有什么不足,请大家多多指教,呵呵。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-16
count(case when aaa='555' then aaa end) from .....
这样的什么方法处理 |
|
返回顶楼 | |
发表时间:2008-03-16
剑 事 写道 count(case when aaa='555' then aaa end) from .....
这样的什么方法处理 dynamic dao只是对hibernate进行封装,这个当然可以做到,例如 public interface StudentDao { @Query( value = "count(case when aaa=:value then aaa end) from .....", sqlQuery = true ) public Integer count( @Parameter(name="value") String aaa); } |
|
返回顶楼 | |
发表时间:2008-03-16
看过源代码了,annotation的确用的很不错
|
|
返回顶楼 | |
发表时间:2008-03-17
现在的技术发展真快,多亏有这么多懒人。编码越来越省事了。
|
|
返回顶楼 | |
发表时间:2008-03-17
DAO可以认为是一种模式
模式一般是大家都认可的一种编程方式,习惯,经验的总结 模式的应用往往是运行效率的降低,但是可维护性提高了不少 大家都理解同一种模式的时候,你跟别人交流,也就只需要说一下模式的名字,而不需要特地解释。 当你使用DAO的时候就是希望,你只告诉别人说“我这里使用了DAO”就不再需要告诉别人怎么实现,因为对方理解DAO, 我现在就说这些,另外我想说,等东部老大来消灭你,看你22:0得意的样 |
|
返回顶楼 | |
发表时间:2008-03-17
能不能提供demo的相关jar文件,谢谢!
|
|
返回顶楼 | |
发表时间:2008-03-17
qilei 写道 能不能提供demo的相关jar文件,谢谢!
hibernate,hibernate-annotation,ejb3-persistent这几个在hibernate官方网站都能找到, hsqldb在http://hsqldb.org/可以下载,是一个轻量的数据库 剩下的google随便一搜索就有了 : ) |
|
返回顶楼 | |
发表时间:2008-03-18
不知道为什么.本人非常不喜欢使用过多的xml配置.
|
|
返回顶楼 | |
发表时间:2008-03-19
seasar下面的一个子项目s2dao也是基于annotation的dao层实现,设计思想采用了ror约定大于配置的概念。初看起来很简单,不过在实际应用中,到了后期还是遇到了很多问题。我觉得一个企业开发中,最卡时间的不是这些类似与hello world的实现。而是对于复杂问题的可扩展性。
|
|
返回顶楼 | |