当前位置:Gxlcms >
数据库问题 >
Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?
Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?
时间:2021-07-01 10:21:17
帮助过:55人阅读
import java.sql.*
;
2
3 public class JDBCTest {
4
5 public static final String URL = "jdbc:mysql://localhost:3306/mybatis_study?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
;
6 public static final String USER = "root"
;
7 public static final String PASSWORD = "root"
;
8
9 public static void main(String[] args)
throws Exception {
10 Connection connection =
null;
11 PreparedStatement preparedStatement =
null;
12 ResultSet resultSet =
null;
13 User user =
new User();
14
15 try {
16 // 加载数据库驱动
17 /* 注意事项:
18 1、这里需要提前找好mysql驱动的jar包,复制到项目库中,或者直接通过maven导入。
19 2、注意jar包版本要与本机的mysql一致。
20 没有做到以上两点必然会报错。*/
21 Class.forName("com.mysql.cj.jdbc.Driver"
);
22 // 获取数据库连接
23 connection =
DriverManager.getConnection(URL, USER, PASSWORD);
24 // 定义sql语句
25 String selectSql = "select * from user where username = ?"
;
26 // 获取预处理statement
27 preparedStatement =
connection.prepareStatement(selectSql);
28 // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
29 preparedStatement.setString(1, "hardy"
);
30 // 向数据库发出sql执行查询,查询出结果集
31 resultSet =
preparedStatement.executeQuery();
32 // 遍历查询结果集
33 while (resultSet.next()) {
34 int id = resultSet.getInt("id"
);
35 String username = resultSet.getString("username"
);
36 // 封装User
37 user.setId(id);
38 user.setUsername(username);
39 }
40 System.out.println(user);
41
42 }
catch (Exception e) {
43 e.printStackTrace();
44 }
finally {
45 // 释放资源
46 if (resultSet !=
null) {
47 try {
48 resultSet.close();
49 }
catch (SQLException e) {
50 e.printStackTrace();
51 }
52 }
53
54 if (preparedStatement !=
null) {
55 try {
56 preparedStatement.close();
57 }
catch (SQLException e) {
58 e.printStackTrace();
59 }
60 }
61
62 if (connection !=
null) {
63 try {
64 connection.close();
65 }
catch (SQLException e) {
66 e.printStackTrace();
67 }
68 }
69 }
70 }
71 }
代码运行结果:
观察上述代码,不难发现以下问题:
- 数据库配置信息存在硬编码问题。(当我们从mysql数据库切换到oracle数据库时,代码中的数据驱动信息和数据库连接信息都需要修改。)
- 需要频繁创建和释放数据库连接。
- sql语句、设置参数及获取结果集参数均存在硬编码问题。(不同数据库的sql语法,参数及结果集参数均有所不同)
- 需要手动封装返回结果集。
为什么要用Mybatis?
针对JDBC存在的问题,来解释一下为什么要使用Mybatis:
- Mybatis使用配置文件加载数据库配置信息,很好地解决了硬编码问题。
- 对于创建和释放数据库连接等步骤,Mybatis直接使用连接池进行解决。
- 针对“sql语句、设置参数及获取结果集参数均存在硬编码”的问题,Mybatis也使用配置文件解决了该问题。(这里一般不和数据库配置信息在同一个配置文件中进行配置,因为数据库配置信息在一个项目中只配置一次,但sql语句等经常会发生变化)。
- 对于结果集的封装操作,Mybatis使用反射和内省进行解决。
以上几点说明了用Mybatis的好处,不过Mybatis其实也只是对JDBC进行了封装,说到底原理还是和JDBC一样,只是Mybatis用起来更加高效率。
Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?
标签:cat legacy 配置文件 loading 定义 接口 rest 语法 maven