MyBatis源码分析

MyBatis源码分析

MyBatis运行过程

  • 传统的JDBC编程查询数据库代码和过程总结

    1. 加载驱动
    2. 创建连接,Connection对象
    3. 根据Connection创建Statement或者PreparedStatement来执行 sql 语句
    4. 返回结果集到 ResultSet 中
    5. 手动将ResultSet映射到JavaBean中
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
       public static void main(String[] args) {
      //声明Connection对象
      Connection con = null;
      //遍历查询结果集
      try {
      //加载驱动程序
      Class.forName("com.mysql.jdbc.Driver");
      //创建 connection 对象
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "username", "password");
      //使用 connection 对象创建statement 或者 PreparedStatement 类对象,用来执行SQL语句
      Statement statement = con.createStatement();
      //要执行的SQL语句
      String sql = "select * from emp";
      //3.ResultSet类,用来存放获取的结果集!!
      ResultSet rs = statement.executeQuery(sql);
      String job = "";
      String id = "";
      while (rs.next()) {
      //获取stuname这列数据
      job = rs.getString("job");
      //获取stuid这列数据
      id = rs.getString("ename");
      //输出结果
      System.out.println(id + " " + job);
      }
      } catch (ClassNotFoundException e) {
      e.printStackTrace();
      } catch (SQLException e) {
      //数据库连接失败异常处理
      e.printStackTrace();
      } catch (Exception e) {
      e.printStackTrace();
      } finally {
      rs.close();
      con.close();
      }
      }
  • MyBatis具体流程

    1. 使用配置文件构建SqlSessionFactory
    2. 使用SqlSessionFactory获得SqlSession,SqlSession相当于传统JDBC的Connection
    3. 使用SqlSession得到Mapper
    4. 用Mapper来执行sql语句,并返回结果直接封装到JavaBean中
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
        //获取 sqlSession,sqlSession 相当于传统 JDBC 的 Conection
      public static SqlSession getSqlSession(){
      InputStream configFile = new FileInputStream(filePath);
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder.build(configFile);
      return sqlSessionFactory.openSession();
      }
      //使用 sqlSession 获得对应的 mapper,mapper 用来执行 sql 语句。
      public static User get(SqlSession sqlSession, int id){
      UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
      return userMapper.selectByPrimaryKey(id);
      }
  • 总结

    1. 初始化阶段 –> 读写XML配置文件和注解中的配置信息,创建配置信息,并完成各个模块的初始化工作
    2. 代理阶段 –> 封装batis编程模型,使用mapper接口开发的初始化工作
    3. 数据读写阶段 –> 通过sqlSession完成sql的解析,参数的映射,SQL的执行和结果反射的过程

源码分析