spring
spring整合Mybatis
依赖
父工程
<packaging>pom</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>6.2.5</spring.version>
<lombok.version>1.18.38</lombok.version>
<aspectjweaver.version>1.9.23</aspectjweaver.version>
<mysql.version>9.2.0</mysql.version>
<druid.version>1.2.24</druid.version>
<mybatis.version>3.5.19</mybatis.version>
<log4j.version>2.24.3</log4j.version>
<junit5.version>5.12.2</junit5.version>
</properties>
<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 测试框架 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- MySQL 驱动 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- druid 数据连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>配置
连接信息 jdbc.properties
# 数据库连接信息
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456
# Druid 连接池配置
# 初始化连接数:连接池启动时创建的初始连接数量
druid.initialSize=5
# 最小空闲连接数:连接池保持的最小空闲连接数量
druid.minIdle=5
# 最大活跃连接数:连接池能创建的最大连接数(包括正在使用和空闲的连接)
druid.maxActive=20
# 最大等待时间(毫秒):当没有可用连接时,请求获取连接的最大等待时间
druid.maxWait=60000
# 空闲连接检测周期(毫秒):定期检测空闲连接的间隔时间
druid.timeBetweenEvictionRunsMillis=60000
# 最小可驱逐空闲时间(毫秒):连接空闲超过此时间将被标记为可驱逐(可能被关闭)
druid.minEvictableIdleTimeMillis=300000
# 检测空闲连接时,验证连接是否有效(推荐开启)
druid.testWhileIdle=true
# 申请连接时是否验证连接有效性(高并发场景建议关闭,避免性能损耗)
druid.testOnBorrow=false
# 归还连接时是否验证连接有效性(推荐关闭,依赖 testWhileIdle 定期检测)
druid.testOnReturn=false
# 连接有效性验证 SQL(需根据数据库类型调整,如 MySQL 用 SELECT 1)
druid.validationQuery=SELECT 1mybatis配置类MybatisConfig.java
@Configuration
@PropertySource("classpath:jdbc.properties")
@MapperScan("com.dream.mapper")
@EnableTransactionManagement
public class MybatisConfig {
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${druid.initialSize}")
private int initialSize;
@Value("${druid.minIdle}")
private int minIdle;
@Value("${druid.maxActive}")
private int maxActive;
@Value("${druid.maxWait}")
private int maxWait;
@Value("${druid.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis;
@Value("${druid.minEvictableIdleTimeMillis}")
private long minEvictableIdleTimeMillis;
@Value("${druid.testWhileIdle}")
private boolean testWhileIdle;
@Value("${druid.testOnBorrow}")
private boolean testOnBorrow;
@Value("${druid.testOnReturn}")
private boolean testOnReturn;
@Value("${druid.validationQuery}")
private String validationQuery;
/**
* 配置数据源
*/
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
// Druid连接池配置
dataSource.setInitialSize(initialSize);
dataSource.setMinIdle(minIdle);
dataSource.setMaxActive(maxActive);
dataSource.setMaxWait(maxWait);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setValidationQuery(validationQuery);
return dataSource;
}
/**
* 配置SqlSessionFactory
*/
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
// 配置类型别名
sqlSessionFactoryBean.setTypeAliasesPackage("com.dream.domain");
// 配置Mapper XML文件位置
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return sqlSessionFactoryBean.getObject();
}
/**
* 配置事务管理器
*/
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}spring配置SpringConfig.java
@Configuration
@ComponentScan("com.dream")
@Import({MybatisConfig.class})
public class SpringConfig {
} 测试
@Slf4j
@SpringJUnitConfig(SpringConfig.class)
public class ApiTest {
}