文章目录
配置流程
1、导入相关依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.18</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.5.3.1</version>
</dependency>
2、在配置文件中配置数据库信息
test:数据库配置的名称
username:数据库账号
password:数据库密码
jdbc-url:数据库地址(不能使用jdbc:)
driver-class-name:驱动
type:数据库连接池
datasource:
test:
username: root
password: root
jdbc-url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
3、自定义数据源注解类TestDataSource
自定义直接类用于在mapper层标记该mapper所使用到的数据源
package com.wwl.config;
import java.lang.annotation.*;
/**
* @Target({ElementType.TYPE}) 表示该注解只在类上生效
* @Retention(RetentionPolicy.RUNTIME) 表示该注解在运行时有效
* @Documented 该注解会被包含在 Javadoc 中产生的文档中
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TestDataSource {
}
4、编写配置类TestDataSourceConfig
@MapperScan包扫描,指定sqlSessionTemplateRef
annotationClass指定扫描mapper上面的TestDataSource注解
@MapperScan(basePackages = "com.wwl.mapper.**",annotationClass = TestDataSource.class,sqlSessionFactoryRef = "testSqlSessionFactory")
指定xml的位置
Resource[] resources = resolver.getResources("classpath:com/wwl/mapper/**/sql/*.xml");
TestDataSourceConfig配置类
@Configuration
@MapperScan(basePackages = "com.wwl.mapper.**",annotationClass = TestDataSource.class,sqlSessionFactoryRef = "testSqlSessionFactory")
public class TestDataSourceConfig {
@ConfigurationProperties(prefix = "datasource.test")
@Bean(name = "testDataSource")
public DataSource testDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "testSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setSqlInjector(new DefaultSqlInjector());
sqlSessionFactoryBean.setGlobalConfig(globalConfig);
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
Interceptor[] plugins = {interceptor};
sqlSessionFactoryBean.setPlugins(plugins);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:com/wwl/mapper/**/sql/*.xml");
sqlSessionFactoryBean.setMapperLocations(resources);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCallSettersOnNulls(true);
sqlSessionFactoryBean.setConfiguration(configuration);
return sqlSessionFactoryBean.getObject();
}
@Bean("testSqlSessionTemplate")
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("testSqlSessionFactory") SqlSessionFactory sessionFactory) {
return new SqlSessionTemplate(sessionFactory);
}
}
5、在mapper上使用注解
以上配置完成以后就可以使用我们自定义的注解,来指定该mapper的数据源
@TestDataSource
public interface LoginMapper {
int getUserNum();
}
常见的问题
问题1
java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
解决方案
在高版本中要将数据库配置中的url修改为jdbc-url
jdbc-url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true@characterEncoding=utf-8
问题2
spring框架默认的xml文件在编译的时候被忽略了,在编译期不会报错,调用接口的时候会提示找不到mapper中的方法。
解决方案
在pom.xml文件中添加如下配置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<excludes>
<exclude>**/*.yaml</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</build>
例如:
在语言模型中,编码器和解码器都是由一个个的 Transformer 组件拼接在一起形成的。