JDBC学习总结(下)

在上一篇文章中说了说JDBC的基本使用方法,用起来的感觉就是:费劲儿!!!
懒惰是人类进步的阶梯,既然我是操作数据库,那么我就只想写Sql语句,其他的我一概不想写!!!
为此,数据库连接池(DataSource)和JDBCTemplate就诞生了

数据库连接池(DataSource)

首先来分析下之前那种用法的弊端
每当我想连接数据库的时候,我就去找系统要一个Connection资源,用完再还给系统,等我下一次要用的时候我再去找系统拿,如此循环往复,效率自然是不用说了,系统都怕你了,那么该怎么办呢?我们先找系统要他十几二十个Connection资源,管它用不用,我先申请好,剩下的就没系统什么事儿了,只看我怎么调遣这些资源了。系统一下就自由飞翔了,这个烦人的家伙终于不用再来找麻烦了。我只要拿到Connection了,之后的操作是不是就和之前完全一样了啊

package com.it.leon;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

public class DataSourcePractice {

    static DataSource ds = null;

    static {
        Properties pro = new Properties();
        try {
            pro.load(DataSourcePractice.class.getResourceAsStream("/druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void test01() {
        try {
            Connection con = ds.getConnection();
            String sql = "insert into test values(?,?)";
            PreparedStatement pstmt = con.prepareStatement(sql);
            pstmt.setInt(1,10);
            pstmt.setString(2,"萧远山");
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

这一次我们不再通过DriverMananger来获取Connection了,而是通过DataSource(数据库连接池)来获取,DataSource就是个装Connection的容器,里面已经放好了已连上指定数据库的Connection对象了,当我们需要使用时,就用来获取即可

Connection con = ds.getConnection();  //通过DataSource获取Connection

而我们的DataSource又怎么来呢?没有DataSource我们又怎么获得Connection呢?答案就在静态代码块这里

static {
    Properties pro = new Properties();  //配置文件
    try {
        pro.load(DataSourcePractice.class.getResourceAsStream("/druid.properties"));
        ds = DruidDataSourceFactory.createDataSource(pro);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

现有的数据库连接池,就用阿里巴巴的Druid,没有为什么,它就是当前最强的,用就是了。
配置文件里面就是指定连哪个数据库之类的

driverClassName=com.mysql.jdbc.Driver  //注册驱动
url=jdbc:mysql://127.0.0.1:3306/db1  //连接哪个IP下的哪个数据库
username=root  //用户名
password=root  //密码
initialSize=5  //初始时的Connection个数
maxActive=10  //最大的Connection个数
maxWait=3000  //最大响应时间

至此,我们的DataSource就介绍完毕了,但是还是用起来不爽,为什么呢?因为我只想写sql语句,什么申请资源啊,释放资源啊,我一律不想做,我连statement都不想创建,我就只想写sql,这是我的初衷。

好,有需求就有实现,JDBCTemplate来了

package com.it.leon;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

public class JDBCTemplatePractice {
    private static JdbcTemplate tem = null;

    static {
        Properties pro = new Properties();
        try {
            pro.load(JDBCTemplatePractice.class.getResourceAsStream("/druid.properties"));
            DataSource ds = DruidDataSourceFactory.createDataSource(pro);
            tem = new JdbcTemplate(ds);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test01() {
        String sql = "select * from test";
        List<TestObj> list = tem.query(sql, new BeanPropertyRowMapper<TestObj>(TestObj.class));
        for (TestObj testObj : list) {
            System.out.println(testObj);
        }
    }
}

JDBCTemplate的核心思想就是,我只要获取了JDBCTemplate对象,就可以对数据库进行CRUD了,用完之后连释放都不用做了,美哉美哉!

static {
    Properties pro = new Properties();
    try {
        pro.load(JDBCTemplatePractice.class.getResourceAsStream("/druid.properties"));  //装载配置文件
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);  //获取DataSource对象
        tem = new JdbcTemplate(ds);  //获取JDCBTemplate对象
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

只要我们有了DataSource对象,就可以有JDBCTemplate对象了

有了对象之后直接执行sql语句即可

@Test
public void test01() {
    String sql = "select * from test";
    List<TestObj> list = tem.query(sql, new BeanPropertyRowMapper<TestObj>(TestObj.class));  //将JDBCTemplate对象查询到的结果封装到TestObj这个对象里面
    for (TestObj testObj : list) {
        System.out.println(testObj);  //遍历对象
    }
}

上述是查询用法,使用时必须要保证TestObj类重写了get()和set()函数

@Test
public void test01() {
    String sql = "insert into test values(?,?)";  //preparedStatement的用法
    tem.update(sql,30,"丁春秋");  //按照问号的顺序依次赋值即可
}

好了,现在我只要有了JDBCTemplate对象,就可以对数据库进行CRUD了,省去了繁琐的statement和关闭资源,好爽啊,哈哈哈哈哈哈!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值