mybatis中configuration配置的用法
时间: 2023-04-06 13:01:18 浏览: 110
Mybatis中的configuration配置主要用于配置Mybatis的全局属性,例如数据库连接池、缓存等。可以通过配置文件或者Java代码的方式进行配置。其中包括了多个子标签,如properties、settings、typeAliases、typeHandlers、objectFactory、plugins等。通过这些配置,可以对Mybatis进行灵活的定制和优化。
相关问题
mybatis parseConfiguration的过程
mybatis parseConfiguration的过程是指mybatis解析配置文件的过程。在这个过程中,mybatis会读取配置文件中的信息,并将其解析为内存中的对象,以便后续使用。
具体来说,mybatis在解析配置文件时会创建一个Configuration对象,并通过调用XMLConfigBuilder类的parse()方法来解析配置文件。XMLConfigBuilder类会读取配置文件中的信息,并将其转换为Configuration对象中的各种属性。
例如,配置文件中的<environment>元素会被转换为Configuration对象的environment属性,<mappers>元素会被转换为Configuration对象的mapperRegistry属性,等等。
总之,mybatis parseConfiguration的过程就是将配置文件中的信息解析为内存中的对象的过程。
按照你说说的方法我实现了,但是报错了,报错信息是:Failed to bind properties under 'mybatis.configuration.interceptors[0]' to org.apache.ibatis.plugin.Interceptor: Property: mybatis.configuration.interceptors[0] Value: com.cvte.utils.interceptor.SqlStatsInterceptor Origin: class path resource [application.yml]:20:9 Reason: No converter found capable of converting from type [java.lang.String] to type [org.apache.ibatis.plugin.Interceptor] Action: Update your application's configuration
根据报错信息,可以看出问题出在将拦截器类注册为 Bean 后,将其添加到 MyBatis 的拦截器列表中时出现了类型转换问题。具体来说,Spring Framework 将拦截器类的类名作为字符串添加到了 `mybatis.configuration.interceptors[0]` 属性中,而 MyBatis 在读取该属性时期望得到 `org.apache.ibatis.plugin.Interceptor` 类型的对象。
解决这个问题的方法是,将拦截器类的实例注入到 `SqlSessionFactory` 中,在创建 `SqlSessionFactory` 时将其添加到 MyBatis 的拦截器列表中。具体的代码如下:
```java
@Configuration
public class MyBatisConfig {
@Autowired
private SqlStatsInterceptor sqlStatsInterceptor;
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 注册拦截器
Interceptor[] interceptors = { sqlStatsInterceptor };
sessionFactory.setPlugins(interceptors);
return sessionFactory.getObject();
}
}
```
在这段代码中,我们将 `SqlStatsInterceptor` 类的实例 `sqlStatsInterceptor` 注入到 `MyBatisConfig` 配置类中,并在创建 `SqlSessionFactory` 时将其添加到 MyBatis 的拦截器列表中。
注意,我们使用了 `SqlSessionFactoryBean` 类而不是 `SqlSessionFactory` 类来创建 `SqlSessionFactory` 。这是因为 `SqlSessionFactoryBean` 类可以方便地支持 Spring Framework 的自动配置和依赖注入机制,而 `SqlSessionFactory` 类则不支持。
另外,如果你的应用程序使用的是 MyBatis 3.5.0 及以上版本,你也可以使用 MyBatis 提供的 `@Interceptors` 注解来将拦截器类注册到 MyBatis 中,这样就可以避免使用 `SqlSessionFactory` 和 `SqlSessionFactoryBean` 。具体的代码如下:
```java
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
@Component
public class SqlStatsInterceptor implements Interceptor {
// 拦截器逻辑代码
}
@Configuration
public class MyBatisConfig {
@Autowired
private SqlStatsInterceptor sqlStatsInterceptor;
@Bean
public Configuration mybatisConfig() {
Configuration config = new Configuration();
// 注册拦截器
config.addInterceptor(sqlStatsInterceptor);
return config;
}
}
```
在这段代码中,我们使用了 `Configuration` 类来创建 MyBatis 的配置对象,并使用 `addInterceptor` 方法将拦截器类的实例 `sqlStatsInterceptor` 添加到 MyBatis 的拦截器列表中。这样,当 MyBatis 创建 `SqlSession` 时,就会自动应用该拦截器。
阅读全文