Spring与MyBatis的整合,主要是为了方便使用MyBatis提供的数据访问功能。Spring与MyBatis可以通过多种方式进行整合,最常用的方式是使用MyBatis-Spring框架提供的集成工具。
下面是一个基本的步骤:
- 引入依赖
在Maven项目的pom.xml中,我们需要引入MyBatis和MyBatis-Spring框架的依赖,如下:
<dependencies>
<!-- MyBatis核心依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.x.x</version>
</dependency>
<!-- MyBatis-Spring框架依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.x.x</version>
</dependency>
<!-- 数据库驱动依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
</dependencies>
- 配置数据源
在Spring的配置文件中配置数据源,这可以使用Spring的JDBC模板或者采用c3p0等第三方数据源库。
<!-- 数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
- 配置SqlSessionFactory
SqlSessionFactory是MyBatis的核心组件,它负责创建SqlSession,提供各种数据访问接口。SqlSessionFactory可以通过MyBatis-Spring框架提供的SqlSessionFactoryBean进行配置。
<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
在上述代码中,SqlSessionFactoryBean提供了DataSource和MyBatis配置文件的信息,它将这两个信息组合在一起,创建一个SqlSessionFactory的实例。
- 配置Mapper
在MyBatis-Spring框架中,我们使用MapperScannerConfigurer来扫描和注册Mapper接口。
<!-- 配置MyBatis Mapper的扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
</bean>
在上述代码中,我们将com.example.mapper包下的所有Mapper接口都注册成Spring Bean。这样,在需要使用数据访问的地方,我们就可以通过定义一个Mapper的属性来获取Bean,并直接进行数据访问。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(int id) {
return userMapper.selectByPrimaryKey(id);
}
// 其他方法省略
}
上述代码演示了如何使用Mapper接口进行数据访问。通过容器自动注入Mapper对象,我们可以在Service层中直接访问数据库。