- 浏览: 160883 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (134)
- JAVA Collection,Map (6)
- JAVA IO (6)
- JAVA 线程 (12)
- JAVA 反射机制 (6)
- JSP (2)
- JAVASCRIPT (6)
- JAVA OOP (4)
- Struts (4)
- Hibernate (5)
- Spring (9)
- IBatis (8)
- HTML (1)
- CSS (1)
- ORACLE (1)
- Servlet (4)
- DATABASE (5)
- JAVA逻辑 (1)
- JVM学习 (8)
- 设计模式 (13)
- JDBC (1)
- JAVA XML (6)
- Jquery (4)
- IT生活 (2)
- JAVA Web Servece (2)
- EJB (2)
- C语言基础 (3)
- JAVA数据结构和算法 (4)
- C数据结构和算法 (0)
- JAVA Collection (5)
- Map (5)
- Inner Class (1)
- JVM (0)
- tomcat (0)
- 版本控制 (1)
最新评论
-
baukh789:
...我们公司最近也在推这个东西,SVN用了四五年了,猛的换一 ...
git 初使用 -
BuN_Ny:
时序图???????????????????
EA入门-4 -
308202251:
308202251 写道308202251 写道3082022 ...
Java 反射机制中 getMethod()和getDeclaredField()区别 -
308202251:
308202251 写道308202251 写道3082022 ...
Java 反射机制中 getMethod()和getDeclaredField()区别 -
308202251:
308202251 写道308202251 写道3082022 ...
Java 反射机制中 getMethod()和getDeclaredField()区别
第一个是操作数据库方法的抽象接口,
其实这个接口也很简单,定义了那么几个方法,说白了就是操作数据库的。
为什么要写成泛型的接口,为了就是后面大家的业务有针对性,一个实体一个业务功能类。
- package com.yd.idao;
- import java.util.List;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import com.yd.support.JDataSet;
- /**
- * 一个定义了所有我所需要的数据库操作的方法接口,
- * 为什么定义为抽象,我自己都搞不清楚,
- * 这里定义了泛型,这个很关键,你会看到泛型在这里的使用
- * @author kanny
- *
- * @param <T>
- */
- public abstract interface ISqlHelper<T> {
- /**
- * 执行sql语句,大多为单句插入语句
- * @param sql 单句的sql语句
- * @param params 插入的参数
- * @param only 但为true时,sql语句为查询数量的查询语句
- * @return
- * @throws SQLException
- */
- public boolean execute(String sql, Object[] params, boolean only) throws SQLException;
- /**
- * 执行sql的批处理
- * @param sqlBatch 多条sql语句
- * @return
- * @throws SQLException
- */
- public boolean executeBatch(String[] sqlBatch) throws SQLException;
- /**
- * 执行存储过程
- * @param procName 存储过程名称
- * @param params 存储过程说需要的参数
- * @return
- * @throws SQLException
- */
- public boolean executeCall(String procName, Object[] params) throws SQLException;
- /**
- * 查询一行数据封装成java的实体
- * @param sql sql语句
- * @param params sql条件参数
- * @param viewName 视图名字,在查询多表关联的数据时用于区分
- * @param executeCall 是否是存储过程,如果为true,第一个sql的参数为存储过程名称
- * @return
- * @throws SQLException
- */
- public T find(String sql, Object[] params, String viewName, boolean executeCall) throws SQLException;
- /**
- * 查询多行数据封装成java的实体加入一个List里
- * @param sql sql语句
- * @param params sql条件参数
- * @param viewName 视图名字,在查询多表关联的数据时用于区分,循环封装实体比单一的石头封装要复杂
- * @param executeCall 是否是存储过程,如果为true,第一个sql的参数为存储过程名称
- * @return
- * @throws SQLException
- */
- public List<T> findList(String sql, Object[] params, String viewName, boolean executeCall) throws SQLException;
- /**
- * 为了方便操作,我还特意写定义了这个返回ResultSet的方法,便于直接操作
- * @param sql
- * @param params
- * @param executeCall
- * @return
- * @throws SQLException
- */
- public ResultSet returnResultSet(String sql, Object[] params, boolean executeCall) throws SQLException;
- /**
- * 我的底层分页方法,我会给出具体代码,但这里用的只是sql server 2008的数据库分页
- * @param sql
- * @param orderby 排序列
- * @param currentPage 当前页
- * @param pageSize 每页多少行
- * @return
- * @throws SQLException
- */
- public List<T> findListAsPager(String sql, String orderby, int currentPage, int pageSize) throws SQLException;
- /**
- * 后来为了方便操作,想朋友要来了这个JDataSet类,类似.net的DataTable的作用
- * @param sql
- * @param params
- * @param fillColumnNames 是否填充类名,请看方法代码
- * @param executeCall
- * @return
- */
- public JDataSet getJDataSet(String sql, Object[] params, boolean fillColumnNames, boolean executeCall);
- /**
- * 由于有了JDataSet这个类,于是我有写了调用这个类的分页方法
- * @param sql
- * @param orderby
- * @param currentPage
- * @param pageSize
- * @return
- * @throws SQLException
- */
- public JDataSet getJDataSetAsPager(String sql, String orderby, int currentPage, int pageSize) throws SQLException;
- /**
- * 为了方便起见,我多写了一个直接传入ResultSet而封装JDataSet的多余方法
- * @param rs
- * @param fillColumnNames
- * @return
- * @throws SQLException
- */
- public JDataSet loadJDataSet(ResultSet rs, boolean fillColumnNames) throws SQLException;
- /**
- * 得到查询数据的行数
- * @param sql
- * @return
- * @throws SQLException
- */
- public int getRowCount(String sql) throws SQLException;
- /**
- * 请看源码
- * @param rs
- * @param column
- * @return
- * @throws SQLException
- */
- public String changeFont(ResultSet rs, String column) throws SQLException;
- /**
- * 得到连接
- * @return
- * @throws SQLException
- */
- public Connection returnConn() throws SQLException;
- /**
- * 清楚所有数据库操作对象
- * @throws SQLException
- */
- public void clearAllsql() throws SQLException;
- }
第2个类是实现这个抽象接口的抽象模版方法类
这个类最为关键,它肯定是实现了ISqlHepler.java里面的所有的方法。
其中:
protected abstract T loadDataBean(ResultSet rs, String viewName) throws SQLException;
protected abstract T loadDataBeanSelf(ResultSet rs) throws SQLException;
这2个方法是SqlHelper.java里留出来了,就是为了大家可以自己封装实体javabean来用
- package com.yd.dao;
- import java.sql.*;
- import java.util.*;
- import com.yd.db.DBConnPoolMgr;
- import com.yd.idao.ISqlHelper;
- import com.yd.support.JDataSet;
- public abstract class SqlHelper<T> implements ISqlHelper<T> {
- protected java.sql.Connection conn = null ;
- protected java.sql.PreparedStatement pst = null ;
- protected java.sql.Statement st = null ;
- protected java.sql.CallableStatement cs = null ;
- protected java.sql.ResultSet rs = null ;
- protected java.sql.ResultSetMetaData rm = null ;
- public Connection returnConn() throws SQLException {
- //DBConnPoolMgr是自己写的一个简单连接池类,用来得到连接,我后面会给出这个类的代码
- return (conn = DBConnPoolMgr.getInctence().getConnect());
- }
- private PreparedStatement returnPst(String sql, Object[] params) throws SQLException {
- if (conn == null || conn.isClosed()) conn = returnConn();
- pst = conn.prepareStatement(sql);
- if (params != null )
- for ( int i = 0 ; i < params.length; i++)
- pst.setObject(i + 1 , params[i]);
- return pst;
- }
- protected CallableStatement returnCs(String procName, Object[] params) throws SQLException {
- if (conn == null || conn.isClosed()) conn = returnConn();
- String call = "" ;
- if (params != null ) {
- call = "{call " + procName + "(" ;
- for ( int c = 0 ; c < params.length - 1 ; c++)
- call += "?," ;
- call += "?)}" ;
- } else
- call = "{call " + procName + "()}" ;
- cs = conn.prepareCall(call);
- if (params != null )
- for ( int i = 0 ; i < params.length; i++)
- cs.setObject(i + 1 , params[i]);
- return cs;
- }
- public void clearAllsql() {
- try
- {
- if (rs != null ) rs.close();
- if (cs != null ) cs.close();
- if (st != null ) st.close();
- if (pst != null ) pst.close();
- if (conn != null ) {
- DBConnPoolMgr.getInctence().returnConnect(conn);
- }
- rs = null ;
- cs = null ;
- st = null ;
- pst = null ;
- }
- catch (SQLException ex) { ex.printStackTrace(); }
- }
- public boolean execute(String sql, Object[] params, boolean only) {
- boolean bVal = false ;
- try
- {
- if (only) {
- rs = returnPst(sql, params).executeQuery();
- while (rs.next()) bVal = true ;
- } else {
- returnPst(sql, params).executeUpdate();
- bVal = true ;
- }
- }
- catch (SQLException ex) { ex.printStackTrace(); }
- finally { clearAllsql(); }
- return bVal;
- }
- public boolean executeBatch(String[] sqlBatch) {
- boolean bVal = false ;
- try
- {
- conn = returnConn();
- st = conn.createStatement();
- boolean autoCommit = conn.getAutoCommit();
- for ( int i = 0 ; i < sqlBatch.length; i++) {
- if (sqlBatch[i] != null && !sqlBatch[i].equals( "" ))
- st.addBatch(sqlBatch[i] + ";" );
- }
- conn.setAutoCommit( false );
- st.executeBatch();
- conn.commit();
- conn.setAutoCommit(autoCommit);
- bVal = true ;
- }
- catch (SQLException ex) {
- try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); }
- ex.printStackTrace();
- } finally { clearAllsql(); }
- return bVal;
- }
- public boolean executeCall(String procName, Object[] params) {
- boolean bVal = false ;
- try
- {
- returnCs(procName, params).executeUpdate();
- bVal = true ;
- }
- catch (Exception ex) { ex.printStackTrace(); }
- finally { clearAllsql(); }
- return bVal;
- }
- public T find(String sql, Object[] params, String viewName, boolean executeCall) {
- T t = null ;
- try
- {
- if (executeCall) rs = returnCs(sql, params).executeQuery();
- else rs = returnPst(sql, params).executeQuery();
- t = loadResultSet(rs, viewName);
- }
- catch (Exception ex) { ex.printStackTrace(); }
- finally { clearAllsql(); }
- return t;
- }
- public List<T> findList(String sql, Object[] params, String viewName, boolean executeCall) {
- List<T> lt = null ;
- try
- {
- if (executeCall) rs = returnCs(sql, params).executeQuery();
- else rs = returnPst(sql, params).executeQuery();
- lt = loadList(rs, viewName);
- }
- catch (Exception ex) { ex.printStackTrace(); }
- finally { clearAllsql(); }
- return lt;
- }
- public ResultSet returnResultSet(String sql, Object[] params, boolean executeCall) {
- try
- {
- if (executeCall) rs = returnCs(sql, params).executeQuery();
- else rs = returnPst(sql, params).executeQuery();
- }
- catch (Exception ex) { ex.printStackTrace(); }
- return rs;
- }
- private T loadResultSet(ResultSet rs, String viewName) throws SQLException {
- T t = null ;
- if (rs != null ) while (rs.next()) t = loadDataBean(rs, viewName);
- return t;
- }
- private List<T> loadList(ResultSet rs, String viewName) throws SQLException {
- List<T> tlist = new ArrayList<T>();
- if (rs != null )
- while (rs.next())
- tlist.add(loadDataBean(rs, viewName));
- return tlist;
- }
- public String changeFont(ResultSet rs, String column) throws SQLException {
- return rs.getString(column) == null ? "" : rs.getString(column);
- }
- public int returnColumnCount(ResultSet rs) throws SQLException {
- return rs.getMetaData().getColumnCount();
- }
- //两个非常关键的模版方法,继承此类的操作类都要实现这2个方法,我到时候会给出操作类
- protected abstract T loadDataBean(ResultSet rs, String viewName) throws SQLException;
- protected abstract T loadDataBeanSelf(ResultSet rs) throws SQLException;
- public List<T> findListAsPager(String sql, String orderby, int currentPage, int pageSize) {
- List<T> lt = null ;
- try
- {
- String strVal = strPager(sql, orderby, currentPage, pageSize);
- rs = returnPst(strVal, null ).executeQuery();
- lt = loadList(rs, "" );
- }
- catch (SQLException ex) { ex.printStackTrace(); }
- finally { clearAllsql(); }
- return lt;
- }
- //因为用的sql server 2008所以只写了这个数据库的分页
- private String strPager(String sql, String orderby, int currentPage, int pageSize) {
- int start = 1 ;
- if (currentPage > 1 ) start = (currentPage -
相关推荐
Java持久层操作是Java开发中不可或缺的部分,主要是为了在应用程序和数据库之间建立桥梁,以便进行数据的存储和检索。在给定的标题“一套简化Java持久层操作的类库”中,我们可以理解这是一个专为简化Java开发人员...
首先,**Mybatis** 是一个轻量级的Java持久层框架,它允许开发者通过XML或注解来映射SQL语句,简化了数据库操作。Mybatis提供了动态SQL、事务管理以及缓存等功能,为开发者提供了极大的便利。 在自定义框架中,**...
JAVA PP持久层代码生成器可以轻松地针对Mybatis生成相关的代码,包括Mybatis的Mapper接口,这些接口定义了对数据库的操作;Mapper XML文件,其中包含了SQL查询语句;还有对应的实体类,它们用于封装数据库中的数据。...
Java持久层框架是用于实现对象与数据库之间的交互,以便在软件开发过程中简化数据库操作的重要工具。本文旨在对比四种常用的Java持久层框架:Hibernate、iBatis(现称MyBatis)、EJB(Entity Bean)以及JDO(Java ...
Java代码生成工具是一种高效开发辅助软件,主要用于自动化生成基于数据库表结构的基础代码,极大地提高了开发效率,降低了程序员的工作负担。这种工具通常包含了多种代码模板,能够根据用户的需求自定义生成jsp视...
持久层代码自动生成工具在IT行业中扮演着至关重要的角色,尤其对于开发人员而言,它可以显著提高工作效率,减少重复性劳动。此类工具的核心功能是根据数据库结构自动创建与之对应的Java实体类、DAO(数据访问对象)...
Java 敏捷持久层技术是现代软件开发中的一个重要组成部分,它简化了数据库操作,使得开发者可以更加专注于业务逻辑,而不是繁琐的数据访问代码。在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on ...
Java持久层框架是Java开发中用于数据库操作的关键技术,它为开发者提供了抽象化的数据库访问机制,使得开发者可以避免直接编写繁琐的SQL语句,提高开发效率。本资料包"基于Java的持久层框架,零配置,零SQL操作持久...
总结来说,"自动生成持久层代码工具"是一个高效、实用的Java开发辅助工具,它能自动生成实体类、DAO层及其对应的XML配置文件,大大提升了开发效率,降低了出错概率。对于大型项目或团队协作,这样的工具更是不可或缺...
传统的数据持久层开发方法,比如使用JDBC(Java Database Connectivity),虽然提供了直接操作数据库的手段,但需要开发者编写大量的SQL语句以及结果集处理代码。这种方式不仅编写效率低下,而且很难维护,难以适应...
而MyBatis则是一个轻量级的持久层框架,它允许开发者将SQL语句直接集成到Java代码中,提供了灵活的数据访问机制。 "Maven MyBatis插件自动生成持久层代码"是提高开发效率的一种方法,通过这个插件,我们可以自动化...
MyBatis则是一种轻量级的持久层框架,它的设计思想是将SQL语句与Java代码分离,以XML或注解形式配置SQL,从而实现了更灵活的SQL操作。MyBatis特别适合那些对SQL有特殊需求或者需要高度定制SQL的项目,它保持了SQL的...
在IT行业中,持久层框架是数据库操作的重要工具,它简化了数据访问的复杂性,使得开发者可以更加专注于业务逻辑的实现。Ibatis作为一款轻量级的Java持久层框架,深受许多开发者的喜爱。本篇文章将详细介绍Ibatis的...
Java中的JdbcTemplate是Spring框架提供的一种用于简化JDBC(Java Database Connectivity)操作的工具,它在数据持久层操作中扮演着重要角色。JdbcTemplate通过消除大量重复的JDBC样板代码,提高了代码的可读性和可...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。通过XML或注解方式配置和映射原生信息,将接口和Java的POJOs(Plain Old ...
**EJB 持久层设计** EJB(Enterprise JavaBeans)是Java EE平台的核心组成部分,主要用于构建可扩展、安全且事务处理能力强的企业级应用程序。持久层是任何应用程序中的关键部分,它负责管理数据的存储和检索,通常...
在持久层的理解上,Java开发者通常会使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,来简化数据库操作。这些框架能够将Java对象映射到数据库表,使得开发者无需编写大量的SQL语句,就能完成数据...
Java持久层框架JPA(Java Persistence API)是Java EE中用于管理关系数据库的对象关系映射(ORM)标准。它的出现是为了简化数据访问层的开发,让开发者能够更加专注于业务逻辑而不是底层的数据库操作。JPA通过提供...