今日内容

1. 数据库连接池2. Spring JDBC : JDBC Template

数据库连接池

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包 (两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,* 不要忘记导入数据库驱动jar包2. 定义配置文件:* 名称: c3p0.properties 或者 c3p0-config.xml* 路径:直接将文件放在src目录下即可。3. 创建核心对象 数据库连接池对象 ComboPooledDataSource4. 获取连接: getConnection* 代码://1.创建数据库连接池对象DataSource ds  = new ComboPooledDataSource();//2. 获取连接对象Connection conn = ds.getConnection();
5. Druid:数据库连接池实现技术,由阿里巴巴提供的1. 步骤:1. 导入jar包 druid-1.0.9.jar2. 定义配置文件:* 是properties形式的* 可以叫任意名称,可以放在任意目录下3. 加载配置文件。Properties4. 获取数据库连接池对象:通过工厂来来获取  DruidDataSourceFactory5. 获取连接:getConnection* 代码://3.加载配置文件Properties pro = new Properties();InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//4.获取连接池对象DataSource ds = DruidDataSourceFactory.createDataSource(pro);//5.获取连接Connection conn = ds.getConnection();2. 定义工具类1. 定义一个类 JDBCUtils2. 提供静态代码块加载配置文件,初始化连接池对象3. 提供方法1. 获取连接方法:通过数据库连接池获取连接2. 释放资源3. 获取连接池的方法* 代码:public class JDBCUtils {//1.定义成员变量 DataSourceprivate static DataSource ds ;static{try {//1.加载配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//2.获取DataSourceds = 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 stmt,Connection conn){/* if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();//归还连接} catch (SQLException e) {e.printStackTrace();}}*/close(null,stmt,conn);}public static void close(ResultSet rs , Statement stmt, Connection conn){if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(stmt != null){try {stmt.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

* Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化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)* queryForObject:查询结果,将结果封装为对象* 一般用于聚合函数的查询4. 练习:* 需求:1. 修改1号数据的 salary 为 100002. 添加一条记录3. 删除刚才添加的记录4. 查询id为1的记录,将其封装为Map集合5. 查询所有记录,将其封装为List6. 查询所有记录,将其封装为Emp对象的List集合7. 查询总记录数* 代码:import cn.itcast.domain.Emp;import cn.itcast.utils.JDBCUtils;import org.junit.Test;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import java.sql.Date;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import java.util.Map;public class JdbcTemplateDemo2 {//Junit单元测试,可以让方法独立执行//1. 获取JDBCTemplate对象private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 1. 修改1号数据的 salary 为 10000*/@Testpublic void test1(){//2. 定义sqlString sql = "update emp set salary = 10000 where id = 1001";//3. 执行sqlint count = template.update(sql);System.out.println(count);}/*** 2. 添加一条记录*/@Testpublic void test2(){String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";int count = template.update(sql, 1015, "张晨光", 10);System.out.println(count);}/*** 3.删除刚才添加的记录*/@Testpublic void test3(){String sql = "delete from emp where id = ?";int count = template.update(sql, 1015);System.out.println(count);}/*** 4.查询id为1001的记录,将其封装为Map集合* 注意:这个方法查询的结果集长度只能是1*/@Testpublic void test4(){String sql = "select * from emp where id = ? or id = ?";Map<String, Object> map = template.queryForMap(sql, 1001,1002);System.out.println(map);//{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}}/*** 5. 查询所有记录,将其封装为List*/@Testpublic void test5(){String sql = "select * from emp";List<Map<String, Object>> list = template.queryForList(sql);for (Map<String, Object> stringObjectMap : list) {System.out.println(stringObjectMap);}}/*** 6. 查询所有记录,将其封装为Emp对象的List集合*/@Testpublic void test6(){String sql = "select * from emp";List<Emp> list = template.query(sql, new RowMapper<Emp>() {@Overridepublic Emp mapRow(ResultSet rs, int i) throws SQLException {Emp emp = new Emp();int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");Date joindate = rs.getDate("joindate");double salary = rs.getDouble("salary");double bonus = rs.getDouble("bonus");int dept_id = rs.getInt("dept_id");emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setSalary(salary);emp.setBonus(bonus);emp.setDept_id(dept_id);return emp;}});for (Emp emp : list) {System.out.println(emp);}}/*** 6. 查询所有记录,将其封装为Emp对象的List集合*/@Testpublic void test6_2(){String sql = "select * from emp";List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));for (Emp emp : list) {System.out.println(emp);}}/*** 7. 查询总记录数*/@Testpublic void test7(){String sql = "select count(id) from emp";Long total = template.queryForObject(sql, Long.class);System.out.println(total);}}

JDBC连接池JDBCTemplate课堂笔记相关推荐

  1. 数据库连接之jdbc连接池

    BC 1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库 JDBC本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口,s ...

  2. jdbc封装mysql_用Java手动封装JDBC连接池(一)

    JDBC存在的问题 代码的冗余:在对数据库进行增删改查时,每个操作的JDBC流程和SQL执行代码的流程都一样,造成代码的冗余,所以我们可以把冗余的部分封装起来,封装之后,我们就不用再去写JDBC流程, ...

  3. HikariCP 高性能的 JDBC 连接池

    HikariCP 是一个高性能的 JDBC 连接池组件.下图是性能的比较测试结果: 使用方法: HikariConfig config = new HikariConfig(); config.set ...

  4. 在独立Java应用程序中使用Tomcat JDBC连接池

    这是从我们的客人文章W4G伙伴克拉伦斯豪的作者临春3从A按. 您可能会在文章结尾找到本书的折扣券代码,仅适用于Java Code Geeks的读者! 请享用! 在需要数据访问权限的独立Java应用程序 ...

  5. JDBC连接池和DBUtils

    本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...

  6. 数据层优化-jdbc连接池简述、druid简介

    终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...

  7. jdbc连接池工作原理_JDBC连接实际上如何工作?

    jdbc连接池工作原理 The JDBC Connection interface is a part of java.sql package. The java.sql.Connection int ...

  8. JDBC、封装JDBC连接池、第三方连接池工具

    主要内容: JDBC简介 JDBC来源 通过代码实现JDBC JDBC的改进需求 JDBC改进的代码实现 JDBC使用的设计模式 封装连接池 封装JDBC连接池 ThreadLoacl的使用 Thre ...

  9. JDBC,JDBC连接池和JNDI

    最初级的用法,也可以说是菜鸟 显式地把 JDBC 驱动程序.数据库 URL 以及用户名和口令编码到程序中 Connection conn=null; String url = "jdbc:m ...

最新文章

  1. Vbs脚本编程简明教程之十
  2. python去重txt文本_Python 文件去重(转载)
  3. mysql 日志记录 archive_完美起航-Mysql日志管理、备份与恢复
  4. oracle 重建 sys密码文件
  5. Bootstrap 排版h1~h6标题
  6. Mac安装Mysql(图文解说详细版)
  7. Tomcat控制台中文乱码怎么处理[已解决 绝对好用]
  8. 导出windows密码技巧总结
  9. CharField:Django文档——Model字段选项(Field Options)
  10. SessionAffinity分发策略
  11. 11月合资SUV销量:日系车统治榜单 大众产品攻势“拳意渐乱”
  12. Seaborn使用violinplot函数可视化分组小提琴图(violin plot)、使用inner函数设置在小提琴图中使用虚线显示分位数位置(inner = ‘quartile‘)
  13. Masonry自动布局详解五:比例(multipliedBy)
  14. 配置运营商光猫做交换机拓展网络
  15. C++基础概念(初步代码示例英石与磅单位互换)
  16. Aria2 for Mac (免HomeBrew)
  17. Vue_01_组件的使用
  18. 老夫聊发少年狂之初学编程
  19. 【Android 高性能音频】AAudio 音频流 音频设备 相关配置 ( 音频设备ID | 音频流方向 | 音频设备共享模式 )
  20. “马俊和黄佳婚姻”所引发的思考

热门文章

  1. 硬盘突然提示没有初始化_测试流程_507283-001 硬盘 HP SAS
  2. Java的,与类的初始化顺序
  3. Intellij IDEA中安装使用PlantUML画时序图、类图等
  4. 通过JConsole查看本地远程虚拟机
  5. PolarFS :一个用于共享存储云数据库的超低延迟和容错分布式文件系统
  6. 1分钟深入了解CSS3的动画属性animation
  7. ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接
  8. 【终极方法】 Cannot create PoolableConnectionFactory (Unknown database ‘jdbc‘)
  9. 关于SET和UNORDER_SET
  10. requirednew基于xml配置日志不回滚_Mybatis 系列 4:引入日志框架