下面我将详细讲解"纯注解版Spring与Mybatis的整合过程"的完整攻略。
准备工作
-
首先,需要配置好Maven环境,以便引入所需的依赖。
-
其次,需要根据需要,配置好数据库环境。
整合Spring和Mybatis
第一步:引入Spring和Mybatis的依赖
<dependencies>
<!-- 引入Spring的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入Mybatis的依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.version}</version>
</dependency>
<!-- 引入数据库连接池的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 引入JDBC驱动的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
在这里,我们引入了Spring、Mybatis、mybatis-spring-boot-starter、Druid连接池和MySQL JDBC驱动的相关依赖。其中的版本号,可以根据实际情况自行调整。
第二步:配置数据源
这里我们使用Druid数据源,具体配置如下。
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 配置Druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 初始化时建立物理连接的个数
spring.datasource.initialSize=5
# 最小连接池数量
spring.datasource.minIdle=5
# 最大连接池数量
spring.datasource.maxActive=20
# 获取连接时最大等待时间,单位毫秒
spring.datasource.maxWait=60000
# 配置检查连接的语句
spring.datasource.validationQuery=select 1
# 申请连接时的测试语句
spring.datasource.testWhileIdle=true
# 申请连接时是否检查连接有效
spring.datasource.testOnBorrow=false
# 归还连接时是否检查连接有效
spring.datasource.testOnReturn=false
# 连接池内部保持持续有效的时间(单位为毫秒),超过时间则会被重置,防止假死状态出现,默认30分钟
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 连接池空闲连接检测时间间隔,单位为毫秒(默认为1分钟),在高并发场景下,如果网络通信繁忙,可以设置大一点,建议3分钟
spring.datasource.timeBetweenIdleTimeMillis=180000
# 连接状态监测,慢SQL记录
spring.datasource.filters=stat,wall
spring.datasource.logSlowSql=true
# 多数据源配置时,可以给数据源取别名,便于注入
spring.datasource.name=test-datasource
在这里,我们配置了一个名为test-datasource的Druid数据源,其中需要修改的是url、username和password,以及Spring的数据源属性(如initialSize、maxActive等),以适应你的实际情况。
第三步:配置Mybatis
@Configuration
@MapperScan(basePackages = "com.example.demo.dao", sqlSessionFactoryRef = "sqlSessionFactory")
public class MybatisConfig {
private static final String TYPE_ALIASES_PACKAGE = "com.example.demo.entity";
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource getDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// 配置Mybatis的核心配置文件mybatis-config.xml
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setConfigLocation(resolver.getResource("classpath:mybatis/mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
}
// 配置类型别名
bean.setTypeAliasesPackage(TYPE_ALIASES_PACKAGE);
// 配置Mybatis的Mapper文件
Resource[] mapperLocations = null;
try {
mapperLocations = resolver.getResources("classpath:mapper/*.xml");
} catch (IOException e) {
e.printStackTrace();
}
bean.setMapperLocations(mapperLocations);
return bean.getObject();
}
@Bean(name = "transactionManager")
public DataSourceTransactionManager getDataSourceTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
在这里,我们通过一个Java配置类来配置Mybatis。这个配置类指定了Mybatis的核心配置文件(mybatis-config.xml)的位置,以及Mapper文件的位置。同时,也设置了Mybatis的类型别名,并且在方法注解中指定了Mapper接口所在的包名。
第四步:配置Spring
@Configuration
@ComponentScan(basePackages = "com.example.demo")
public class SpringConfig {
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer() {
MapperScannerConfigurer configurer = new MapperScannerConfigurer();
configurer.setBasePackage("com.example.demo.dao");
configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
return configurer;
}
}
在这里,我们通过一个Java配置类来配置Spring。这个配置类指定了扫描的基础包名,并且指定了SqlSessionFactory的Bean名称。
示例说明
示例1:在Spring中使用Mybatis
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Long id) {
return userMapper.selectByPrimaryKey(id);
}
@Override
public List<User> getAllUsers() {
return userMapper.selectAll();
}
}
在这个示例中,我们注入了UserMapper接口,并且在getUserById()和getAllUsers()方法中使用了UserMapper来处理与数据库的CRUD操作。
示例2:在Mapper接口中使用注解
@Mapper
public interface UserMapper {
@Select("SELECT * FROM tb_user WHERE id = #{id}")
User selectByPrimaryKey(Long id);
@Select("SELECT * FROM tb_user")
List<User> selectAll();
}
在这个示例中,我们使用了@Select注解来指定SQL语句,这样就不必再使用XML文件来定义SQL语句。同时,使用@Mapper注解来表明这个接口是一个Mapper接口,Spring会自动将其注册为一个Bean,以便在其他地方使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:纯注解版spring与mybatis的整合过程 - Python技术站