说起Mybatis,相信大家都不会感到陌生,它是一款优秀的持久层框架,应用于java后端开发中,为客户端程序提供访问数据库的接口。
我们都知道,JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。这也就是Mybatis所具备的功能,那既然已经有了JDBC了,为什么还要用Mybatis呢?
原因很简单,因为单纯使用JDBC进行开发会出现效率低下、耗费资源及影响程序拓展性等问题。
首先来看一下使用JDBC对数据库进行访问的一段代码:
1 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 // 获取预处理statement27 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 // 封装User37 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 }
代码运行结果:
观察上述代码,不难发现以下问题:
针对JDBC存在的问题,来解释一下为什么要使用Mybatis:
以上几点说明了用Mybatis的好处,不过Mybatis其实也只是对JDBC进行了封装,说到底原理还是和JDBC一样,只是Mybatis用起来更加高效率。