当前位置: 首页>编程语言>正文

druid数据库连接池 maven 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();
    }
}



https://www.xamrdz.com/lan/57d1934606.html

相关文章: