Druid连接池与DaoUtils的第三方jar

  • Post author:
  • Post category:其他


1.Druid连接池

连接池:

概述:在池中预先放入多个连接对象,当用户使用连接对象,从池子中取出;用完了回收到池子中

好处:减少创建和销毁连接对象的数目,提高了性能

原理:(

复用机制



在集合中放入10个连接对象

如果有用户使用连接对象,则从集合中获取,并删除集合中的对象

如果执行完毕,调用close,回收资源(将连接对象,重新添加到集合,给另一个用户复用)


Druid连接池: 是阿里巴巴提供的,公认的性能最好的一款连接池产品;其它-c3p0,dbcp

使用步骤:

  • 导入Druid连接池的jar包
  • 编写Druid的配置文件db.properties;(注意:key固定,值可变更)
  • 加载配置文件,获取数据源,从而得到连接对象
  • close已经变为了回收(连接池里面有重写)
---------------db.properties配置---------------
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb1
username=root
password=123
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 60000毫秒/1000等于60秒 -->
maxWait=5000
------------DBUtils连接池工具类-------------
public class DBUtils {
    private static DataSource dataSource;
    private static Properties p = new Properties();
    //静态代码块:只加载一次
    static{
        //反射对象调用getResourceAsStream
        //从src目录下获取到db.properties的资源
        try {
            InputStream is = DBUtils.class.getResourceAsStream("/db.properties");
            p.load(is);  //加载连接池配置
            //根据传入的配置,获取数据源,数据源中包含了连接池的操作
            dataSource = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

    public static Connection getConnection(){
        Connection conn = null;
        try { //从连接池中获取连接对象
           conn = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

2.DaoUtils的第三方jar

DaoUtils第三方jar包引入

内部实现:和我们自己写的DaoUtils是类似的,提供了,我们就不用自己写了

第三方的jar做了除级别crud之外的其他sql语句的封装;例如:聚合,连接查询

步骤:

  • 导入dbutils的jar包(DaoUtils的实现)
  • 通过QueryRunner调用update和query方法实现增删改查
public class PersonDaoImpl {
    //使用QueryRunner实现增删改查功能
    private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());

    public int insert(Person p) {
        String sql = "insert into person(name,age,bornDate,email,address) values(?,?,?,?,?)";
        try {
            return queryRunner.update(sql,p.getName(),p.getAge(),p.getBornDate(),p.getEmail(),p.getAddress());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public int update(Person p) {
        String sql = "update person set name=?,age=? where id=?";
        try {
            return queryRunner.update(sql,p.getName(),p.getAge(),p.getId());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public int delete(int id) {
       String sql = "delete from person where id=?";
        try {
            return queryRunner.update(sql,id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public Person selectById(int id) {
        String sql = "select * from person where id=?";
        try {
           return queryRunner.query(sql, new BeanHandler<>(Person.class), id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public List<Person> selectAll() {
        String sql = "select * from person";
        try {
            return queryRunner.query(sql,new BeanListHandler<>(Person.class));
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }



版权声明:本文为Yeung_ZY原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。