`
studyworks
  • 浏览: 16710 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

又一个DynamicDao

    博客分类:
  • java
阅读更多

模型如下:

@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">

 

分享到:
评论
4 楼 heshencao 2008-05-14  
呵呵,老大你写的东东,不错。我学习了(刚刚一新手哈!)
不过,要是再写一点注释就更好了!仍有很多东东没懂。不过慢慢研究了!
不过呢,也谢谢了!
3 楼 studyworks 2008-05-14  
<p>实现Query Annotation的主要代码如下:</p>
<pre name='code' class='java'>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();
}
}
</pre>
 
<pre name='code' class='java'>@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Query {
String value() default "";
}
</pre>
<p> 最后在GenericDaoFactoryBean的方法initInternalAdvices() 中加入addAdvice(new AnnotationQueryInterceptor())即可;</p>
<pre name='code' class='java'> void initInternalAdvices() {
addAdvice(new SessionInterceptor());
addAdvice(new SimpleCriteriaInterceptor());
addAdvice(new TypedSessionInterceptor());
addAdvice(new DynamicFinderInterceptor());
addAdvice(new AnnotationQueryInterceptor());
} </pre>
 
<p>要扩展其他接口,如ActiveRecord中的find_or_create_by等功能也比较简单。</p>
<p> </p>
2 楼 studyworks 2008-05-14  
<div class="quote_title">Norther 写道</div>
<div class="quote_div">没看出来dynamic在哪?就是自己实现了一套Criteria,而且GenericDao都继承Session了,等于把Session整个都暴露给调用dao的人了,那还要dao干螃蟹?直接访问session不就完了,不明白这个dynamic dao的设是什么目的。</div>
<p><br />已更新!</p>
1 楼 Norther 2008-05-14  
没看出来dynamic在哪?就是自己实现了一套Criteria,而且GenericDao都继承Session了,等于把Session整个都暴露给调用dao的人了,那还要dao干虾米?直接访问session不就完了,不明白这个dynamic dao的设是什么目的。

相关推荐

    Dynamic Dao-开源

    动态Dao(Dynamic Dao)是一个基于Java的开源JDBC Object-Relational Mapping (ORM)框架,它的设计目标是简化数据库操作,提高开发效率。这个框架利用注解的方式,将SQL语句与接口方法关联起来,使得开发者可以以...

    hibernate不是泛型的通用DAo1

    例如,`DynamicDao`可能是一个非泛型接口,它包含了一些基本的CRUD操作,可以直接被任何类实现,而不需要指定特定的实体类型。`DynamicDaoImpl`可能是实现了`DynamicDao`接口的具体类,它包含了与Hibernate集成的...

    BeetlSQL数据库访问框架 (DAO工具) v3.25.3.zip

    BeetlSQL是一个高效、简洁、易用的Java ORM(对象关系映射)框架,它致力于简化数据库操作,减轻开发人员在数据访问层的工作负担。作为一款DAO(数据访问对象)工具,BeetlSQL提供了丰富的特性,使得数据库查询与...

    mysql-oracle-dynamic-datasource.zip

    本项目"mysql-oracle-dynamic-datasource.zip"提供了一个基于SpringBoot和MyBatis的轻量级多数据源框架,允许同时连接MySQL和Oracle两种不同的数据库系统。这个框架对于那些需要在不同数据库间灵活切换的应用来说,...

    SSM(MyBatis自动生成实体类、DAO接口和Mapping映射文件)

    2,新建一个dynamic web project项目 3,在src里创建一个generatorConfig.xml文件 4,修改里面内空为,然后右键generatorConfig.xml文件运行,Run as--Run MyBatis Generator插件, 有两个注意,1,location="E:...

    ch06-dynamic-sql.rar

    在DAO层,我们通常会定义一个接口,其中包含各种操作数据库的方法。这些方法的参数通常包括用于动态SQL的条件对象。例如,我们可以定义一个`UserDao`接口,包含一个`findUsersByCriteria`方法,接收一个包含多种查询...

    liming.dynamic.example.zip

    《SpringMVC框架详解——基于liming.dynamic.example.zip的实践》 在当今的Web开发领域,..."liming.dynamic.example.zip"就是一个理想的起点,让我们一起在这个实例中深化对SpringMVC的理解,提升我们的编程技能。

    SQL.rar_MyBatis3DynamicSql_dynamic mybatis_mybatis_mybatis Dyna

    MyBatis,作为一个优秀的Java持久层框架,极大地简化了数据库操作,它允许开发者将SQL语句直接写在XML配置文件或者注解中,实现了SQL与Java代码的解耦。而在MyBatis 3中,引入了动态SQL的功能,这正是"SQL.rar_...

    java reflect and dynamic proxy .Java反射和动态代理

    1. **Proxy类**:Proxy类的newProxyInstance()方法用于创建动态代理对象,它需要一个ClassLoader、一个接口数组和一个InvocationHandler作为参数。 2. **InvocationHandler接口**:定义了代理对象在调用方法时的...

    一个完整的SSH开发示例

    1. **项目创建**:新建一个Dynamic Web Project,然后导入Struts2、Spring和Hibernate的库。 2. **配置环境**:配置web.xml、struts.xml、spring配置文件(如applicationContext.xml)等,设置拦截器、Action类、...

    Microsoft.Office.Interop.Access.dll

    DAO,全称为Data Access Objects,是Microsoft早期提供的一个数据库访问接口,主要用于与Jet数据库引擎交互,包括Access数据库。DAO提供了一套面向对象的API,用于创建、操作数据库对象,如Recordset、TableDef、...

    structs1.x的配置及一个简单的登陆和增删改查的例子

    Struts1.x还支持动态方法调用(Dynamic Method Invocation,DMI),使得可以使用一个通用的Action类处理多种操作。通过在URL中指定方法名,如`/employee/delete/123`,可以调用特定的处理方法,例如删除ID为123的...

    jsf CRUD 简单的Eclipse例子

    首先,在Eclipse中新建一个Dynamic Web Project,然后为项目添加JSF库,通常包括`javax.faces-api`和`primefaces`(一个流行的JSF组件库)等依赖。 **3. 定义实体类** 为了实现CRUD操作,我们需要一个数据模型,这...

    myeclipse_struts_oracle

    1. **项目创建**:在MyEclipse中新建一个Dynamic Web Project,并配置相关的Struts支持。 2. **Struts配置**:编写struts-config.xml文件,定义ActionMapping和ActionForm,设置请求的处理逻辑。 3. **数据库连接**...

    Jsp+servlet+javabean

    首先,需要在一个开发环境中创建一个新的工程,这里以Eclipse为例,创建一个Dynamic Web Project。接着,为了使项目能够与Oracle数据库交互,需要将Oracle的JDBC驱动包`classes12.jar`复制到Tomcat服务器的`common/...

    利用DLL和DAO技术在Pro_E中开发铸造工艺CAD数据库.pdf

    该开发旨在创建一个专门的铸造工艺CAD数据库,从而支持铸造行业内的设计和制造流程。 描述和摘要部分强调了中国在Pro/Engineer应用日益普及的背景下,二次开发工具Pro/Toolkit的重要性。同时指出,通过DLL技术实现...

    vc6.0数据库操作

    6. **AdoObject**: 文件名"AdoObject"可能指的是一个自定义的类,用于封装ADO对象,如CAdoConnection、CAdoRecordset等,这可以帮助简化代码,提高代码可读性和复用性。具体实现会根据项目需求进行设计。 总的来说...

    jquery树(hibernate自关联)myeclipse7.0

    4. **MyEclipse7.0配置**:在MyEclipse7.0中,创建一个新的Dynamic Web Project,导入Hibernate库,配置Hibernate的配置文件`hibernate.cfg.xml`,包含数据库连接信息。 5. **编写DAO层**:创建Hibernate的DAO...

Global site tag (gtag.js) - Google Analytics