Mybatis源码之温故jdbc

我们回顾下之前没有使用Mybatis,使用原生态jdbc的场景

public Integer insert(User user) {
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        String insertSql = "INSERT INTO USER (name,age,sex,birth_day) VALUES(?,?,?,?) ";
        try {
            conn = JdbcUtil.getConn();//① 从ThreadLocal.get();
            conn.setAutoCommit(false);//②
            preparedStatement = conn.prepareStatement(insertSql);//③
            //CallableStatement callableStatement = conn.prepareCall(insertSql);
            //Statement statement = conn.createStatement();
            preparedStatement.setObject(1,user.getName());//④
            preparedStatement.setObject(2,user.getAge());
            preparedStatement.setObject(3,user.getSex());
            preparedStatement.setObject(4,user.getBirthDay());

            conn.commit();//⑥
            conn.setAutoCommit(true);//⑦

        } catch (SQLException e) {
            e.printStackTrace();
            if(conn!=null){
                conn.rollback();//⑧
                conn.setAutoCommit(true);
                JdbcUtil.closeAll(conn,preparedStatement,null);//⑨
            }
        }
    private static ThreadLocal<Connection> connThreadLocal = new ThreadLocal<>();
    public static Connection getConn() throws SQLException {
        if(connThreadLocal.get() == null){
            Connection connection = DriverManager.getConnection(url, userName, passwd);
            connThreadLocal.set(connection);
        }
        return connThreadLocal.get();
    }

同样的代码如果让mybatis的来实现,那可边的复杂多了,但是使用起来方便多了。

第一步获取连接:

    a)连接的获取,可能是数据库连接池dataSource中获取
    b)同一个事务多个dao操作(代码中一个Service可能就是多个dao操作,在serice中回滚和提交),我们获取从数据库连接池中获取一个conn,设置到ThreadLocal然后每个dao从threadlocal中获取同一个连接,这样事务(多笔dao操作)就能一起提交,回滚了。

第二步创建Statement:

Statement的创建主要是三种:
    Statement st = conn.createStatement();
    preparedStatement = conn.prepareStatement(insertSql);//Mybatis默认方式
    CallableStatement callableStatement = conn.prepareCall(insertSql);

第三步设置参数:

  Service中传递过来的参数是如何,将数据设置到Mapper文件替换变量的
  Mybatis的动态Sql是如何做的

第四步提交事务:

 mybatis是如何提交的

第五步异常回滚:

mybatis异常事务回滚

及时没有看源码也知道mybatis也会做这些事情,我们就跟着这些线索踏上mybatis源码之旅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值