`
cevin15
  • 浏览: 27887 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

web应用dao层的开发经验小结

阅读更多
框架用多了,也有些腻。虽然struts2,spring,hibernate,ibatis等等都是一些很优秀的框架。不过,发现很多框架的功能都没用到,感觉有些浪费啊!于是,想着是不是自己学习用过框架的思想,然后用传统的无框架来进行开发。

这两天利用路上两个小时的坐公车时间,思考了如何去开发dao层。总结如下:
1、使用模板模式来开发通用的JdbcTemplate,简单的写了下jdbc模板类
public class JdbcTemplate<T> {
	
	/**
	 * 查找表对象列表
	 */
	@SuppressWarnings("unchecked")
	public List<T> query(String sql, Object[] args, BaseDao dao){
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<T> list = new ArrayList<T>();
		try {
			conn = DBUtils.getConnectionByC3P0();
			ps = conn.prepareStatement(sql);
			if(args!=null){
				for(int i=0; i<args.length; i++){
					ps.setObject(i+1, args[i]);
				}
			}
			rs = ps.executeQuery();
			while(rs.next()){
				T obj = dao.rowMapper(rs);
				list.add(obj);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if(conn.getAutoCommit()){
					DBUtils.release(rs, ps, conn);
				}else{
					DBUtils.release(rs, ps, null);
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			} 
		}
		return list;
	}
	
	/**
	 * 更新表对象
	 */
	public void update(String sql, Object[] args){
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			conn = DBUtils.getConnectionByC3P0();
			ps = conn.prepareStatement(sql);
			if(args!=null){
				for(int i=0; i<args.length; i++){
					ps.setObject(i+1, args[i]);
				}
			}
			ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if(conn.getAutoCommit()){
					DBUtils.release(null, ps, conn);
				}else{
					DBUtils.release(null, ps, null);
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
}

在这个模板类中数据库连接没有直接关闭的原因,是为了之后的事务管理。当然,模板类肯定不能只是这两个方法,具体可以参考spring的jdbctemplate来进行模板类的开发。
BaseDao是个接口,完成rs到bean的映射,代码如下:
public interface BaseDao<T> {
	public T rowMapper(ResultSet rs);
}

2、其它dao层类使用JdbcTemplate来进行开发。下面举个简单的例子:
	public List<SearchUpdate> findBySql(String sql, Object[] objs) {
		return jt.query(sql, objs, new BaseDao<User >() {
			public User rowMapper(ResultSet rs) {
				User user = new User ();
				try {
					user.setName(rs.getString("name"));
					user.setId(rs.getInt("id"));
				} catch (Exception e) {
					e.printStackTrace();
				}
				return user;
			}
		});
	}

3、使用代理模式来进行事务的处理。下面是,关于业务代理类的代码,在里面进行了事务的开启,提交或者回滚。
public class TransactionProxy implements InvocationHandler {
	private Object targetObject;

	public Object bind(Object targetObject) {
		this.targetObject = targetObject;
		return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
				targetObject.getClass().getInterfaces(), this);
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		TransactionManager tm = DBUtils.getTransactionManager();
		tm.beginTransaction();
		Object result = null;
		try {
			result = method.invoke(targetObject, args);
			tm.commitTransaction();
		} catch (Exception e) {
			tm.rollBackTransaction();
		}
		return result;
	}
}

这种代理方式,前提是代理对象必须是相应的接口的实现。如果代理对象没有接口的话,可以利用第三方包cglib来实现对象的代理。

以上纯粹只是个人的经验之谈,作为自己的小小的记录。如有错漏,望提出。完整的代码在附件中,包含了一个数据库链接池的包和cglib包。
分享到:
评论

相关推荐

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合

    根据提供的部分内容,我们可以进一步探讨如何利用Spring框架实现Web应用的开发: 1. **环境搭建**:这部分内容提到了JDK、MyEclipse、Oracle、Tomcat等工具的安装与配置。这些是进行Java Web开发的基础,确保所有...

    Java Web应用开发:优化dao层查询方法.docx

    ### Java Web应用开发:优化DAO层查询方法 #### 一、背景与目标 在Java Web应用开发中,数据访问对象(Data Access Object, DAO)层是应用架构中的关键部分之一,它负责处理与数据库交互的所有操作。对于一个现有...

    web工程DAO实例

    在软件开发领域,尤其是Web应用开发中,"DAO"(Data Access Object)模式是一种常见的设计模式,用于在应用程序和数据库之间提供一个抽象层。DAO的主要目的是为了隔离业务逻辑与数据访问逻辑,使得代码更加模块化,...

    DAO与三层结构

    DAO(Data Access Object)模式与三层结构是软件开发中常见的设计模式和架构方式,主要用于处理数据访问和业务逻辑。在企业级应用开发中,这两种技术的结合能够提高系统的可维护性、可扩展性和复用性。 DAO模式的...

    JSP直接获取dao层数据实例 java mysql jsp dao

    在Java Web开发中,JSP(JavaServer Pages)通常用于创建动态网页,而DAO(Data Access Object)层则负责数据库交互。在这个实例中,我们将探讨如何在JSP中直接调用DAO层来获取MySQL数据库中的数据。这涉及到几个...

    dbutils +dbcp 连接池构建dao层

    总结来说,"dbutils + dbcp 连接池构建DAO层"是Java Web开发中的一种常见实践,它结合了DAO设计模式的易维护性和Dbcp连接池的高性能,为数据库操作提供了一种高效、稳定的解决方案。了解和掌握这一技术,对于提升...

    Java Web三层架构的配置详解

    Java Web三层架构是一种常见的软件设计模式,用于构建可扩展、可维护且易于测试的Web应用程序。这个模式将应用逻辑划分为三个主要层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据...

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web图书管理架构设计该系统

    基于JSP+Servlet+JavaBean+JDBC+DAO的Web架构设计该系统,进一步了解并掌握如何对数据库进行操作,以及如何分析、设计一个应用系统。 需求要求: 该系统的基本需求是,系统要实现如下的基本管理功能: (1)用户分为...

    Velocity+Spring 2[1].0+Hibernate的Web应用开发框架

    结合 Velocity 模板引擎和 Hibernate 持久层框架,形成了一套高效、灵活且易于维护的 Web 应用开发方案。 #### 二、关键技术介绍 ##### 1. Velocity 模板引擎 Velocity 是一个开源的 Java 模板引擎,由 Jakarta ...

    Java web应用开发_学生成绩管理系统.docx

    《Java Web 应用开发》课程设计说明书详细阐述了如何构建一个学生成绩管理系统,该系统采用Java技术栈,结合jsp进行前端展示,是初学者理解Web应用开发和数据库管理的良好实践。以下是对该设计的一些关键知识点的...

    web应用架构1

    在这个场景中,我们讨论的是一个典型的书店Web应用的架构,它采用了一个经典的三层结构:表示层(Web层)、业务逻辑层(Service层)和数据访问层(DAO层)。这种架构模式广泛应用于单体应用,将代码组织在同一个工程...

    java web 开发技术开发技术

    理解如何配置和管理这些服务器对于开发和部署Java Web应用至关重要。 七、前端技术 虽然Java Web主要关注后端开发,但现代Web应用往往需要与HTML、CSS和JavaScript等前端技术相结合。AJAX(Asynchronous JavaScript...

    DAO 数据访问对象

    DAO模式在Java开发中非常常见,特别是在企业级应用和Web应用中。在Spring框架中,提供了对DAO的支持,例如通过事务管理、AOP(面向切面编程)来增强DAO的性能和安全性。Spring的JdbcTemplate和HibernateTemplate等...

    利用Eclipse创建数据库web应用程序.rar

    在IT行业中,开发数据库驱动的Web应用程序是一项常见的任务,而Eclipse作为一个强大的集成开发环境(IDE),提供了便捷的工具来支持这一过程。本教程将详细讲解如何利用Eclipse创建一个数据库Web应用程序,帮助...

    Maven+spring3.0MVC注释方式开发的Web应用

    在本项目中,我们主要探讨的是基于Maven和Spring 3.0 MVC框架,采用注解方式进行开发的一个Web应用程序,特别地,它还利用了SimpleJdbcTemplate进行数据操作。这个项目是一个基本的CRUD(创建、读取、更新、删除)...

    myeclipse开发\Eclipse+IDE开发Java+Web应用程序

    根据给定的文件信息,我们可以总结出以下关于使用MyEclipse和Eclipse IDE开发Java Web应用程序的知识点: ### 一、环境配置与安装 #### 1. 环境要求 - **硬件需求**:CPU主频至少1G,内存至少512M。Java开发及...

    让java网站开发从此简单起来[一个项目只用一个Servlet和一个Dao类]demo

    总结这个项目的核心思想,就是尝试通过减少组件数量来简化Java Web应用的开发流程。尽管这种方法在小型项目中可能有效,但随着项目规模的扩大,可能需要引入更多的模块化和分层设计以保持代码的可维护性和可扩展性。...

    jsp+dao+servlet实现新闻发布系统增删改

    数据库文件的包含意味着开发者无需额外设置数据库环境,可以直接运行项目,这对于初学者来说是非常友好的,可以快速体验到一个完整的Web应用程序的运行流程。 【标签】"实现基本的增删改,适合新手"表明了此项目的...

    基于maven+spring+spring mvc+mybatis 框架web项目

    在IT行业中,构建Web应用程序是一项常见的任务,而“基于maven+spring+spring mvc+mybatis框架web项目”提供了一个适用于初学者的学习路径。这个项目利用了四个关键的技术组件,它们分别是Maven、Spring、Spring MVC...

Global site tag (gtag.js) - Google Analytics