Récemment mis à jour la version de springboot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${
spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${
mybatis-spring-boot-starter.version}</version>
</dependency>
<spring-boot.version>2.3.9.RELEASE</spring-boot.version>
<mybatis-spring-boot-starter.version>2.2.0</mybatis-spring-boot-starter.version>
Source de données personnalisée et SqlSessionFactoryBean
@Bean("master")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource master() {
DruidDataSource druidDataSourceClaims = new DruidDataSource();
List<Filter> filterList=new ArrayList<>();
filterList.add(wallFilter());
druidDataSourceClaims.setProxyFilters(filterList);
druidDataSourceClaims.setUsername(username);
druidDataSourceClaims.setUrl(url);
druidDataSourceClaims.setPassword(password);
return druidDataSourceClaims;
}
@Bean
public WallFilter wallFilter(){
WallFilter wallFilter=new WallFilter();
wallFilter.setConfig(wallConfig());
return wallFilter;
}
@Bean
public WallConfig wallConfig(){
WallConfig config =new WallConfig();
config.setMultiStatementAllow(true);//允许一次执行多条语句
config.setNoneBaseStatementAllow(true);//允许非基本语句的其他语句
return config;
}
@Bean("sqlSessionFactoryBean")
@ConfigurationProperties(prefix = "mybatis")
public SqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(master());
return sqlSessionFactoryBean;
}
fichier de configuration
mybatis:
type-aliases-package: com.xxxxx.xxxxx.entity
mapperLocations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
erreur de démarrage
Caused by: java.io.FileNotFoundException: class path resource [mapper/*.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180) ~[spring-core-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:609) ~[mybatis-spring-2.0.6.jar:2.0.6]
... 59 common frames omitted
Après vérification du code source
MyBatis-Spring-Boot-Starter va :
Détecter automatiquement une DataSource existante
Créer et enregistrer une instance d'une SqlSessionFactory en passant cette DataSource comme entrée à l'aide du SqlSessionFactoryBean
Créer et enregistrer une instance d'une SqlSessionTemplate issue de la SqlSessionFactory
Analyser automatiquement vos mappeurs , liez-les au SqlSessionTemplate et enregistrez-les dans le contexte Spring afin qu'ils puissent être injectés dans vos beans
L'anglais est trop mauvais, après Google Translate
MyBatis-Spring-Boot-Starter va :
Détecter automatiquement DataSource existant
va créer et enregistrer une instance de transmission SqlSessionFactory DataSource comme entrée en utilisant SqlSessionFactoryBean
va créer et enregistrer une instance de SqlSessionTemplate pour sortir SqlSessionFactory
scanne automatiquement vos mappeurs et les relie à SqlSessionTemplate et les enregistre avec le contexte Spring afin qu'ils puissent être injectés dans vos beans
Source de données unique, MyBatis-Spring-Boot-Starter traitera automatiquement la
solution SqlSessionFactoryBean
1. Supprimez le SqlSessionFactoryBean personnalisé
2. Paramètre manuel setMapperLocations
@Bean
@ConfigurationProperties(prefix = "mybatis")
public SqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(master());
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return sqlSessionFactoryBean;
}
problème résolu