ShardingJdbc、Spring和mybatis结合的整个源码执行流程解析

一.背景知识

1.Sharding jdbc

当当提供的轻量级java框架,通过客户端进行分库分表策略执行等操作,直连到数据库
http://shardingsphere.io/document/current/cn/overview/

2.Spring

项目给于spring提供的事务管理和springBoot带来的快速启动

3.Mybatis和Mybatis-Spring

使用mybatis来执行ORM的相关操作,大大减少了单纯使用jdbc带来的大量映射的工作量
http://www.mybatis.org/mybatis-3/zh/index.html
http://www.mybatis.org/spring/zh/

二.通过代码来学习

1.前置代码准备

首先来看一段我们日常经常会写的代码
Controller:

@RequestMapping
	public String insertUser(){
		User user = new User();
		user.setName("hello test spring transactional");
		user.setUserId(0L);
		userService.save(user);
		return "success";
	}

Service:

@Override
	@Transactional
	public User save(User domain) {
		return dao.insertSelective(domain);
	}

Dao:

public User insertSelective(User user){
		myBatisMapper.insertSelective(user);
		return user;
	}

这是三个非常常见的一个MVC模式下的简单insert操作代码,现在就由这个开始我们探索Sharding、Spring和Mybatis整个执行流程的原理

2.执行流程

2.1Spring的DataSourceTransactionManager

众所周知,我们可以使用注解@Transactional非常简便的为DML操作加上事务的管理,我们的第一步也是从DataSourceTransactionManager这里开始讲起,先看看这个类的几个关键方法(篇幅问题只截取里面较为关键的代码):
(1)doBegin:

DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;
	Connection con = null;
	if (!txObject.hasConnectionHolder() ||
		txObject.getConnectionHolder().isSynchronizedWithTransaction()) {
		Connection newCon = obtainDataSource().getConnection();
		if (logger.isDebugEnabled()) {
			logger.debug("Acquired Connection [" + newCon + "] for JDBC transaction");
		}
		txObject.setConnectionHolder(new ConnectionHolder(newCon), true);
	}
	
    txObject.getConnectionHolder().setSynchronizedWithTransaction(true);
	con = txObject.getConnectionHolder().getConnection();

	Int
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值