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源码之旅!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!关于Spring Boot、MyBatis Plus和Sharding-JDBC的集成问题,我可以提供一些基本指导。首先,确保您已经在Spring Boot项目中成功集成了MyBatis Plus和Sharding-JDBC的依赖。 在pom.xml文件中添加MyBatis Plus和Sharding-JDBC的依赖: ```xml <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!-- Sharding-JDBC --> <dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>${sharding-jdbc.version}</version> </dependency> ``` 接下来,您需要配置Sharding-JDBC。在application.yml(或application.properties)文件中添加相应的配置信息。以下是一个示例: ```yaml spring: shardingsphere: datasource: names: ds0, ds1 # 数据源名称 ds0: url: jdbc:mysql://localhost:3306/db0?serverTimezone=UTC username: root password: root driver-class-name: com.mysql.jdbc.Driver ds1: url: jdbc:mysql://localhost:3306/db1?serverTimezone=UTC username: root password: root driver-class-name: com.mysql.jdbc.Driver sharding: tables: user: actualDataNodes: ds$->{0..1}.user tableStrategy: inline: shardingColumn: id algorithmExpression: user$->{id % 2} keyGenerator: type: SNOWFLAKE ``` 这是一个简单的配置示例,其中包含了两个数据源(ds0和ds1),以及一个名为user的分片表的配置。您可以根据您的实际需求进行调整。 最后,您可以在MyBatis Plus的Mapper接口中使用Sharding-JDBC提供的分片功能。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { // 自定义SQL查询方法 List<User> selectUserById(@Param("id") Long id); } ``` 这只是一个简单的示例,您可以根据自己的业务需求进行扩展和定制。 希望这些信息对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值