深入剖析 mybatis 原理(一)

# 前言

在java程序员的世界里,最熟悉的开源软件除了 Spring,Tomcat,还有谁呢?当然是 Mybatis 了,今天楼主是来和大家一起分析他的原理的。

1. 回忆JDBC

首先,楼主想和大家一起回忆学习JDBC的那段时光:

package cn.think.in.java.jdbc;

public class JdbcDemo {
   

  private Connection getConnection() {
   
    Connection connection = null;
    try {
   
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      String url = "jdbc:sqlserver://192.168.0.251:1433;DatabaseName=test";
      String user = "sa";
      String password = "$434343%";
      connection = DriverManager.getConnection(url, user, password);

    } catch (Exception e) {
   
      e.printStackTrace();
    }
    return connection;
  }

  public UserInfo getRole(Long id) throws SQLException {
   
    Connection connection = getConnection();
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
   
      ps = connection.prepareStatement("select * from user_info where id = ?");
      ps.setLong(1, id);
      rs = ps.executeQuery();
      while (rs.next()) {
   
        Long roleId = rs.getLong("id");
        String userName = rs.getString("username");
        String realname = rs.getString("realname");
        UserInfo userInfo = new UserInfo();
        userInfo.id = roleId.intValue();
        userInfo.username = userName;
        userInfo.realname = realname;
        return userInfo;
      }
    } catch (Exception e) {
   
      e.printStackTrace();
    } finally {
   
      connection.close();
      ps.close();
      rs.close();
    }
    return null;
  }

  public static void main(String[] args) throws SQLException {
   
    JdbcDemo jdbcDemo = new JdbcDemo();
    UserInfo userInfo = jdbcDemo.getRole(1L);
    System.out.println(userInfo);
  }
}


看着这么多 try catch finally 是不是觉得很亲切呢?只是现如今,我们再也不会这么写代码了,都是在Spring和Mybatis 中整合了,一个 userinfoMapper.selectOne(id) 方法就搞定了上面的这么多代码,这都是我们今天的主角 Mybatis 的功劳,而他主要做的事情,就是封装了上面的除SQL语句之外的重复代码,为什么说是重复代码呢?因为这些代码,细想一下,都是不变的。

那么,Mybatis 做了哪些事情呢?

实际上,Mybatis 只做了两件事情:

  1. 根据 JDBC 规范 建立与数据库的连接。
  2. 通过反射打通Java对象和数据库参
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值