JDBC连接池

## 数据库链接池

1、概念:其实就是一个容器(集合),存放数据库链接的容器

当系统初始化好后,容器被创建,容器中会申请一些链接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器

2、好处:1.节约资源 2.用户访问高效

3、实现:

        1.标准接口:DataSource javax.sql包下的

                1.方法:

                        *获取连接:getConnection()

                        *归还链接:Connection.close()。如果链接对象Connection是从链接池中获取的,那么调用Connection.close()方法,则不会在关闭链接了,而是归还链接

        2.一般我们不去实现他,有数据库厂商来实现

                1.C3P0:数据库链接池技术

                2.Druid:数据库连接池实现技术,有阿里巴巴提供

4.C3P0:数据库链接池技术

        *步骤:

        1.导入jar包(两个)和数据库驱动jar包

        2.定义配置文件:

                *名称:c3p0.properties  或者 c3p0-config.xml

                *路径:直接将文件放在src目录下即可 

        3.创建核心对象  数据库链接池对象  ComboPooledDataSource

        4.获取链接: getConnection

public static void main(String[] args) throws SQLException {
        //1.创建数据库链接池对象
        DataSource ds =new ComboPooledDataSource();
        //2.获取链接对象
        Connection conn =  ds.getConnection();

        //3.打印
        System.out.println(conn);
    }

5.Druid:数据库连接池实现技术,有阿里巴巴提供的

        *步骤;

        1.导入jar包

        2.定义配置文件:

                *是properties形式的

                *可以叫任意名称,可以放在任意目录下

        3.加载配置文件。properties

        4.获取数据库链接池对象:通过工厂来获取 DruidDataSourceFactory

        5.获取链接:getConnection 

  public static void main(String[] args) throws Exception {
        //1.导入jar包
        //2.定义配置文件
        //3.加载配置文件
        Properties pro =new Properties();
        InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //4.获取链接池对象
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);

        //5.获取链接
        Connection coon =  ds.getConnection();
        System.out.println(coon);
    }

## Spring JDBC

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

        *步骤:

                1.导入jar包

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

                        *JdbcTemplate template = new JdbcTemlate(ds);

                3.调用jdbcTemplate的方法来完成CRUD的操作

                        *update() :执行DML语句。增、删、改语句

                        *queryForMap():查询结果将结果集封装到map集合

                                *注意:这个方法查询的结果集长度只能是1

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

                                *注意:将每一条记录封装为一个Map集合,在将Map集合装在到List集合中

                        *query():查询结果,将结果封装为JavaBean对象

                                *query的参数:RowMapper

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

                                        *new BeanPropertyRowMapper<类型>(类型。class)

                        *queryForObject :查询结果,将结果封装为对象

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

//1。获取JDBCTemplate对象
    JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDs());

    @Test
    public void test1(){
        //定义sql语句
        String sql = "update student set sex='女' where id = 1";
        //执行sql
        int update = template.update(sql);
        System.out.println(update);
    }


    @Test
    public void test2(){
        String sql ="insert into student(id,name,address) values(?,?,?)";
        int update = template.update(sql,7,"派克","比尔吉沃特" );
        System.out.println(update);
    }

    @Test
    public void test3(){
        String sql ="delete from student where id = ?";
        int update = template.update(sql, 7);
        System.out.println(update);
    }

    /*
    * 4.查询id为2的记录,将其封装为Map集合
    * 注意:这个方法查询的结果集长度只能是1
    * */
    @Test
    public void test4(){
        String sql ="select * from student where id = ?";
        Map<String,Object> map = template.queryForMap(sql,2);
        System.out.println(map);
    }

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

    /*
    * 查询所有记录,将其封装为Emp对象的List集合
    * */
    @Test
    public void test6(){
        String sql ="select * from student";
        List<Student> list =template.query(sql,new BeanPropertyRowMapper<Student>(Student.class));
        for (Student student : list) {
            System.out.println(student);
        }

    }

    /*
    * 查询总记录数
    * */
    @Test
    public void test7(){
        String sql = "select count(id) from student";
        Long aLong = template.queryForObject(sql, long.class);
        System.out.println(aLong);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值