Mybatis解析数据源:创建、使用与解析
2023-09-05 09:38:46
从Mybatis的源代码出发:数据源配置解析
在《手写Mybatis》第四章中,我们重点关注了Mybatis解析XML配置文件的过程,但那是Mybatis解析XML配置文件的一个部分。除了那些能在XML配置文件中配置的部分之外,我们还有许多重要的配置,这些配置需要在程序启动时配置,如数据源配置。
数据源配置是由Environment配置指定的,Environment配置是配置Mybatis运行环境的基础配置,而数据源则是Environment中最重要的部分之一。数据源提供了连接数据库所需的信息,如URL、用户名、密码等。在Mybatis中,我们通过DataSourceFactory来创建数据源。
我们可以在Environment中指定一个DataSourceFactory,Mybatis会使用DataSourceFactory来创建数据源。DataSourceFactory有很多种实现,不同的实现会创建不同的数据源,如DruidDataSourceFactory会创建一个Druid数据源。
以下是DataSourceFactory的代码:
public interface DataSourceFactory {
void setProperties(Properties properties);
DataSource getDataSource();
}
DataSourceFactory只有一个方法getDataSource(),这个方法会返回一个数据源。
理解事务管理与连接池的启动、使用
事务管理与连接池是Mybatis的重要组成部分。事务管理可以保证多个操作要么全部成功,要么全部失败。连接池可以管理数据库连接,以避免每次执行SQL语句都去创建和销毁连接。
在Mybatis中,事务管理和连接池是通过Interceptor来实现的。Interceptor是一个拦截器,它可以拦截SQL语句的执行,并对SQL语句进行处理。
Mybatis中提供了两种内置的Interceptor,分别是TransactionInterceptor和JDBCTransactionInterceptor。TransactionInterceptor是基于JDBC的事务管理,而JDBCTransactionInterceptor是基于Spring的事务管理。
连接池的实现有很多种,如Druid连接池、HikariCP连接池等。在Mybatis中,我们可以通过配置Environment来指定连接池的实现。
应用数据源解析能力:实现DefaultSqlSession中执行SQL
在前面的章节中,我们已经实现了DefaultSqlSession的大部分功能,但是在执行SQL语句时,我们还没有真正地使用数据源。
现在,我们已经解析了数据源的配置,并创建了数据源,我们可以使用数据源来执行SQL语句了。
以下是DefaultSqlSession执行SQL语句的代码:
public List<Object> selectList(String statement) {
Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(statement);
List<Object> result = new ArrayList<>();
while (rs.next()) {
result.add(rs.getObject(1));
}
return result;
}
在这个代码中,我们首先从数据源中获取了一个连接,然后使用连接创建了一个Statement对象,然后使用Statement对象执行SQL语句,最后将结果集中的数据取出并返回。
总结
在《手写Mybatis》第五章中,我们解析了数据源的配置,并创建了数据源。我们还了解了事务管理和连接池的启动和使用。最后,我们实现了DefaultSqlSession中执行SQL语句的功能。这些都是Mybatis的重要组成部分,它们对于理解Mybatis的工作原理非常重要。