实现自定义JdbcTemplate框架封装Update方法

实现MyJdbcTemplate框架中的Update方法

1.什么是JdbcTemplate

JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。JdbcTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。 Spring源码地址:源码地址

2.如何搭建JdbcTemplate环境

2.1 JdbcTemplate所需jar包

所需jar包

2.2 将jar导入工程lib目录下,并添加关联

部分jar关联后展示
选中右键找到Add as Library进行关联
进行jar包关联

2.3 获取连接

获取连接有多种方式,有最原始的jdbc方式,自己注册驱动,进行指定数据库,进行获取连接。封装成工具类JdbcUtil,但会因为频繁创建connection造成数据库资源浪费。故采用开源的数据库连接池,C3P0/Druid。相比下,阿里巴巴旗下的德鲁伊(Druid)性能更优一些。
注:Druid数据库连接池的介绍及如何配置,后面会有一篇专门的博客进行详解,此处仅提供一个DruidJdbcUtil连接工具类源码。

3.进行自定义框架

3.1 DruidJdbcUtil工具类
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DruidJdbcUtil {
    static DruidDataSource dataSource;
    static {
        Properties properties = new Properties();
        try{
            properties.load(new FileInputStream("druiddb.properties"));
            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    //获取数据源
    public static DataSource getDataSource(){
        return dataSource;
    }

    //获取连接
    public static Connection getConnection(){

        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }
    //释放资源
    public static void release(ResultSet rs, Statement st, Connection conn)
    {
        if(rs!=null)
        {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs=null;
        }
        if(st!=null)
        {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            st=null;
        }
        if(conn!=null)
        {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn=null;
        }
    }
}
3.2 编写MyJdbcTemplate类
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class MyJdbcTemplate {
    private DataSource mDataSource;

    public MyJdbcTemplate(DataSource dataSource) {
        this.mDataSource = dataSource;
    }

    public int update(String sql, Object... args) {
        int updateCount = 0;
        //程序执行可能会发生异常,故我们使用try-catch进行对异常的处理
        try {
            //获取连接
            Connection connection = mDataSource.getConnection();
            //预编译对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            //获取元数据,即数据库表的字段
            ParameterMetaData parameterMetaData = preparedStatement.getParameterMetaData();
            //通过ParameterMetaData中的getParameterCount()方法,可以获取sql语句中?的个数,即可以确定所需参数的个数
            int parameterCount = parameterMetaData.getParameterCount();
            //通过for循环去动态设置所需参数
            for (int i = 0; i < parameterCount; i++) {
            //setObject()方法一般只会在写框架底层中使用
                preparedStatement.setObject(i + 1, args[i]);
            }
            //通过preparedStatement去执行executeUpdate()方法返回受影响的行数
            updateCount = preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        //最后方法返回一个int类型数据,将受影响的行数返回
        return updateCount;
    }
}

通过下面的JdbcTemplate框架的实现案例,结合代码注解,进行程序理解。
分析:在JdbcTemplate框架中,如果要实现update方法,只需获取连接,使用update方法即可,提供示例如下

// JDBCTemplate删除数据
    public static void test03() throws Exception {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidJdbcUtil.getDataSource());
        String sql = "DELETE FROM product WHERE pid=?;";
        int i = jdbcTemplate.update(sql, 7);
        System.out.println("影响的行数: " + i);
    }

由图可知,我们要实现自定义的JdbcTemplate框架,只需实现有参的JdbcTemplate(DataSource dataSource)以及 update(sql,Object… args)两个方法即可,其中 dataSource是获取连接的数据源(会有专门的博客进行介绍,目前理解为获取连接的容器即可),Object… args为可变参数,类型为Object(即可接收任意类型的数据)

4. 对框架测试

框架测试使用数据库并未提供,所以可以自行准备测试数据库,及测试数据,并不会影响测试。

//测试代码如下:
public class Test {
    public static void main(String[] args) {
        MyJdbcTemplate jdbcTemplate = new MyJdbcTemplate(DruidJdbcUtil.getDataSource());
        String sql = "DELETE FROM product WHERE pid=?;";
        int i = jdbcTemplate.update(sql, 6);
        System.out.println("影响的行数: " + i);
    }
}

通过测试可知,我们通过自定义的框架,同样实现了功能。
以上就是对自定义JdbcTemplate框架实现update方法的简单实现。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值