这里是修真院后端小课堂,每篇分享文从
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】
八个方面深度解析后端知识/技能,本篇分享的是:
【jdbctemplate和jdbc 】
大家好,我是IT修真院郑州分院第12期的学员李雨航,一枚正直纯洁善良的后端程序员,今天给大家分享一下,修真院官网java(职业)任务1,深度思考中的知识点——jdbctemplate和jdbc
1.背景介绍
在开发业务系统时,经常需要对数据进行持久化操作,将数据保存到硬盘中比如对数据进行新增、查询、更新和删除。
这时候就需要使用数据库,通常使用第三方数据库中间件来进行数据操作,应用程序只需要调用数据库中间件提供的api即可。
由于市面上有很多数据库,如果提供的api不同,那么应用程序在使用不同的数据库时需要写不同的代码,带来维护的复杂性。
这时候就需要一套标准,由不同的数据库厂家来共同这套遵守标准来提供实现给应用程序调用
2.知识剖析
JDBC
JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。
JDBC代表Java数据库连接。JDBC库中所包含的API通常与数据库使用于:
连接到数据库创建SQL
MySQL语句在数据库中执行SQL命令
JDBC常用(重要)类/接口
在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
DriverManager类,用来创建连接,它本身就是一个创建Connection的工厂,设计的时候使用的就是Factory模式,给各数据库厂商提供接口,各数据库厂商需要实现它;
Connection接口,根据提供的不同驱动产生不同的连接;
Statement接口,用来发送SQL语句;
Resultset接口,用来接收查询语句返回的查询结果。
JdbcTemplate就是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。 JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接
他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。
在JdbcTemplate中执行SQL语句的方法大致分为3类:
execute:没有返回值,可以执行所有的SQL语句,一般用于执行DDL语句。
update:返回一个int值,影响的行数,用于执行INSERT、UPDATE、DELETE等DML语句。
queryXxx:用于DQL数据查询语句。
3.常见问题
1.JDBC和JDBCTemplate的优缺点
JDBC
优点:运行期:快捷、高效
缺点:编辑器:代码量大、繁琐异常处理、不支持数据库跨平台
JDBCTemplate
优点:运行期:高效、内嵌Spring框架中、支持基于AOP的声明式事务
缺点:必须于Spring框架结合在一起使用、不支持数据库跨平台、默认没有缓存
2.使用 jdbc.properties 有什么好处?
假如我们需要更改连接数据库的配置,我们直接在jdbc.properties里面更改一次就可以了.而JDBC的话需要增删改查里面每个连接数据库的配置都需要更改
4.编码实战
5.扩展思考
JDBC和JDBCTemplate链接数据库的不同方式
jdbc数据库驱动
我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。
其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。
JDBCTemplate连接池
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
使用数据库连接池的优点
(1)资源重用:
由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。
(2)更快的系统反应速度
数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间。
(3)新的资源分配手段
对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源。
(4)统一的连接管理,避免数据库连接泄露
在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露。
6.参考文献
7.更多讨论
1.如果真的发生数据库连接资源被占用,有什么解决方法
修改 MySQL 安装目录下 my.ini 或者 my.cnf 文件内的 max_user_connections 参数的数值,重启 MySQL 服务器。
2.jdbctemplate和mybatis分别在什么情况下使用,jdbc template 和spring+mybatis一样吗?,和mybatis相比有什么优缺点?
这三个问题其实差不多.JDBCTemplate和Mybatis不一样,Mybatis的sql语句放在了mapper.xml文件里面.相当于配置在了环境当中,随时都可以使用. 而JDBCTemplate则是写在了实现类里面,使用的时候还要进行重新调用配置之类的. 以后的工作中可能对多个表进行操作,配置在环境中使用起来非常方便.
3.如何来控制数据库的打开关闭.
Class.forName("com.mysql.jdbc.Driver"); 这个初始化驱动就是打开了数据库链接
Connection c = DriverManager.//连接数据库,
//关闭数据链接
ps.close();
c.close();
分享到此结束
更多内容,可以加入IT交流群565734203与大家一起讨论交流
这里是技能树·IT修真院:,初学者转行到互联网的聚集地
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。