`
lggege
  • 浏览: 375518 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于JDBC,JPA Annotation 实现的简易CRUD的泛型Dao

    博客分类:
  • Java
阅读更多
想法的由来是蛮长的历史原因:


[使用iBATIS的历史]
    使用iBATIS已经有很长一段时间了,系统中的CRUD是使用模板工具生成的代码,虽说有工具生成,但看着一大堆CRUD的SqlMap.xml文件,依旧是很不爽的一件事情.


[Hibernate与iBATIS的整合]
    后来, 考虑了整合Hibernate和iBATIS的想法,也就是Hibernate处理CRUD, iBATIS负责复杂查询. 实践后是可行的,目前项目中也采纳并加以推广使用.

    但是, Hibernate是有自己的缓存机制,而iBATIS完全没有像Hibernate这么强烈的延时缓存的概念, (当然,iBATIS有CacheModel,但那也是结果集的缓存,而不是new一个对象都是缓存的.) 而且, Hibernate是最后一次性flush事务,一个事务内的其他操作都是对缓存的操作.而iBATIS在一个事务内的操作都是直接对connection进行操作.
    正由于Hibernate与iBATIS之间有这么大的差异,处理起来就必须注意调用Hibernate与iBATIS的先后顺序.



[使用JDBC实现基本CRUD功能,替换掉Hibernate]

    但是,最近又在想,既然只是一个简单的CRUD功能就劳师动众的使用Hibernate,而且,还带来很多不必要的麻烦, 于是考虑在JDBC的基础上自己实现CRUD的功能, 由于iBATIS也是直接进行connection操作的,JDBC同样也是,那么就事务而言比Hibernate与iBATIS的整合简单多了,避免了很多不必要的烦恼.


[依赖JPA的Entity,Id,Column的Annotation配置]
    在基本实现后,考虑继续使用JPA的Annotation配置来维护Entity Bean,使用后,虽然感觉比较冗余,不过也蛮不错的. 由于Annotation不熟,目前只能将@Id, @Column等配置写于getter方法上. 目前的实现也没有处理任何的容错,field都必须标注@Column.


    东西蛮简单的, 莫见怪. 具体内容可以见项目代码, 项目基于Eclipse3.4,Spring2.5,Mysql.
    项目rar的lib中已经包含了所依赖的所有jar包. 项目rar中也有基本的说明文字.

摘录基本代码:

Entity Bean
@Entity(name = "ONE")
public class OneBean extends BaseBo {
	private BigDecimal id;

	@Id
	@Column(name = "ID")
	public BigDecimal getId() {
		return id;
	}
        // ...
}


CrudDao的使用
public class OneBeanService implements IOneBeanService {
	private CrudDaoFactory crudDaoFactory;

	public void noException() throws Exception {
		CrudDao<OneBean> crudDao = crudDaoFactory.getCrudDao(OneBean.class);
		OneBean bean = this.createOneBean(new BigDecimal(100));
		crudDao.insert(bean);
	}
        // ...
}


Spring配置
	<bean id="crudDaoFactory" class="cn.iwoo.frame.orm.CrudDaoFactory">
		<property name="dbType" value="mysql"/>
		<property name="dataSource" ref="dataSource"/>
	</bean>
	
	<bean id="oneBeanService" class="cn.iwoo.frame.orm.service.impl.OneBeanService">
		<property name="crudDaoFactory" ref="crudDaoFactory"/>
	</bean>



下面是Test.java运行时输出的log信息:
16:48:11,156 DEBUG CrudDao:36 - INSERT INTO ONE(NAME, ID, PASSWORD, SEX, BIRTH_DATE_TIME) VALUES ('xx', 200, 'psw', null, '2009-02-23 16:48:11.156')

16:48:11,171 DEBUG CrudDao:66 - SELECT NAME, ID, PASSWORD, SEX, BIRTH_DATE_TIME FROM ONE WHERE ID = 200

16:48:11,203 DEBUG CrudDao:124 - NAME,ID,PASSWORD,SEX,BIRTH_DATE_TIME

16:48:11,203 DEBUG CrudDao:128 - xx,200,psw,null,2009-02-23 16:48:11.156

分享到:
评论
6 楼 ynstudio 2010-02-20  
我们也实现了一个类似的东东,不过有点罗嗦

http://code.google.com/p/simplejee/source/browse/#svn/trunk/simplejee/src/com/yuqiaotech/simplejee/miniorm

这个是一点说明
http://code.google.com/p/simplejee/source/browse/trunk/simplejee/document/miniorm.txt

这个是测试类,CRUD都有了
http://code.google.com/p/simplejee/source/browse/trunk/simplejee/test/com/yuqiaotech/simplejee/test/miniorm/TestSessionFactory.java
5 楼 nishijia 2010-02-20  
这个 能支持多表吗? 有select例子吗? 看了你的Test 都只是插入的例子
4 楼 CodingMouse 2010-02-20  
不是很喜欢使用侵入式的Annotation进行ORM。
3 楼 hommy8 2010-02-20  
先下载看看。。。
2 楼 zozoh 2009-05-23  
lggege 写道
iBATIS 3.0将支持Annotation,看来,iBATIS也是逃不错Annotation的大趋势呀。


同意,但是现在似乎一说支持  Annotation 就是得支持 JPA, 楼下的怎么看?
1 楼 lggege 2009-05-10  
iBatis-Ext: 一个iBatis + annotations 的框架,通过 annotations, 来简化你的开发
http://www.ibstaff.net/fmartinez/?p=48

使用步骤
1. 编写你的 POJO
See the code here
2. 使用@DAO annotate 来编写DAO接口
3. 使用@SelectStatement, @UpdateStatement, ….来给接口增加方法
4. 编写sqlmap.xml 文件
5. 编写sqlMap config文件
6.其他的使用同IBatis

如果步骤5使用代码生成工具替换的话,那么还是一个不错的解决方案。


iBATIS 3.0将支持Annotation,看来,iBATIS也是逃不错Annotation的大趋势呀。

相关推荐

    Hibernate泛型Dao

    【描述】"基于hibernate5 泛型Dao实例,下载后改一下数据库配置直接可以用",意味着这个压缩包文件提供了一个已经实现好的Hibernate5版本的泛型Dao示例项目。用户只需要根据自己的数据库环境修改相应的配置信息,就...

    泛型DAO模式在Java Web开发中的应用.pdf

    二、使用JPA实现泛型DAO JPA(Java Persistence API)是一种java持久层标准,提供了一个常用的DAO模式实现。JPA可以与Struts、Spring框架集成,实现用户管理系统的开发。使用JPA可以将业务逻辑代码和持久化代码分离...

    基于泛型的通用Dao接口和hibernate的实现

    3. 实现泛型Dao接口的方法,例如 create、delete、update、findById 等。 Hibernate 对泛型Dao接口的实现的代码实现: ```java public class GenericHibernateDaoImpl&lt;T&gt; implements GenericDao&lt;T&gt; { private ...

    基于JPA的CRUD例子

    **基于JPA的CRUD操作详解** Java Persistence API(JPA)是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它为开发者提供了一种声明式的方式来处理对象与数据库之间的映射,简化了数据库操作。在这...

    封装JPA的数据操作公共DAO基类

    通过将公共通用操作写进父类简化代码,提高代码的复用。 面向接口 使用继承 泛型 引入JPA API查询 以及 元数据 提高代码的安全性.

    Java Web程序运用中泛型DAO的作用.zip

    在实际的Java Web应用中,我们可以结合Spring框架的Hibernate或JPA支持,进一步简化泛型DAO的实现,利用Spring的模板类如JdbcTemplate、HibernateTemplate等,自动处理SQL执行和结果映射。 总的来说,泛型DAO在Java...

    SpringBoot整合Jpa和Thymeleaf实现CRUD

    SpringBoot整合Jpa和Thymeleaf实现CRUD是一个典型的Web开发应用场景,它结合了SpringBoot的便捷性、JPA的数据持久层处理以及Thymeleaf的模板引擎,旨在简化开发流程并提供高效的数据库操作。在这个项目中,我们可以...

    Spring+jpa实现简单的CRUD

    在本教程中,我们将深入探讨如何使用Spring框架与Java Persistence API (JPA) 实现基本的CRUD(创建、读取、更新、删除)操作。首先,我们需要理解Spring框架是Java开发中的一个核心组件,它提供了多种服务,如依赖...

    Springboot+JPA实现分页+crud

    本篇将详细介绍如何使用Spring Boot结合Spring Data JPA实现分页和CRUD(Create、Read、Update、Delete)操作。 首先,我们需要在项目中引入Spring Data JPA的依赖。在`pom.xml`文件中添加如下Maven依赖: ```xml ...

    基于springboot+jpa实现java后台api接口,点餐系统.zip

    基于springboot+jpa实现java后台api接口,点餐系统 基于springboot+jpa实现java后台api接口,点餐系统 基于springboot+jpa实现java后台api接口,点餐系统 基于springboot+jpa实现java后台api接口,点餐系统 基于...

    JPA Annotation Reference

    JPA Annotation Reference

    JPA环境搭建及CRUD

    本教程将引导你搭建JPA环境,并进行基本的CRUD(创建、读取、更新、删除)操作。 首先,**环境搭建**是关键步骤,包括以下几个方面: 1. **添加依赖**:在你的项目中(通常是Maven或Gradle项目),你需要引入JPA的...

    JPA + Hibernate 3 CRUD操作历史审计日志的解决方案

    这篇文章将深入探讨如何使用JPA与Hibernate实现CRUD(创建、读取、更新、删除)操作的历史审计日志功能。历史审计日志是跟踪和记录数据变化的重要工具,对于业务分析和问题排查至关重要。 首先,我们需要理解JPA的...

    hibernate不是泛型的通用DAo1

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

    JPA(hibernate) Dao 和 DaoSupport

    在JPA和Hibernate中,DAO通常用于执行CRUD(创建、读取、更新、删除)操作。 **DaoSupport类:** 在Spring框架中,`DaoSupport`是一个抽象类,为DAO实现提供了一些基础支持,比如初始化和关闭数据库资源。继承自`...

    SSH2全注解整合(spring2.5+hibernate3.3+struts2.1+泛型DAO+proxool连接池)

    泛型DAO(Data Access Object)是一种设计模式,用于抽象数据访问层的操作,提供通用的CRUD(Create, Read, Update, Delete)方法。通过泛型,DAO可以适用于多种类型的实体,降低了代码重复。例如,一个BaseDAO接口...

    jdbc.rar_jdbc jpa_jpa jdbc _statement

    把JDBC应用改成JPA程序,需要把原来通过JDBC API访问数据库的代码替换成使用JPA代码。 JDBC访问数据库的主要工作包括: &#61550 得到JDBC驱动程序; &#61550 使用DriverManager,Connection,Statement,ResultSet等...

    jpa对表的crud操作

    在JPA中,对表的CRUD操作主要通过`EntityManager`接口来实现,下面我们将详细介绍这些操作。 1. 创建(Create) 在JPA中,创建新记录通常使用`EntityManager`的`persist()`方法。例如,创建一个新的`Person`对象并...

    JPA.rar_JPA 封装DAO

    在实际应用中,Spring Data JPA是一个基于JPA的流行框架,它扩展了JPA的功能,提供了更多的便利,如自动生成查询方法,只需定义接口,无需编写实现。Spring Data JPA的Repository接口使得开发者可以更快速地构建数据...

Global site tag (gtag.js) - Google Analytics