MyBatis 第二十二章 MyBatis 简介


MyBatis —— 第二十二章 MyBatis 简介


1. 原始 JDBC 操作

查询数据:

// Register driver
Class.forName("com.mysql.cj.jdbc.Driver");
// Get the connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
// Get statment
PreparedStatement ps = conn.preparedStatement("select id, username, password from user");
// Execute query
ResultSet rs = ps.executeQuery();
// Traversal result set
while( rs.next() ) {
      // Encapsulation entity
      User user = new User();
      user.setId(rs.getInt("id"));
         user.setUsername(rs.getString("username"));
      user.setPassword(rs.getString("password"));
}
// Release resources
rs.close();
ps.close();
conn.close();

插入数据

// Simulate entity objects
User user = new User();
user.setId(2);
user.setUsername("XiaoMing");
user.setPassword("123456");

// Register driver
Class.forName("com.mysql.cj.jdbc.Driver");
// Get the connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
// Get statment
PreparedStatement ps = conn.preparedStatement("insert into user(id, username, password) values(?, ?, ?)");
// Set placeholder parameters
ps.setInt(1, user.getId);
ps.setString(2, user.getUsername);
ps.setString(3. user.getPassword);
// Execute query
ResultSet rs = ps.executeQuery();
// Release resources
ps.close();
conn.close();

2. 原始 JDBC 操作的分析

原始 JDBC 开发存在的问题如下:

  1. 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
  2. SQL 语句在代码中硬编码,造成代码不易维护,实际应用 SQL 变化的可能较大,SQL 变动需要改变 Java 代码
  3. 查询操作时,需要手动将结果集中的数据封装到实体中。插入操作时,需要手动将实体的数据设置到 SQL 语句的占位符位置

应对上述问题给出的解决方案:

  1. 使用数据库连接池初始化连接资源
  2. 将 SQL 语句抽取到 XML 配置文件或者是注解中
  3. 使用反射、内省等底层技术,自动将实体与表进行属性与字段的映射

3. 什么是 MyBatis

  • MyBatis 是一个优秀的基于 Java 的持久层框架,它内部封装了 JDBC,使开发者只需要关注 SQL 语句本身,而不需要花费精力去处理加载驱动、创建链接、创建 statement 等繁杂过程。
  • MyBatis 通过 XML 或者是注解的方式将要执行的各种 statement 配置起来,并通过 Java 对象和 statement 中的动态参数进行映射,生成最终执行的 SQL 语句。
  • 最后,MyBatis 框架执行 SQL 并将结果映射为 Java 对象并返回。采用 ORM(对象关系映射)思想解决了实体和数据库的映射问题,对 JDBC 进行了封装,屏蔽了 JDBC API 底层访问细节,使我们不用与 JDBC API 打交道,就可以完成对数据库的持久操作。


文章作者: gregPerlinLi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 gregPerlinLi !
  目录