当前位置: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 }

代码运行结果:

技术图片

观察上述代码,不难发现以下问题:

  1. 数据库配置信息存在硬编码问题。(当我们从mysql数据库切换到oracle数据库时,代码中的数据驱动信息和数据库连接信息都需要修改。)
  2. 需要频繁创建和释放数据库连接。
  3. sql语句、设置参数及获取结果集参数均存在硬编码问题。(不同数据库的sql语法,参数及结果集参数均有所不同)
  4. 需要手动封装返回结果集。

为什么要用Mybatis?

针对JDBC存在的问题,来解释一下为什么要使用Mybatis:

  1. Mybatis使用配置文件加载数据库配置信息,很好地解决了硬编码问题。
  2. 对于创建和释放数据库连接等步骤,Mybatis直接使用连接池进行解决。
  3. 针对“sql语句、设置参数及获取结果集参数均存在硬编码”的问题,Mybatis也使用配置文件解决了该问题。(这里一般不和数据库配置信息在同一个配置文件中进行配置,因为数据库配置信息在一个项目中只配置一次,但sql语句等经常会发生变化)。
  4. 对于结果集的封装操作,Mybatis使用反射和内省进行解决。

以上几点说明了用Mybatis的好处,不过Mybatis其实也只是对JDBC进行了封装,说到底原理还是和JDBC一样,只是Mybatis用起来更加高效率。

技术图片

 

Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?

标签:cat   legacy   配置文件   loading   定义   接口   rest   语法   maven   

人气教程排行