看了Robbin前两天发的那帖,Warp framework - 一个相当有前途的Java轻量级Web开发框架(
http://www.iteye.com/topic/168780),让人眼前一亮,特别是基于annotation的warp-dynamic-finder部分给人印象非常深刻,利用它,80%情况下Dao的实现不用去写了,只要定义个interface,加几个annotation轻松搞定,自己就着手实现了一个,基于spring的HibernateDaoSupport,其用法也很简单,如下:
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>
非常的简单,也很初级,有什么不足,请大家多多指教,呵呵。
- dynamicdao.zip (43.4 KB)
- 描述: 依赖Spring,Hibernate,测试部分依赖EasyMock,SpringMock,HSQLDB,JUnit
- 下载次数: 336
分享到:
相关推荐
A sample Java web application that demonstrates how <br>Deployment : * Install Dekoh desktop * Start dekoh in interactive mode by executing dekoh_shell.bat / dekoh_shell.sh in directory C:...
warp-dynamic-finder:提供了基于Annotation的动态查询功能,让数据库查询变得异常简单,不再需要DAO层 warp-mvc:借鉴了Tapestry5,提供了一个基于事件机制和组件化的Web层,并且组件注入方式高度IoC化 warp-...
Mac Warp IP 优选.zip.cab
warp 一种快速远程登录软件 warp 一种快速远程登录软件
Win Warp IP 优选.rar.cab
反正使用过的觉得都挺不错的,至于warp到底是做啥的,兄弟们你们自己去查查好不,请不要在这里问一些无关紧要的问题哈,话不多说,直接上链接,反正你想看的网站网速都还是可以的,都静下心来看这么多了,还不赶紧go...
osu timewarp and relax
老古董的IBM OS/2 4warp,用VMware7虚拟机制作的,希望大家喜欢
Cloudflare WARP不仅可以让你访问受地理限制的内容的,而且在确保您的数据在传输过程中得到保护。因此,您与正在使用的应用程序之间的网络无法监视您。当你在当地的咖啡店时,它将帮助你的数据免于被人嗅探。这也将...
Warp_Dash ipa iphone
Cloudflare_WARP_Release-x64.msi
Cloudflare Warp Linux Command
开源项目-spolu-warp.zip,warp: Secure and simple terminal sharing
轻量级的Guice2.0代替了Spring,速度更快,项目体积更小,Hibernate3.2与JPA的结合使用代替了传统的配置文件,使Hibernate的开发更简单,本项目基本上是零配置开发,由于我只能上传小于15M的文件,故JAR被我删除了,...
特征自动安装 CloudFlare WARP 官方 Linux 客户端快速开启WARP代理模式,使用SOCKS5访问WARP网络自动安装WireGuard相关组件配置 WARP IPv4 网络接口(使用 WireGuard) 配置 WARP IPv6 网络接口(使用 WireGuard) ...
Cloudflare_WARP_Release-x64.msi.cab
Multi Projector Warp System unity投影融合软件 请支持正版 https://assetstore.unity.com/packages/tools/camera/multi-projector-warp-system-75582
Multi Projector Warp System UNITY投影融合软件 https://assetstore.unity.com/packages/tools/camera/multi-projector-warp-system-75582
有限元开源代码warp3d_fortran编写,目前发现唯一可以借鉴的疲劳寿命有限元开源代码。
TRANSMIT CODE FOR WARP USING MATLAB