JdbcTemplate这个模板类的巧妙

Posted 背时的哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JdbcTemplate这个模板类的巧妙相关的知识,希望对你有一定的参考价值。

1.前言

之前学习spring时,对其中的JdbcTemplate没有进行太多研究,对数据库的操作基本都是通过MyBatis完成的,最近有碰到了这个“熟悉的陌生人”,那么就彻底熟悉熟悉吧。

2.我的理解

1.完成数据库的连接

public class JdbcUtil {

    public static Connection getConn() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/lessontest";
            String user = "root";
            String password = "123";
            Connection conn = DriverManager.getConnection(url, user, password);
            return conn;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

2.书写JdbcTemplate类,完成对操作方法的封装(例子中只书写了部分的方法)

public class JdbcTemplate {

    public int update(String sql,Object...args){
        Connection conn = null ;
        PreparedStatement stmt=null ;
        try {
            conn = JdbcUtil.getConn();//通过工具类获取数据库连接
            stmt = conn.prepareStatement(sql);

            for (int i = 0; i < args.length; i++) {
                //由于所有类型都是Object的子类,因而这个方法可以对任意参数赋值
                stmt.setObject(i+1,args[i]);
            }
            int ret = stmt.executeUpdate();
            // 5查看服务器的返回结果
            return  ret;

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
    public <U> List<U> queryList(String sql, RowMapper<U> rowMapper){
        Connection conn = null;
        Statement stmt =null;
        ResultSet rs = null;
        try {
            conn = JdbcUtil.getConn();
            // 4输入SQL,执行SQL
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            // 5查看服务器的返回结果
            List<U> list=new ArrayList<U>();
            while (rs.next()) {
                // 定位到行
                U u= rowMapper.proccesRs(rs);//将查询结果进行封装
                list.add(u);
            }
            return list;

        } catch (SQLException e) {

            e.printStackTrace();
        }
        return null;
    }
}

在此模板类中,将具体的sql语句与要传入的参数抽取出来作为方法参数,在使用时可根据不同的情况进行调用。

3.看看源码

1.首先将其注册到ioc容器中

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://127.0.1:3306/book"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123"></property>
    </bean>
    
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

2.部分JdbcTemplate封装的方法

在这里插入图片描述
在这里插入图片描述
不难看出底层代码也是如此,将一切查询和更新所需的参数提取出来,通过调用方法传入参数,对所需参数进行赋值,以完成对数据库的操作。

3.当然了,源码自然有高深之处

就update()方法而言:
在这里插入图片描述
在此,spring添加了debug模式下的反馈信息以及数据库操作完成时的反馈信息。

以上是关于JdbcTemplate这个模板类的巧妙的主要内容,如果未能解决你的问题,请参考以下文章

Spring中支持JDBC的JdbcTemplate模板类的使用

spring jdbcTemplate源码剖析

Spring 模板技术JdbcTemplate

Spring 模板技术JdbcTemplate

Spring对JDBC的模板支持——JdbcTemplate

JdbcTemplate模板使用