手写自己的MyBatis框架-SqlSession

我们已经分析了MeBatis 的主要对象和操作流程,应该从哪里入手?

当我们在psvm 操作的时候,第一个需要的对象是SqlSession。所以我们从应用层的接口SqlSession 入手。

那么我们先来创建一个package,它是我们手写的MeBatis ,我们建一个包叫mebatis。

首先我们创建一个自己的SqlSession,叫SqlSession。

根据我们刚才总结的流程图,SqlSession 需要有一个获取代理对象的方法,那么这个代理对象是从哪里获取到的呢?是从我们的配置类里面获取到的,因为配置类里面有接口和它要产生的代理类的对应关系。

所以,我们要先持有一个Configuration 对象,叫GPConfiguration,我们也创建这个类。除了获取代理对象之外,Configuration 里面还存储了我们的接口方法(也就是statementId)和SQL 语句的绑定关系。

第二个,我们在SqlSession 中定义的操作数据库的方法,最后都会调用Executor去操作数据库,所以我们还要持有一个Executor 对象,叫Executor,我们也创建它。

// SqlSession.java
private Configuration configuration;
private Executor executor;

除了这两个属性之外,我们还要定义SqlSession 的行为,也就是它的主要的方法。

第一个方法是查询方法,selectOne(),由于它可以返回任意类型,我们把返回值定义成<T> T 泛型。selectOne()有两个参数,一个是String 类型的statementId,我们会根据它找到SQL 语句。一个是Object 类型的parameter 参数(可以是Integer 也可以是String 等等,任意类型),用来填充SQL 里面的占位符。

它会调用Executor 的query()方法,所以我们创建Executor 类,传入这两个参数,一样返回一个泛型。Executor 里面要传入SQL,但是我们还没拿到,先用statementId代替。

// SqlSession.java
public <T> T selectOne(String statementId, Object parameter){
	String sql = statementId; // 先用statementId 代替SQL
	return executor.query(sql, parameter);
}
// Executor.java
public <T> T query(String sql, Object paramater ) {
	return null;
}

第二个方法是获取代理对象的方法,我们通过这种方式去避免了statementId 的硬编码。

我们在SqlSession 中创建一个getMapper()的方法,由于可以返回任意类型的代理类,所以我们把返回值也定义成泛型<T> T。我们是根据接口类型获取到代理对象的,所以传入参数要用类型Class。

// SqlSession.java
public <T> T getMapper(Class clazz){
	return null;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值