`

模板模式----JDBC模板

阅读更多

Template Method模式的应用场景是:
1. 你想将相同的算法放在一个类中,将算法变化的部分放在子类中实现。
2. 子类公共的算法应该放在一个公共的类中,避免代码重复。

 

Template Method模式可以限制所留下的虚方法只对其继承类可见,外部使用者不一定能够直接使用这些虚方法。

 

下面是示例代码:

 

public abstract class BaseDao {
   
    /**
     * 增,删,改方法
     * @param sql
     * @param args sql参数
     * @return
     * @throws DaoException
     */ 
    public int update(String sql, Object[] args) throws DaoException { 
        Connection conn = null; 
        PreparedStatement ps = null; 
        ResultSet rs = null; 
        try { 
            conn = JdbcUtils.getConnection(); 
            ps = conn.prepareStatement(sql); 
            for (int i = 0; i < args.length; i++) 
                ps.setObject(i + 1, args[i]); 
            return ps.executeUpdate(); 
        } catch (SQLException e) { 
            throw new DaoException(e.getMessage(), e); 
        } finally { 
            JdbcUtils.free(rs, ps, conn); 
        } 
    } 
 
    /**
     * 返回一个对象
     * @param <T>
     * @param sql
     * @param args
     * @return
     * @throws DaoException
     */ 
    public <T> T find(String sql, Object[] args) throws DaoException { 
        Connection conn = null; 
        PreparedStatement ps = null; 
        ResultSet rs = null; 
        try { 
            conn = JdbcUtils.getConnection(); 
            ps = conn.prepareStatement(sql); 
            for (int i = 0; i < args.length; i++) 
                ps.setObject(i + 1, args[i]); 
            rs = ps.executeQuery(); 
            T t = null; 
            if (rs.next()) { 
                t = rowMapper(rs); 
            } 
            return t; 
        } catch (SQLException e) { 
            throw new DaoException(e.getMessage(), e); 
        } finally { 
            JdbcUtils.free(rs, ps, conn); 
        } 
    } 
 
    /**
     * 返回一个List
     * @param <T>
     * @param sql
     * @param args
     * @return
     * @throws DaoException
     */ 
    public <T> List<T> list(String sql, Object[] args) throws DaoException { 
        Connection conn = null; 
        PreparedStatement ps = null; 
        ResultSet rs = null; 
        try { 
            conn = JdbcUtils.getConnection(); 
            ps = conn.prepareStatement(sql); 
            for (int i = 0; i < args.length; i++) 
                ps.setObject(i + 1, args[i]); 
            rs = ps.executeQuery(); 
            T t = null; 
            List<T> list = new ArrayList<T>(); 
            while (rs.next()) { 
                t = rowMapper(rs); 
                list.add(t); 
            } 
            return list; 
        } catch (SQLException e) { 
            throw new DaoException(e.getMessage(), e); 
        } finally { 
            JdbcUtils.free(rs, ps, conn); 
        } 
    } 
 
    /**
     * rowMapper
     * @param rs
     * @return
     * @throws DaoException
     */
    abstract protected <T> T rowMapper(ResultSet rs) throws DaoException;
}

 

实现类的代码:

 

public class UserDaoImpl extends BaseDao implements UserDao {

    public User findUser(int id) throws DaoException {
        String sql = "select *from t_user where id=?";
        Object[] args = new Object[] { id };
        User user = super.find(sql, args);
        return user;
    }

    public List<User> listUser(String username) throws DaoException {
        String sql = "select *from t_user where username=?";
        Object[] args = new Object[] { username };
        List<User> list = super.list(sql, args);
        for (User u : list) {
            System.out.println(u.getUserId());
        }
        return list;
    }

    @SuppressWarnings("unchecked")
    protected User rowMapper(ResultSet rs) throws DaoException {
        User user = new User();
        try {
            user.setId(rs.getInt("id"));
            user.setUsername(rs.getString("username"));
            user.setBrithday(rs.getDate("brithday"));
        } catch (SQLException e) {
            throw new DaoException(e.getMessage(), e);
        }
        return user;
    }

分享到:
评论

相关推荐

    spring-jdbc jar包.rar

    1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法模式将常见的JDBC操作进行了封装,如执行SQL查询、更新、调用存储过程等。开发者只需要关注SQL语句和参数,而无需处理连接创建、关闭、异常处理等繁琐...

    ssm框架整合模板-------简单模板

    这个"ssm框架整合模板-------简单模板"可能是为了帮助开发者快速搭建一个基于SSM的基础项目结构,以便于后续的开发工作。下面将详细解释SSM框架整合的核心概念、配置过程以及它们在实际开发中的作用。 **1. Spring...

    mysql-jdbc-Spring源代码分析

    `JdbcTemplate`是Spring框架提供的一个用于简化JDBC编程的工具类,它封装了许多常用的数据库操作,如查询、更新等,并且通过模板模式设计,提供了灵活的扩展机制。这使得开发者能够更专注于业务逻辑而非繁琐的JDBC...

    play-java-jdbc_2.10-2.4.0-RC3.zip

    综上所述,这个压缩包提供了Play框架的Java JDBC模块和Twirl模板引擎的相关源代码,对于想要了解或参与这两个组件开发的Java Web开发者来说,这是一个宝贵的资源。通过研究和实践,开发者不仅可以提升对Play框架的...

    spring对jdbc的支持jar包

    1. **JdbcTemplate**:这是Spring JDBC的基础组件,它通过模板方法模式封装了常见的JDBC操作,如执行SQL查询、更新、存储过程等。使用JdbcTemplate,开发者无需手动管理数据库连接、预编译语句、结果集转换等细节,...

    spring-jdbc源码

    通过使用模板方法设计模式,Spring-JdbcTemplate能够在不牺牲灵活性的同时,保证了代码的简洁性和可维护性。 接着,让我们来看看DataSourceTransactionManager,它是Spring提供的事务管理器,主要用于管理基于...

    模板模式课件及代码-极客学院

    4. **应用场景**:模板模式广泛应用于框架和库的设计中,如MVC架构中的Controller,或者Java中的JDBC API。它适用于那些有固定算法流程,但某些步骤可能需要定制化的场景。 5. **优点**: - 提供了一种代码复用...

    spring-jdbc-1.0.723.zip_daooperations.class_spring jdbc

    总的来说,"spring-jdbc-1.0.723.zip"压缩包中的内容涉及到Spring框架如何通过DAO操作类和JDBC模板简化数据库访问,以及如何实现后台分页查询。这些知识点对于理解Spring如何处理数据库交互以及提升应用的开发效率至...

    jdbc连接模板-代码

    首先,JDBC连接模板是一种设计模式,用于简化数据库操作,避免重复的数据库连接和关闭过程,提高代码的可读性和可维护性。它通常包括以下几个核心组件: 1. 数据源(DataSource):这是JDBC连接的工厂,提供数据库...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    这是一个非常实用的工具类,它通过模板方法模式封装了JDBC的基本操作,如执行SQL查询、更新、存储过程等。`JdbcTemplate`提供了异常转换、参数绑定、结果集处理等功能,使得代码更加简洁且易于维护。 首先,让我们...

    javaJDBC项目模板

    "JDBCPro"是基础的JDBC模板,它主要展示了如何使用JDBC进行基本的数据操作。在这一阶段,你会看到以下关键知识点: 1. 数据库连接:通过`Class.forName()`加载数据库驱动,然后使用`DriverManager.getConnection()`...

    mysql-人大金仓-jdbc

    在实际开发中,为了提高代码的可读性和可维护性,常常会使用DAO(数据访问对象)模式,将数据库操作封装在单独的类或方法中。此外,ORM(对象关系映射)框架,如Hibernate和MyBatis,可以进一步简化JDBC的使用,让...

    spring-jdbc-4.2.4.RELEASE.jar,spring-tx-4.2.4.RELEASE.jar,jdbcTemplate使用的jar包

    `JdbcTemplate`是Spring提供的一种模板方法模式实现,它封装了JDBC的常用操作,如执行SQL查询、更新等,提供了异常转换和数据源管理等功能。通过使用`JdbcTemplate`,开发者可以编写出更简洁、更健壮的数据库访问...

    设计模式之模板方法模式

    例如,Java的JDBC API就使用了模板方法模式,提供了数据库操作的基本流程,而用户只需关注具体的SQL执行细节。 ### 实现示例 ```java abstract class Coffee { // 模板方法 public final void makeCoffee() { ...

    java spring jdbc 常用jar包集合.zip

    Spring JDBC通过Template和DataSourceUtils类提供了一种模板方法模式,使得执行SQL查询、更新和存储过程变得更加简单和可控。同时,Spring的事务管理支持可以确保在多条数据库操作之间保持一致性,避免脏读和不可...

    设计模式之模板模式

    - 在Java中,很多框架和库都应用了模板模式,如Spring的AOP切面处理、JDBC模板等。 5. **优缺点**: - **优点**:模板模式提供了代码复用,降低了系统的复杂度,同时保持了系统的扩展性。通过子类继承抽象类并...

    jdbc+tomcat6.0 bbs

    6. **库文件**:依赖的JAR文件,可能包括JDBC驱动,以及其他用于处理HTTP请求、数据验证、模板引擎等的第三方库。 通过学习和实践这个"jdbc+tomcat6.0 bbs"项目,学生可以深入理解Java Web开发、JDBC数据库操作、...

    01-02-05-模板模式及适配器模式1

    模板模式是一种行为设计模式,它定义了一个操作中的算法框架,并允许子类在不改变算法结构的情况下,重定义算法中的特定步骤。这种模式适用于那些有一系列共同步骤,但部分步骤需要根据具体子类来变化的场景。例如,...

    Spring Jdbc的jar包

    `JdbcTemplate`是Spring JDBC的核心,它提供了一种模板方法模式来执行常见的JDBC操作,如查询、更新、插入和删除。通过使用`JdbcTemplate`,开发者可以避免编写大量重复的JDBC代码,如打开和关闭连接,以及处理异常...

    jdbc-formula:jdbc-公式

    `Scheme`标签可能是指在数据库中使用的一种特定的数据库模式或结构,或者是指一种高级的编程语言,但在这个上下文中,更可能是指数据库的架构或设计。 总结来说,`jdbc-formula`项目可能是为了提供一个统一的方法来...

Global site tag (gtag.js) - Google Analytics