设计模式_代理模式_在SqlSessionTemplate(Spring)中的应用

1.SqlSessionTemplate的构造函数,根据传入的SqlSessionFactory和ExecutorType创建一个Spring管理的SqlSession,并生成SqlSession的动态代理对象

 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 }

 

2.通过SqlSession的代理对象来执行相关的增删改查方法

 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 }

猜你喜欢

转载自www.cnblogs.com/rocker-pg/p/9699633.html
今日推荐