1.使用传统JDBC
使用步骤: 6 大步骤!
1. 注册数据库驱动
导入数据库驱动的依赖
新版数据库驱动可以自动注册,可以忽略这步
Class.forName(驱动类名 )
2. 连接到数据库
需要 3 个参数 url username password
3. 创建 Statement (语句)对象
4. 执行 SQL 语句( CRUD )
5. 处理 SQL 语句的结果
6. 关闭数据库连接
Java 7 以后可以利用 , try catch 的自动关闭功能,自动关闭连接
示例代码如下:
public class StudentDaoJdbcImpl implements StudentDao {
@Autowired
DataSource dataSource;
@Override
public int saveStudent(Student student) {
//2. 创建连接
try (Connection connection = dataSource.getConnection()){
//1. 注册数据库驱动, 自动完成
Class.forName("com.mysql.jdbc.Driver");
String sql = "INSERT INTO student (id, name, birth_date) VALUE (null, ?, ?)";
//3. 创建 Statement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, student.getName());
preparedStatement.setDate(2, Date.valueOf(student.getBirthDate()));
//4. 执行SQL语句
int n = preparedStatement.executeUpdate();
//5 处理SQL结果
//获取自动生成的ID
ResultSet resultSet = preparedStatement.getGeneratedKeys();
while (resultSet.next()){
//为Student 设置刚刚生成的ID
student.setId(resultSet.getInt(1));
}
return n;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
//6. 关闭数据库连接, 采用Java 7的自动关闭功能
}
2.传统JDBC的不足:
1.代码中的冗余重复
2.代码繁琐易错
3.每次都要处理异常
3.什么是Spring JDBC
Spring JDBC 是对 JDBC 的轻量封装,解决了传统 JDBC 冗余,易错,以及异常处理的问题。
采用模板设计模式,将 JDBC 通用代码进行封装, 提供一个简洁使用方式: JdbcTemplate
4.Spring JDBC什么时候用
Spring JDBC 是 Spring 提供的持久层解决方案, 轻量化封装,简化了 JDBC 的操作,又提供非常优秀的性
能,适用于小的轻量级的项目
5.比较MyBatis 和 Spring JDBC:
MyBatis -- 大部分项目都用 MyBatis
MyBatis 是重量级的框架(相对于 Spring JDBC ),内部用到了反射和动态代理,执行效率没
有 Spring JDBC 快
MyBatis封装更加彻底,几乎 “ 零 JDBC” 编码,用起来非常方便Spring JDBC -- 适用于小的轻量级的项目是轻量级的框架,实际上就是对传统JDBC的简单封装,提供了对异常的处理,执行效率和传统JDBC 一样,非常轻快
Nacos底层使用了 Spring JDBC
6.使用Spring JDBC的步骤:
1. 在 Spring Boot 项目中导入相关依赖
<!-- mysql驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- spring-jdbc依赖 -->
<dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2. 在属性 application.yml 文件配置数据源信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/spring_test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username: root
password: root
关于spring-boot-starter-jdbc自动配置
如果依赖了spring-boot-starter-jdbc 和 JDBC 驱动, Spring Boot 就会自动创建数据库连接池
HikariDataSource添加依赖spring-boot-starter-jdbc 后,必须在应用属性文件 application.yml 中配置 datasource 参数,如果没有datasource 配置,则启动出现异常!如果配置了自定义的DataSource 类型的 Bean 对象,则 Spring Boot 就不再创建 HikariDataSource
对象,这样就实现了自定义 DataSource 配置
JdbcTemplate的使用
导入spring-boot-starter-jdbc 依赖后, Spring Boot 会自动创建 jdbcTemplate Bean ,使用时候注入即可:
测试从 JdbcTemplate 中获取连接对象,看是否获取成功,若能获取成功连接对象,则该模板类可以使用
模板类 -- JdbcTemplate
JdbcTemplate 的优势:
消除重复的模板代码减轻引起错误的常见原因
正确处理 SQLExceptions
在不牺牲性能的情况下
提供对标准 JDBC 结构的完全访问
JdbcTemplate 封装的操作有哪些?
1. 获取连接
2. 执行 SQL
3. 参与事务
4. 处理结果集
5. 处理异常
6. 释放连接
总之:程序员只需要调用该类中的方法即可完成相对应的操作,不用再写模板代码,不用考虑模板代码中的异常处理,操作方便了很多。