Druid-数据库连接池使用

Druid简介

Druid为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目。Druid是Java语言中最好的数据库连接池

Druid使用步骤

  1. 导入jar包 druid-1.0.9.jar和 mysql-connector-java-5.1.37-bin.jar
  2. 定义配置文件:
    2.1 是properties形式的
    2.2 可以叫任意名称,可以放在任意目录下
  3. 加载配置文件。Properties
  4. 获取数据库连接池对象:通过工厂来来获取
    4.1 DruidDataSourceFactory
  5. 获取连接:getConnection
  6. 获取执行sql语句的对象 Statement

代码示例
druid.properties配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mysql
username=root
password=root
initialSize=5
maxActive=10
maxWait=300
package com.company;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.mysql.jdbc.util.PropertiesDocGenerator;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
import java.util.logging.ConsoleHandler;

public class Main {

    public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties propertiesObj=new Properties();
        InputStream inputStreamObj=Main.class.getClassLoader().getResourceAsStream("druid.properties");
        propertiesObj.load(inputStreamObj);//从输入字节流中读取属性列表(键和元素对
        //获取连接池对象
        DataSource dataSourceObj=DruidDataSourceFactory.createDataSource(propertiesObj);
        //获取连接
        Connection connectionObj=dataSourceObj.getConnection();
        //获取执行sql语句的对象 Statement
        PreparedStatement preparedStatementObj=connectionObj.prepareStatement("select * from t_class where class_id=? and class_name=?");
        preparedStatementObj.setString(1,"1");
        preparedStatementObj.setString(2,"高一");
        ResultSet resObj=preparedStatementObj.executeQuery();
        //5 处理结果
        while (resObj.next()){
            String strId=resObj.getString("class_id");
            String strName=resObj.getString("class_name");
            System.out.println(strId + "---" + strName);
        }
        preparedStatementObj.close();
        connectionObj.close();

    }
}

Spring JDBC

Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
Spring JDBC使用步骤

1. 导入jar包
2. 创建JdbcTemplate对象。依赖于数据源DataSource
			* JdbcTemplate template = new JdbcTemplate(ds);
3. 调用JdbcTemplate的方法来完成CRUD的操作
			* update():执行DML语句。增、删、改语句
			* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
				* 注意:这个方法查询的结果集长度只能是1,否则会报错
			* queryForList():查询结果将结果集封装为list集合
				* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
			* query():查询结果,将结果封装为JavaBean对象
				* query的参数:RowMapper
					* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
					* new BeanPropertyRowMapper<类型>(类型.class)
					*注意:如果返回值为null有两种情况
						  1类中没有setter方法
						  2类中的字段与数据库中表的字段没有对应
			* queryForObject:查询结果,将结果封装为对象
				* 一般用于聚合函数的查询

代码示例
druid.properties配置文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mysql
username=root
password=root
initialSize=5
maxActive=10
maxWait=300

School .class

package com.company;

public class School {
    private String class_id;
    private String class_name;

    @Override
    public String toString() {
        return "School{" +
                "class_id='" + class_id + '\'' +
                ", class_name='" + class_name + '\'' +
                '}';
    }

    public void setClass_id(String class_id) {
        this.class_id = class_id;
    }

    public void setClass_name(String class_name) {
        this.class_name = class_name;
    }
}

JDBCUtils .java

package cn.itcast.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

/**
 * JDBC工具类 使用Durid连接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

JdbcTemplateDemo .class

package com.company;

import com.company.JDBCUtils 
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

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

public class JdbcTemplateDemo {
   
    //1. 获取JDBCTemplate对象
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    /**
     * 添加一条记录
     */
    public void testUpdate(){
        String sql = "insert into t_class(class_id,class_name) values(?,?)";
        int count = template.update(sql, 3, "高三");
        System.out.println(count);
    }
    /**
     *查询id为2的记录,将其封装为Map集合
     * 注意:这个方法查询的结果集长度只能是1,否则报错
     */
    public void testQueryForMap(){
        String sql = "select * from t_class where class_id = ?";
        Map<String, Object> mapObj=template.queryForMap(sql,1);
        System.out.println(mapObj);
    }

    /**
     * 查询所有记录,将其封装为List
     */
    public void testQueryForList(){
        String sql = "select * from t_class";
        List<Map<String, Object>> listObj=template.queryForList(sql);
        for (Map<String, Object> mapObj:listObj){
            System.out.println(mapObj);
        }

    }
    /**
     * 查询所有记录,将其封装为school对象的List集合
     */
    public void testQuery(){
        String sql = "select * from t_class";
        List<School> listObj=template.query(sql, new RowMapper<School>(){
            public School mapRow(ResultSet rs, int i) throws SQLException {
                School schoolObj = new School();
                String class_id = rs.getString("class_id");
                String class_name = rs.getString("class_name");
                schoolObj.setClass_id(class_id);
                schoolObj.setClass_name(class_name);
                return schoolObj;
            }
        });

        for (School schoolObj:listObj){
            System.out.println(schoolObj);
        }
    }
    /**
     * 查询所有记录,将其封装为school对象的List集合
     */
    public void testQuery2(){
        String sql = "select * from t_class";
        /*
        * *注意:如果返回值为null有两种情况
		        1类中没有setter方法
		        2类中的字段与数据库中表的字段没有对应
        */
        List<School> listObj=template.query(sql, new BeanPropertyRowMapper<School>(School.class));
        for (School schoolObj:listObj){
            System.out.println(schoolObj);
        }
    }
    /**
     *  查询总记录数
     */
    public void testQueryForObject(){
        String sql = "select count(class_id) from t_class";
        Long total=template.queryForObject(sql, Long.class);
        System.out.println(total);
    }
}

Main .class

package com.company;


public class Main {

    public static void main(String[] args) throws Exception {
        JdbcTemplateDemo jdbcTemplateDemoObj=new JdbcTemplateDemo();
        //jdbcTemplateDemoObj.testQueryForMap();
        //jdbcTemplateDemoObj.testQueryForList();
        //jdbcTemplateDemoObj.testQuery();
        //jdbcTemplateDemoObj.testQuery2();
        jdbcTemplateDemoObj.testQueryForObject();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
druid数据库连接池是一个开源的Java数据库连接池。它通过提供高效的、可靠的连接管理和监控功能,帮助开发人员更好地管理数据库连接并提高系统性能。使用druid连接池,你可以实现数据库连接的复用、连接的自动管理、连接的监控和统计等功能。 在使用druid连接池时,你需要按照以下步骤进行配置和使用: 1. 添加druid依赖:在项目的pom.xml文件中添加druid的依赖。 2. 配置数据源:在项目的配置文件中配置druid数据源的相关信息,包括数据库的URL、用户名、密码等。 3. 初始化数据源:在项目启动时,通过编程方式初始化druid数据源,并将其注册到JNDI或者使用Spring等框架进行管理。 4. 获取连接:通过druid数据源的getConnection()方法获取数据库连接。 5. 使用连接:使用获取到的数据库连接执行SQL语句,进行数据库操作。 6. 关闭连接:在使用完数据库连接后,务必通过调用connection.close()方法将连接释放回连接池。 除了基本的数据库连接管理功能,druid还提供了一些高级特性,例如: - 连接池的监控功能:可以通过配置druid的监控管理页面,实时查看连接池的状态、活动连接数、慢SQL等信息。 - SQL防火墙功能:可以对SQL进行实时监控和审计,以防止SQL注入等安全问题。 - 配置参数的动态修改:可以通过监控管理页面或者JMX接口动态修改连接池的配置参数,而无需重启应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值