`
supttkl
  • 浏览: 17620 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Jdbc BaseDao

    博客分类:
  • java
阅读更多

package com.oa.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.oa.core.DynaForm;
import com.oa.dao.Dao;
import com.oa.jdbc.ConnectionFactory;
import com.oa.jdbc.DaoAccessException;
import com.oa.jdbc.DybaBean;
import com.oa.jdbc.JdbcPage;
import com.oa.jdbc.Page;
import com.oa.jdbc.RowsDynaClass;

/**
 * 基类DAO,实现一些基本共有方法
 * 
 * @author Gao_wx Mar 26, 2008
 */
public class BaseDao implements Dao {
	protected Log logger = LogFactory.getLog(BaseDao.class);

	// 获取数据库链接
	protected Connection getConnection() {
		return ConnectionFactory.getConnection();
	}

	// 在此链接上,根据sql语句获取List
	protected List<DybaBean> getList(Connection conn, String sql)
			throws DaoAccessException {
		try {
			Statement st = conn.createStatement(
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_READ_ONLY);
			ResultSet rs = st.executeQuery(sql);
			return getList(rs);
		} catch (SQLException e) {
			throw new DaoAccessException(sql, e);
		}
	}

	// 根据Result获取List
	protected List<DybaBean> getList(ResultSet rs) throws SQLException {
		RowsDynaClass rsdc = new RowsDynaClass(rs);
		return rsdc.getRows();

	}

	// 根据sql语句获取List
	protected List<DybaBean> getList(String sql) throws DaoAccessException {
		Connection conn = getConnection();
		return getList(conn, sql);
	}

	// 在此连接上,根据sql语句,id加载一条记录
	protected DybaBean loadById(Connection conn, String sql, int id)
			throws DaoAccessException {
		try {
			PreparedStatement pst = conn.prepareStatement(sql,
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_READ_ONLY);
			pst.setInt(1, id);
			ResultSet rs = pst.executeQuery();
			List list = getList(rs);
			if (list.size() > 1) {
				logger.warn("加载了2条以上的记录,请检查sql:" + sql);
			}
			if (list.size() == 0) {
				logger.warn("数据库没有此记录!");
				return null;
			} else {
				return (DybaBean) list.get(0);
			}
		} catch (SQLException e) {
			throw new DaoAccessException(sql, e);
		}
	}

	// 根据sql语句,id,加载一条记录
	protected DybaBean loadById(String sql, int id) throws DaoAccessException {
		Connection conn = getConnection();
		return loadById(conn, sql, id);
	}

	// 在此连接上,根据Sql和id删除一条记录,返回影响行数
	protected int deleteById(Connection conn, String sql, int id)
			throws SQLException {
		PreparedStatement pst = conn.prepareStatement(sql,
				ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
		pst.setInt(1, id);
		int del = pst.executeUpdate();
		return del;
	}

	// 根据sql语句,id删除一条记录
	protected int deleteById(String sql, int id) throws DaoAccessException {
		Connection conn = getConnection();
		try {
			int del = deleteById(conn, sql, id);
			return del;
		} catch (SQLException e) {
			throw new DaoAccessException(sql, e);
		}

	}

	protected Page getPage(DynaForm form, String sql) throws DaoAccessException {
		Connection conn = getConnection();
		Page page = getPage(conn, form, sql);
		return page;
	}

	// 获取分页对象
	protected Page getPage(Connection conn, DynaForm form, String sql)
			throws DaoAccessException {
		int p = form.getInt("p");
		if (p < 1) {
			p = 1;
		}
		int size = form.getInt("size");
		if (size < 10) {
			size = 10;
		}
		Page page;
		try {
			page = new JdbcPage(conn, sql, p, size);
		} catch (SQLException e) {
			throw new DaoAccessException(sql, e);
		}
		return page;
	}
}

所有的select sql,不管是一对多,还是一对一,还是多对一,尽可能通过视图操作数据库!
数据库要改动的时候,改动视图即可!
如果表经常可能改动。那么请用动态表
http://supttkl.iteye.com/admin/blogs/181411

分享到:
评论
3 楼 wuzedewuze 2009-02-17  
老大 代码是不是不全啊com.oa.tools包呢~~?
2 楼 supttkl 2008-04-16  
如果是安全性高的项目,那么恐怕你连一个表都操作不到。你操作的全部是视图!
1 楼 cino 2008-04-15  
视图?可能出问题吧,都不提倡用。

相关推荐

    jdbc BaseDao

    jdbc DataHelp jdbc 连接数据库包

    jdbcBaseDao

    `jdbcBaseDao` 是一个基于Java的数据库访问层基础类,它封装了JDBC(Java Database Connectivity)的一些常见操作,如增、删、改、查等,旨在简化数据库交互过程,提高代码的可读性和可维护性。对于初学者来说,理解...

    jdbc basedao

    java jdbc basedao 应用

    Spring JDBC BaseDao

    基于Spring JDBC 的一个公用持久化层源代码,支持普通的增删改查,仅支持Spring JDBC环境使用~

    基于SpringJDBC的BaseDAO

    ### 基于Spring JDBC的BaseDAO实现与应用 #### 概述 在Java开发领域,尤其是企业级应用开发中,持久层框架是至关重要的组件之一。Spring框架提供了多种方式来处理数据库操作,其中Spring JDBC模块是轻量级且功能...

    最全的javaJDBC--BaseDao

    最全的javaJDBC技术的BaseDao,相当于框架封装了,引用之后直接调用其中的方法传递参数以及sql语句就可以使用了。

    JDBC连接池(通用basedao)可直接用的模板

    本文将深入探讨JDBC连接池的概念、工作原理,并以"通用basedao"模板为例,讲解如何在实际项目中应用。 首先,我们需要理解JDBC连接池是什么。JDBC连接池,全称为Java Database Connectivity Connection Pool,它是...

    基于JDBC封装的BaseDao(实例代码)

    本篇文章将介绍一个基于JDBC封装的`BaseDao`实例,该实例提供了一个通用的DAO(Data Access Object)模板,可以应用于多种实体类的操作。 首先,`BaseDao`泛型类被定义为`&lt;T&gt;`,表示它可以处理任何类型的对象。类中...

    JDBC连接数据库BaseDao通用类(可以调用存储过程)

    ### JDBC与BaseDao通用类 #### JDBC(Java Database Connectivity) JDBC是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC定义了一系列的API,...

    basedao_basedao数据库_

    例如,一个简单的基于JDBC的BaseDao实现可能如下: ```java public abstract class BaseDao&lt;T&gt; { private DataSource dataSource; public BaseDao(DataSource dataSource) { this.dataSource = dataSource; } ...

    基于反射和元数据强大BaseDao(JDBC),无需遍历结果集,超方便的

    可以将从数据库中查到的数据直接封到实体类!!!基于反射和元数据

    基于JDBC封装的BaseDao(实例代码).rar_java编程

    "基于JDBC封装的BaseDao实例"是一个常见的设计模式,用于简化数据库操作,提高代码复用性,降低耦合度。BaseDao通常作为基类,提供通用的数据库操作方法,比如增删查改(CRUD)等。 首先,我们需要了解JDBC的基本...

    NC65通过BaseDAO操作数据库

    NC65通过BaseDAO操作数据库,包含接口类及接口实现类: /** * 获取baseDAO * @return */ public BaseDAO getBaseDAO() { if(baseDAO == null){ baseDAO = new BaseDAO(); } return baseDAO; } public ...

    SpringBoot_BaseDao.zip

    SpringBoot集成了多种数据访问技术,如JDBC、MyBatis、Hibernate等,使得我们可以轻松配置和使用。在SpringBoot中,通过@Configuration和@Bean注解,我们可以配置DataSource(数据源)和JdbcTemplate或JPA实体,来...

    BaseDao.java,DaoUtil.java

    `BaseDao` 和 `DaoUtil` 的组合使用,使得开发者能够以更安全、高效的方式进行数据库操作,同时避免了直接与JDBC API打交道时的繁琐细节。这种设计模式在Java Web开发中非常常见,特别是在基于Spring框架的项目中,...

    ssh+baseDao实现分页

    Spring还包含了对其他组件如JDBC、ORM、WS等的支持。 2. **Struts**:这是一个基于MVC(Model-View-Controller)模式的Web应用框架,主要用于处理HTTP请求,协调模型、视图和控制器之间的交互。Struts负责接收用户...

    Spring声明式事务及BaseDao完整版

    3. **实现方式**:BaseDao通常基于JDBC或ORM框架(如Hibernate、MyBatis)实现,提供基本的SQL执行和结果映射功能。 4. **扩展性**:子类可以继承BaseDao,并根据业务需求添加特定的数据库操作方法。 四、Spring...

    java BaseDao

    1. **插入(Insert)**:使用JDBC的PreparedStatement或MyBatis的SqlSession插入数据。 ```java public int insert(T entity) { // 创建SQL语句 String sql = "INSERT INTO table_name (column1, column2) VALUES ...

    BaseDao的封装

    这些方法通常通过JDBC(Java Database Connectivity)或ORM(Object-Relational Mapping)框架如Hibernate、MyBatis来实现。`BaseDao`的封装使得每个具体的DAO类只需要关注业务逻辑,无需关心底层的数据访问细节。 ...

    java mysql baseDao

    Java MySQL BaseDAO是一个常见的设计模式,用于简化Java应用程序与MySQL数据库之间的交互。在这个模式中,BaseDAO类作为数据访问对象(DAO)的基类,提供了一些通用的方法,使得子类可以方便地执行CRUD(创建、读取...

Global site tag (gtag.js) - Google Analytics