DBUtils工具类

今天给大家整理的内容是:使用dbutils工具类和连接池技术(c3p0,druid),降低数据库访问过程中性能消耗问题;

首先我们说下什么是DBUtils工具类,DBUtils工具类是apache公司专门为java访问数据操作时提供的工具模块;

使用他,我们可以很快速的完成数据库的访问过程;

第一点:他的核心类是QueryRunner 这个类有两个构造方法,注意;

一个是有参数,主要是用在一般情况下,没有事物提交的情况;

二是没有参数的,他主要是用在有事物提交的情况;

其次我们谈谈连接池:市面上有很多连接池,原理都大同小异,我们知道,当一个项目有上百万的用户进来的时候,如果我们采用不断创建和销毁的方式进行数据库的断开与连接操作,将会

极大浪费数据库资源,并且很有可能回因此造成内存溢出而导致程序无法运行的情况;那么我们的数据库连接池是在程序启动时,就已经初始化了细一些连接,当我们用户需要访问数据库时

就会从连接池中拿一个连接,当不需要时,在还给数据库连接池即可,通过这种方式,可以节约很多数据库访问资源;

好了,说了那么多,估计大家都没耐心了,

下面,我们开始介绍阿里的Druid(德鲁伊)连接池,

1)导入资源包,百度上有,

2)创建数据库配置文件;

如下:

需要说明的是,Druid连接池,他的配置文件名称没有要求,但是配置文件的格式需要规范;即key的值必须是按规定书写的,不能自定义;

说完了Druid的配置了,那我们老看下他的主要类是什么,如何加载资源文件;

 

 

ok,大家对Druid有一个了解之后,我们现在看下C3P0连接池,C3P0连接池,使用的非常广泛,也很好用;

首先的配置文件:

1)需要说明的是,他的配置文件的名字是固定的,必须是此c3p0-config.xml;

2)配置文件必须放在src路径下,不是放在根目录中;

3)配置信息如下:

<?xml version="1.0" encoding="utf-8" ?>

<c3p0-config>
<named-config name="dbInfo">
<!-- 配置用户密码,连接,驱动等 -->
<property name="user">root</property>
<property name="password"></property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/table</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 数据库连接池,一次向数据库服务器要多少个连接 -->
<property name="acquireIncrement">10</property>
<!-- 初始化连接数 -->
<property name="initialPoolSize">5</property>
<!-- 最小连接数 -->
<property name="minPoolSize">5</property>
<!-- 最大连接数 -->
<property name="maxPoolSize">20</property>
<!-- 数据库连接池能维护的最多statement的数量 -->
<property name="maxStatements">20</property>
<!-- 每个数据库连接可以创建多少个statement -->
<property name="maxStatementPerConnection">20</property>

</named-config>
</c3p0-config>

需要解释一点:在c3p0连接池中可以放很多个数据库;他们都是根据name-config这个标签进行区分的;

<named-config name="dbInfo">后面我们在讲到核心类时再说;

工具类的书写:

public class DBUtil {
    //私有化
    private DBUtil() {}
    //保证只有一个连接池
    private static final DataSource ds=new ComboPooledDataSource();
    //创建一个连接;
    public static Connection getConection(){
        Connection conn=null;
        try {
            conn=ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    //对外提供一个连接池的方法;
    public static  DataSource getDataSource() {
        return ds;

    }
}

注意的是private static final DataSource ds=new ComboPooledDataSource();这里的CombopooledDataSource是核心类,没有添加参数,表示寻找默认的连接,或者连接池中第一连接;

接下来呢,我们,来使用DBUtils的工具类,真正实现数据库操作的便捷性;

具体代码如下:

public class PersonDaoImpl implements PersonDao{
    private QueryRunner runner=null;
    public PersonDaoImpl() {
        runner=new QueryRunner(DBUtils.getDataSource());
    }
    @Override
    public void add(Person p) throws SQLException {
        String sql="insert into Person (name,age,description)values(?,?,?)";
        runner.update(DBUtils.getConnection(), sql, p.getName(),p.getAge(),p.getDescription());
    }

    @Override
    public void update(Person p) throws SQLException {
        String sql="update Person set name=?,age=?,description=? where id=?";
        runner.update(DBUtils.getConnection(), sql, p.getName(),p.getAge(),p.getDescription(),p.getId());
    }

    @Override
    public void delete(int id) throws SQLException {
        String sql="delete from Person where id=?";
        runner.update(DBUtils.getConnection(), sql,id);        
    }
    
    @Override
    public Person findById(int id) throws SQLException {
        String sql="select name,age,description from Person where id=?";
        Person p=runner.query(DBUtils.getConnection(), sql, new BeanHandler<Person>(Person.class),id);
        return p;
    }

    @Override
    public List<Person> findAll() throws SQLException {
        String sql="select name,age,description from Person";
        List<Person>persons=runner.query(DBUtils.getConnection(), sql, new BeanListHandler<Person>(Person.class));
        return persons;
    }
    @Override
    public long personCount() throws SQLException{
        String sql="select count(id) from Person";
        return runner.query(DBUtils.getConnection(), sql, new ScalarHandler<Long>());
    }

}

有了工具类之后,我们的数据库操作的代码,及其简介,两句话搞定;

好了,先到这了,还有一点就是DBUtils工具类在做查询工作时,给我们封装了9大实现类,下一个专题再讲;

如有错误,还望指正,

posted @ 2018-04-25 09:12  微观漫步  阅读(432)  评论(0)    收藏  举报