MyBatis 教程

什么是结果映射?

本章节中将通过一个简单的 JDBC 示例,讲解什么是结果集映射。

创建JDBC应用程序

构建 JDBC 应用程序涉及以下六个步骤:

  • 导入包:需要包含包含数据库编程所需的 JDBC 类的包。 大多数情况下,使用 import java.sql.* 就足够了。

  • 注册JDBC驱动程序:需要初始化驱动程序,以便可以打开与数据库的通信通道。

  • 打开一个连接:需要使用 DriverManager.getConnection() 方法创建一个 Connection 对象,它表示与数据库的物理连接。

  • 执行查询:需要使用类型为 Statement 的对象来构建和提交 SQL 语句到数据库。

  • 从结果集中提取数据:需要使用相应的 ResultSet.getXXX() 方法从结果集中检索数据。

  • 清理环境:需要明确地关闭所有数据库资源,而不依赖于 JVM 的垃圾收集。

代码示例

下面代码将介绍一个完整 JDBC 应用程序的开发过程,代码如下:

//STEP 1. 导入需要的包
import java.sql.*;

public class FirstExample {
   // 数据库驱动名和数据库URL地址
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/emp";

   //  数据库帐号和密码
   static final String USER = "root";
   static final String PASS = "123456";

   public static void main(String[] args) {
       Connection conn = null;
       Statement stmt = null;
       try{
          // STEP 2: 注册JDBC驱动
          Class.forName("com.mysql.jdbc.Driver");

          // STEP 3: 打开一个链接
          System.out.println("Connecting to database...");
          conn = DriverManager.getConnection(DB_URL,USER,PASS);

          // STEP 4: 执行查询
          System.out.println("Creating statement...");
          stmt = conn.createStatement();
          String sql = "SELECT user_id, name, age FROM user";
          ResultSet rs = stmt.executeQuery(sql);

          // STEP 5: 从结果集提取数据
          while(rs.next()){
             // 根据列名获取值
             int userId  = rs.getInt("user_id");
             int age = rs.getInt("age");
             String name = rs.getString("name");

             // 显示值
             System.out.print("USER ID: " + userId);
             System.out.print(", NAME: " + name);
             System.out.print(", AGE: " + age);
          }
          // STEP 6: 清理环境,释放资源
          rs.close();
          stmt.close();
          conn.close();
       } catch(Exception e) {
          e.printStackTrace();
       } finally {
          try {
             if(stmt!=null)
                stmt.close();
          } catch(SQLException se2) {}
          try {
             if(conn!=null)
                conn.close();
          } catch(SQLException se) {
             se.printStackTrace();
          }
       }
       System.out.println("There are so thing wrong!");
    }
}

上面代码中,while 部分用来将查询到的数据获取出来,然后显示出来。而在实际业务中,我们需要将返回的结果封装到 JavaBean,然后将 JavaBean 传递给 Service。那么,将怎样将这些零散的值放入到对应的 JavaBean 中呢?在没有 MyBatis 之前,我们是这样做的:

// 定义 JavaBean UserBean
public class UserBean {
   private Integer userId;
   private String name;
   private Integer age;
   // 忽略 getter 和 setter
}

// STEP 5: 从结果集提取数据
List<UserBean> userList = new ArrayList<UserBean>();
while(rs.next()){
    // 根据列名获取值
    int userId  = rs.getInt("user_id");
    int age = rs.getInt("age");
    String name = rs.getString("name");

    // 显示值
    UserBean user = new UserBean();
    user.setUserId(userId);
    user.setAge(age);
    user.setName(name);
    userList.add(user);
}

// 调用服务
service.userFind(userList);

有了 MyBatis 后,事情就变得非常简单了。MyBatis 可以通过 <resultMap> 标签来定义怎样将 SQL 语句返回的列和 JavaBean 进行映射。例如:

<!-- 映射结果 -->
<resultMap id="RESULT_MAP" type="com.hxstrive.mybatis.sql.demo2.UserBean">
    <id column="user_id" jdbcType="INTEGER" property="userId" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="sex" jdbcType="VARCHAR" property="sex" />
    <result column="age" jdbcType="INTEGER" property="age" />
</resultMap>

在后续章节将详细介绍 MyBatis 的结果映射,可以进行单表映射、关联映射。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号