SQL之数据库连接池与spring jdbc

简介: SQL之数据库连接池与spring jdbc

学习数据库连接池和spring jdbc可以简化jdbc原始代码

数据库连接池的概念

数据库连接池就是一个容器(集合),存放数据库连接对象的容器

当系统初始化之后(Tomcat服务器启动),容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,直接从容器中获取连接对象(无需再跟数据库创建连接),用户访问完之后,会将连接对象归还给容器

好处

  1. 节约资源
  2. 用户访问高效

实现

  1. 标准接口:DataSource
  1. 方法:
    获取连接:getConnection()
    归还连接:Connection.close()。如果连接对象Connection是从连接池中获取的,那么Connection.close()不再是关闭资源,而是归还连接至数据库连接池
  1. 一般我们不去实现它,由数据库厂商来实现
    Druid:数据库连接池实现技术,由阿里巴巴提供

Druid数据库连接池

步骤:

  1. 导入jar包
  2. 定义配置文件
    druid.properties
    可以叫任意名称,可以放在任意目录下,需要手动加载
  3. 加载配置文件
  4. 获取数据库连接池对象:通过工厂类来获取 DruidDataSourceFactory.createDataSource()
  5. 获取连接:getConnection

driverClassName=com.mysql.cj.jdbc.Driver

url=jdbc:mysql://localhost:3306/contest?serverTimezone=GMT%2B8&useSSL=false

username=username

password=password

# 初始化连接数量

initialSize=5

# 最大连接数

maxActive=10

# 最大等待时间

maxWait=3000

publicclassDruid {

   publicstaticvoidmain(String[] args) throwsException {

       //1.导入jar包

       //2.定义配置文件

       //3.加载配置文件

       Propertiespro=newProperties();

       InputStreamis=Druid.class.getClassLoader().getResourceAsStream("druid.properties");

       pro.load(is);

       //4.获取连接池对象

       DataSourceds=DruidDataSourceFactory.createDataSource(pro);

       //5.获取连接

       Connectioncoon=ds.getConnection();

       System.out.println(coon);

   }

}

Druid连接池的工具类

packageutils;

importcom.alibaba.druid.pool.DruidDataSourceFactory;

importjdbc.Druid;

importjavax.sql.DataSource;

importjava.io.InputStream;

importjava.sql.*;

importjava.util.Properties;

/**

* druid连接池的工具类

*/

publicclassJDBCUtils {

   //定义数据库连接池

   privatestaticDataSourceds;

   /**

    * 当类被加载时,初始化数据库连接池

    */

   static{

       try {

           //加载配置文件

           Propertiespro=newProperties();

           InputStreamis=Druid.class.getClassLoader().getResourceAsStream("druid.properties");

           pro.load(is);

           //获取连接池对象

           ds=DruidDataSourceFactory.createDataSource(pro);

       } catch (Exceptione) {

           e.printStackTrace();

       }

   }

   /**

    * 获取连接

    */

   publicstaticConnectiongetConnection() throwsSQLException {

       returnds.getConnection();

   }

   /**

    * 释放资源

    */

   publicstaticvoidclose(Connectionconn, Statementstmt,ResultSetrs){

       if(rs!=null){

           try {

               rs.close();

           } catch (SQLExceptionthrowables) {

               throwables.printStackTrace();

           }

       }

       if(stmt!=null){

           try {

               stmt.close();

           } catch (SQLExceptionthrowables) {

               throwables.printStackTrace();

           }

       }

       if(conn!=null){

           try {

               conn.close();

           } catch (SQLExceptionthrowables) {

               throwables.printStackTrace();

           }

       }

   }

   publicstaticvoidclose(Connectionconn, Statementstmt){

       close(conn,stmt,null);

   }

   

   /**

    * 获取数据库连接池

    */

   publicstaticDataSourcegetDataSource(DataSourceds){

       returnds;

   }

}

Spring JDBC

spring框架对jdbc进行了简单封装。提供一个JDBCTemplate对象简化JDBC的开发template:模板;即jdbc模板

jdbcTemplate内部对申请连接,释放资源等做了封装,我们不需要再去关心,只需要考虑如何定义SQL语句,如何执行及如何处理结果即可,大大简化jdbc的操作,很nice

步骤

  1. 导入jar包
  2. 创建JdbcTemplate对象。依赖于数据库连接池DataSource
    JdbcTemplate template = new JdbcTemplate(ds);
  3. 调用JdbcTemplate的方法来完成crud操作
  1. update():执行DML语句。增删改语句
  2. queryForMap():查询结果并封装为map集合
    注意:查询结果集长度只能为1(只能封装一行数据)
  3. queryForList():查询结果并封装为list集合
    注意:将每一行数据封装为一个map集合,再将map集合装载到list集合中
  4. query():查询结果并封装为Javabean对象(封装为数据库表的实体类的对象)
    注意:query的参数:RowMapper
    一般我们使用BeanPropertyRowMapper实现类。可以完成数据到javabean的自动封装
    new BeanPropertyRowMapper<类型>(类型.class)
  5. queryForObject():查询结果并封装为对象注意
  1. 如果要实现使用queryForObject获得自定义的类的对象,需要使用和方法query()相似的重载方法queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args)

template.queryForObject(sql, newBeanPropertyRowMapper<E>(E.class));

  1. 一般用于聚合函数的查询

/**

* 操作数据库中user表的类

* dao:database access object 数据库访问对象

*/

publicclassUserDao {

   //声明jdbcTemplate对象共用

   privateJdbcTemplatetemplate=newJdbcTemplate(JDBCUtils.getDataSource());

   /**

    * 登录方法

    * @param loginUser 只有用户名和密码

    * @return user 用户全部数据,没有返回null

    */

   publicUserlogin(UserloginUser){

       try {

           //1.定义SQL

           Stringsql="select * from user where username=? and password=?";

           //2.调用query方法

           Useruser=template.queryForObject(sql, newBeanPropertyRowMapper<User>(User.class),loginUser.getUsername(),loginUser.getPassword());

           returnuser;

       } catch (DataAccessExceptione) {

           returnnull;

       }

   }

}


目录
相关文章
|
10天前
|
SQL 存储 数据管理
SQL Server数据库
SQL Server数据库
22 11
|
17天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
36 0
|
20天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
36 0
|
20天前
|
SQL 数据处理 数据库
|
20天前
|
SQL 存储 调度
|
20天前
|
SQL 安全 数据库
|
20天前
|
Java 数据库连接 数据库
告别繁琐 SQL!Hibernate 入门指南带你轻松玩转 ORM,解锁高效数据库操作新姿势
【8月更文挑战第31天】Hibernate 是一款流行的 Java 持久层框架,简化了对象关系映射(ORM)过程,使开发者能以面向对象的方式进行数据持久化操作而无需直接编写 SQL 语句。本文提供 Hibernate 入门指南,介绍核心概念及示例代码,涵盖依赖引入、配置文件设置、实体类定义、工具类构建及基本 CRUD 操作。通过学习,你将掌握使用 Hibernate 简化数据持久化的技巧,为实际项目应用打下基础。
40 0
|
20天前
|
SQL 存储 监控
|
20天前
|
SQL 数据库 Java
HQL vs SQL:谁将统治数据库查询的未来?揭秘Hibernate的神秘力量!
【8月更文挑战第31天】Hibernate查询语言(HQL)是一种面向对象的查询语言,它模仿了SQL的语法,但操作对象为持久化类及其属性,而非数据库表和列。HQL具有类型安全、易于维护等优点,支持面向对象的高级特性,内置大量函数,可灵活处理查询结果。下面通过示例对比HQL与SQL,展示HQL在实际应用中的优势。例如,HQL查询“从员工表中筛选年龄大于30岁的员工”只需简单地表示为 `FROM Employee e WHERE e.age &gt; 30`,而在SQL中则需明确指定表名和列名。此外,HQL在处理关联查询时也更为直观易懂。然而,对于某些复杂的数据库操作,SQL仍有其独特优势。
27 0
|
21天前
|
Java UED 开发者
当错误遇上Struts 2:一场优雅的异常处理盛宴,如何让错误信息成为用户体验的救星?
【8月更文挑战第31天】在Web应用开发中,异常处理对确保用户体验和系统稳定性至关重要。Struts 2 提供了完善的异常处理机制,包括 `exception` 拦截器、`ActionSupport` 类以及 OGNL 表达式,帮助开发者优雅地捕获和展示错误信息。本文详细介绍了 Struts 2 的异常处理策略,涵盖拦截器配置、错误信息展示及自定义全局异常处理器的实现方法,使应用程序更加健壮和用户友好。
30 0