spring源码之mybatis实例化Mapper

在项目中使用jdbc的时候,可以通过下面这种方式进行配置

@ComponentScan("com.spring.batis")
@MapperScan("com.spring.batis.dao")
public class BatisConfig {


	@Bean
	public DataSource dataSource(){
		DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
		driverManagerDataSource.setDriverClassName("");
		driverManagerDataSource.setPassword("");
		driverManagerDataSource.setUsername("");
		driverManagerDataSource.setUrl("");
		return driverManagerDataSource;
	}

	@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception{
		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
		factoryBean.setDataSource(dataSource());
		return factoryBean.getObject();
	}

}

@Mapper
public interface TMapper {

	/**
	 * fetch data by rule id
	 *
	 * @param id rule id
	 * @return Result<Map>
	 */
	@Select("select * from t where id = ${id}")
	Map<String, String> queryMap(String id);
}

但是这样看的我们是一头雾水,不清楚一个Mapper类怎么就可以直接注入调用了。
于是可以这样,绕过spring框架的注解,直接通过mybitas来调用,这样的最终实现效果和上面是一样的。

@Test
	public void onlyBatis(){
		BatisConfig batisConfig = new BatisConfig();
		//获取数据源
		DataSource dataSource = batisConfig.dataSource();
		//实现事务等内容,先不用管
		JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();
		Environment development = new Environment("development", jdbcTransactionFactory, dataSource);
		Configuration configuration = new Configuration(development);
		
		
		configuration.addMapper(TMapper.class);
		SqlSessionFactory build = new SqlSessionFactoryBuilder().build(configuration);
		SqlSession sqlSession = build.openSession();
		
		//主要看这里如何直接通过接口获取一个对象
		TMapper mapper = sqlSession.getMapper(TMapper.class);
		Map<String, String> stringStringMap = mapper.queryMap("1");
	}

那么我们可以点进这个源码看一下,
sqlSession.getMapper() --> configuration.getMapper() --> mapperRegistry.getMapper() -->mapperProxyFactory.newInstance()
看到这里不就明白了,这就是动态代理的方式实现的呗,后面会再展开将jdbc的动态代理具体实现,里面会有如何解析sql,$符的替换,以及一级二级缓存等等。

总结:动态代理的方式实现Mapper

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木小同

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值