水煮MyBatis(二)- 我做了什么

150 阅读2分钟

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

我做了什么

在Java生态圈,谈起ORM框架,就绕不开JDBC。就比如刘邦之于大汉朝,JDBC是所有持久层框架的基石。而MyBatis的职责范围,从下面这段简单的JDBC的代码里也能看出点端倪。

        // 1 注册JDBC驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2 打开链接
        Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
        // 3 sql语句
        String sql = "select * from tb_user where age > ? ";
        // 4 创建预处理对象
        PreparedStatement stmt = conn.prepareStatement(sql);
        // 5 设置参数
        stmt.setInt(1,18);
        // 6 执行
        stmt.executeQuery();
        // 7 获取查询结果
        ResultSet rs = stmt.getResultSet();
        while (rs.next()){
            System.out.println(rs.getString("username"));
        }
        // 8  释放db资源
        stmt.close();
        conn.close();

MyBatis就是将上面这几行代码进行分解包装,方便程序员忽略细节,专注具体业务。

  • 第1、2行是对数据源的管理,包括事务控制;
  • 第3、4、5行是MyBatis通过配置文件来管理SQL及输入参数的映射;
  • 第6、7行是MyBatis获取返回结果到Java对象的映射,也是通过配置文件或者注解来管理。

目前我使用注解的情况比较多,就用注解的代码来做一下对比:


    @Select("select * from tb_user where age > #{age}")
    User findUser(@Param(value = "age") int age);
    

以上两行代码就是MyBatis框架里,需要程序员完成的工作
image.png

我的目的

从上面MyBatis的代码可以看出,其要实现的效果就是把流程性的、固定的内容封装起来,对用户隐藏,毕竟这不是用户关心的点。类似于AOP【面向截面编程】,这样可以让用户关注具体业务,提升工作效率,更简单便捷的操作数据库,这就是MyBatis的价值所在。