MyBatis是一个流行的持久层框架,这里将详细讲述如何在Spring容器中初始化MyBatis。
1.添加MyBatis和Spring依赖
首先,在项目的pom.xml中添加MyBatis和Spring依赖,如下所示:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
2.配置DataSource和SqlSessionFactory
在Spring中,我们可以使用Spring的DataSource来管理数据库连接。配置DataSource的方法如下:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
接下来,我们可以使用SqlSessionFactoryBean来创建SqlSessionFactory,并将其纳入Spring容器管理:
@Configuration
@MapperScan(basePackages = {"com.example.dao"})
public class MyBatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setTypeAliasesPackage("com.example.entity");
factoryBean.setDataSource(dataSource);
return factoryBean.getObject();
}
}
在这个配置中,我们通过设置mybatis.type-aliases-package属性来告诉MyBatis扫描哪个包以搜索Java Bean,同时将DataSource设置为SqlSessionFactory的属性,确保SqlSessionFactory具有连接到数据库的能力。
3.配置MyBatis Mapper扫描
在第二步中,我们已经配置了SqlSessionFactory。现在,我们需要将我们的Mapper接口与之关联。在这种情况下,我们将使用@MapperScan注释来扫描Mapper接口并将其映射到SqlSessionFactory。
@Configuration
@MapperScan(basePackages = {"com.example.dao"})
public class MyBatisConfig {
}
我们可以通过添加@Mapper注释来指示Spring在容器中注册Mapper:
@Mapper
public interface UserDao {
User findUserById(Long id);
}
这里提供一个完整的示例:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}
@Configuration
@MapperScan(basePackages = {"com.example.dao"})
public class MyBatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setTypeAliasesPackage("com.example.entity");
factoryBean.setDataSource(dataSource);
return factoryBean.getObject();
}
}
@Mapper
public interface UserDao {
User findUserById(Long id);
}
这里我们定义了一个UserDao接口,然后使用@Mapper注释来告诉Spring将它注册到容器中。
最后,我们需要在应用程序的配置文件中添加以下配置:
mybatis.mapper-locations=classpath:mapper/*.xml
在这个配置中,我们告诉MyBatis在classpath下的mapper目录中搜索Mapper文件。
现在,我们已经成功地将MyBatis集成到了Spring中。我们可以在Service层使用@Autowired自动装配UserDao接口,并使用它来查询数据库。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:理解 MyBatis 是如何在 Spring 容器中初始化的 - Python技术站