在学习Spring的时候,我们经常说到AOP。然后举例的时候,经常会说,比如日志切面的切入,将日志功能织入到主体功能中,进行日志记录。今天,我们看一下MyBatis中使用动态代理织入记录日志的功能。
// SimpleExecutor类
@Override
public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
Statement stmt = null;
try {
Configuration configuration = ms.getConfiguration();
StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql);
//进行jdbc的connection建立,statement对象创建,参数赋值操作
// ms.getStatementLog() 这个对象中记录当前的日志级别,我们根据日志级别来判断是否需要做代理
stmt = prepareStatement(handler, ms.getStatementLog());
return handler.query(stmt, resultHandler);
} finally {
closeStatement(stmt);
}
}
private Statement prepareStatement(StatementHandler handler, Log statementLog) throws SQLException {
Statement stmt;
//获取连接对象
Connection