我是靠谱客的博主 健壮石头,最近开发中收集的这篇文章主要介绍Java数据库连接池学习笔记:C3P0、Druid;Spring JDBC,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据库连接池

享元模式

  • connection是Java和数据库两个平行系统的桥梁
  • 桥梁构建不易,成本很高,单次使用成本昂贵
  • 运用共享技术来实现数据库连接池(享元模式)
    • 降低系统中数据库连接connection对象的数量
    • 降低数据库服务器的连接响应速度
    • 提高Connection获取的响应速度

常用的数据库连接池实现技术

  • C3P0
  • Druid(阿里)

注意:连接池对象仍然使用完连接后仍然要释放资源

eg:

C3P0两种使用方式

  1. 硬编码方式(不推荐)
  2. 配置文件
    • 名称:c3p0.properties或者c3p0-config.xml
    • 路径:直接将文件放在src目录下

C3P0步骤:

  1. 导入jar包(两个):c3p0-0.9.5.2.jar,mchange-commons-java-0.2.12.jar,不要忘记导入mysql驱动jar包
  2. 定义配置文件
    • c3p0-config.xml
    • 路径:直接将文件放在src目录下
  3. 创建核心对象:数据库连接池对象 DataSource ds=new ComboPooledDataSource();
  4. 获取连接

Druid步骤:

  1. 导入jar包(一个):druid-1.2.3.jar
  2. 定义配置文件
    • druid.properties
    • 可以叫任意名称,可以放在任意路径
  3. 加载配置文件
  4. 获取数据库连接池对象 通过工厂类来获取
  5. 获取连接
//从c3p0获取
//conn = C3p0Factory1.getConnection();
//conn = C3p0Factory2.getConnection();

//从Druid获取
//conn = DruidFactory1.getConnection();
conn = DruidFactory2.getConnection();

C3p0Factory1

public class C3p0Factory1 {	
	private static ComboPooledDataSource dataSource = null;

	public static void init() throws Exception {
		
		dataSource = new ComboPooledDataSource();
		dataSource.setDriverClass( "com.mysql.jdbc.Driver" );            
		dataSource.setJdbcUrl( "jdbc:mysql://localhost:3306/test" );
		dataSource.setUser("root");                                  
		dataSource.setPassword("123456");                                  
			
		// the settings below are optional -- c3p0 can work with defaults
		dataSource.setMinPoolSize(5);	//设置最小值
		dataSource.setAcquireIncrement(5);	//设置增量
		dataSource.setMaxPoolSize(20);	//设置最大值
			
		// The DataSource dataSource is now a fully configured and usable pooled DataSource

	}
	
	public static Connection getConnection() throws Exception {
		if(null == dataSource)
		{
			init();
		}
        return dataSource.getConnection();
    }
}

C3p0Factory2

DataSource ds=new ComboPooledDataSource();
//DataSource ds=new ComboPooledDataSource("otherc3p0");//加载其他连接配置
//dataSource 自动加载c3p0-config.xml文件	
Connection connection=ds.getConnection();
System.out.println("connection = " + connection);

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>  <!-- 默认配置 -->
        <!--连接参数-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test?useSSL=false&amp;serverTimezone=GMT%2B8</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <!--连接池参数-->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">20</property>
        <property name="checkoutTimeout">3000</property>
    </default-config>
    
        <named-config name="otherc3p0">  <!-- 其他配置 -->
        <!--连接参数-->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/company?useSSL=false&amp;serverTimezone=GMT%2B8</property>
        <property name="user">root</property>
        <property name="password">root</property>
        <!--连接池参数-->
        <property name="initialPoolSize">3</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">1000</property>
    </named-config>
</c3p0-config>

DruidFactory1

public class DruidFactory1 {
	private static DruidDataSource dataSource = null;

	public static void init() throws Exception {
		
		dataSource = new DruidDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test"); 
		dataSource.setInitialSize(5);
		dataSource.setMinIdle(1);	//设置idle时间
		dataSource.setMaxActive(10); 	//设置最大连接数
		// 启用监控统计功能 dataSource.setFilters("stat");// 
	}
	
	public static Connection getConnection() throws Exception {
		if(null == dataSource)
		{
			init();
		}
        return dataSource.getConnection();
    }
}

DruidFactory2

public class DruidDemo1 {

    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        DataSource ds=DruidDataSourceFactory.createDataSource(pro);
        Connection connection = ds.getConnection();
        System.out.println("connection = " + connection);
    }
}

druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=GMT%2B8
username=root
password=root
#连接池参数
initialSize=5
maxActive=20
maxWait=3000

DruidUtil

public class druidUtil {

    private druidUtil(){}

    private static DataSource ds;
    private static String url=null;
    private static String username=null;
    private static String password=null;

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

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(Statement statement,Connection conn){
        close(null,statement,conn);
    }

    public static void close(ResultSet set,Statement statement, Connection conn){
        if (set != null) {
            try {
                set.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

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

Spring JDBC:JDBCTemplate

Spring JDBC:Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发

步骤:

  1. 导入jar包

  2. 创建JDBCTemplate对象。依赖于数据源DataSource

    • JdbcTemplate template = new JdbcTemplate(ds);
  3. 调用JdbcTemplate的方法来完成CRUD的操作

    1. update():执行DML语句。增删改语句

    2. queryForMap():查询结果将结果集封装为map集合 (只能查询一条数据)

    3. queryForList():查询结果将结果集封装为list集合

    4. query():查询结果将结果集封装为JavaBean对象

      • 一般我们使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装

      • List<Student> list = template.query(sql, new BeanPropertyRowMapper<Student>(Student.class));
        
    5. queryForObject:查询结果将结果集封装为对象

      • 一般用于聚合函数的查询

eg:

JdbcTemplate template = new JdbcTemplate(druidUtil.getDataSource());	//	参数为database

//1、DML语句
String sql = "insert student (id,name,age,sex) values (?,?,?,?)";
int update = template.update(sql, "009", "tim", 96, "female");
        
//2、DQL语句
String sql = "select * from student where id=?";
Map<String, Object> map = template.queryForMap(sql,001);	//map只能封装一条数据,否则报错

String sql = "select * from student";
List<Map<String, Object>> mapList = template.queryForList(sql);
List<Student> list = template.query(sql, new BeanPropertyRowMapper<Student>(Student.class));

String sql = "select count(id) from student";
Long aLong = template.queryForObject(sql, Long.class);

最后

以上就是健壮石头为你收集整理的Java数据库连接池学习笔记:C3P0、Druid;Spring JDBC的全部内容,希望文章能够帮你解决Java数据库连接池学习笔记:C3P0、Druid;Spring JDBC所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部