1 public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType,
2 PersistenceExceptionTranslator exceptionTranslator) {
3
4 notNull(sqlSessionFactory, "Property 'sqlSessionFactory' is required");
5 notNull(executorType, "Property 'executorType' is required");
6
7 this.sqlSessionFactory = sqlSessionFactory;
8 this.executorType = executorType;
9 this.exceptionTranslator = exceptionTranslator;
10 //这里使用了jdk的动态代理,为SqlSession创建了代理对象
11 this.sqlSessionProxy = (SqlSession) newProxyInstance(
12 SqlSessionFactory.class.getClassLoader(),
13 new Class[] { SqlSession.class },
14 new SqlSessionInterceptor());
15 }
1 @Override
2 public int insert(String statement) {
3 //通过SqlSessionTemplate构造函数中生成的SqlSession的动态代理对象来执行 insert 操作
4 return this.sqlSessionProxy.insert(statement);
5 }
6
7 @Override
8 public int delete(String statement) {
9 //通过SqlSessionTemplate构造函数中生成的SqlSession的动态代理对象来执行 delete 操作
10 return this.sqlSessionProxy.delete(statement);
11 }
12
13 @Override
14 public int update(String statement) {
15 //通过SqlSessionTemplate构造函数中生成的SqlSession的动态代理对象来执行 update 操作
16 return this.sqlSessionProxy.update(statement);
17 }
18
19 @Override
20 public <T> T selectOne(String statement, Object parameter) {
21 //通过SqlSessionTemplate构造函数中生成的SqlSession的动态代理对象来执行 selectOne 操作
22 return this.sqlSessionProxy.<T> selectOne(statement, parameter);
23 }