什么是框架
简单概括:框架是软件开发中的一套解决方案,不同的框架解决不同的问题。封装了很多细节,使开发者使用极简的方式就能实现功能,大大提高开发效率。
软件开发中的三层架构
表现层:用于展示数据
业务层:用于处理数据
持久层:和数据库进行交互
持久层的技术解决方案
- JDBC技术:Connection,PreparedStatement,ResultSet
- spring的JdbcTemplate:spring对JDBC的简单封装
- Apache的DButils:和spring的JdbcTemplate很像,也是对JDBC的简单封装
但是以上这些都不是框架,JDBC是规范,JdbcTemplate和DButils只是工具类
传统JDBC知识点回顾
-
注册驱动为什么用Class.forName(“com.mysql.jdbc.Driver”)而不使用DriverManager.registerDriver(new com.mysql.jdbc.Driver())?
通过类加载的方式来加载Driver类,照样能够执行static代码块中的注册驱动的方法。而且由于将Driver的位置写成了字符串的形式,编写代码编译的时候不会报错,对jar包的依赖就降低了,也易于使用配置文件加载这个类,所以下次如果换成连接Oracle或者其他数据库,改一下配置文件再填一个jar包就可以了。
注意:jdbc4.0之后每个驱动的jar包中在META-INF/services目录下提供了一个名为java.sql.Driver的文件,文件内容就是该接口的实现类名称,所以不写class.forName(……)也会执行成功,但是建议写上,以便兼容老版本
-
JDBC为什么用PreparedStatement而不是Statement?
-
使用PreparedStatement,数据库系统会对sql语句进行预编译处理。预处理语句将被预先编译好,执行计划会被缓存起来,这条预编译的sql语句能在将来重用,调用时只要是相同的预编译语句就不需要编译,他的查询速度会快
-
可以写动态参数化的查询方式。用?作为占位符
SELECT interest_rate FROM loan WHERE loan_type=?
-
PreparedStatement可以防止sql注入。在使用参数化的查询方式时,不会将参数内容视为sql指令的一部分,而是在完成SQL指令的编译后才套用参数运行,因此就算参数中含有破坏性指令也不会被数据库所运行,可以防止大部分的sql语句
-
-
PreparedStatement设置参数下标从1开始
preparedStatement.setString(1,”张三”)
-
JDBC数据库连接中资源的关闭顺序
先关闭resultSet,然后是statement,最后是connection。与创建的顺序相反。关闭顺序不对可能会出现异常。