下面是MyBatis和Spring整合的完整攻略及示例。
一. 整合原理
MyBatis是一个独立的持久层框架,其对Spring并不依赖。然而在实际的开发中,我们常常需要将MyBatis与Spring整合在一起使用。
整合的方式一般有两种:
- 将MyBatis工厂交由Spring管理。这样做的好处是Spring可以管理MyBatis的生命周期,保证MyBatis的使用是线程安全的。
- 使用Spring的AOP技术对MyBatis进行事务管理。这样做的好处是能够让MyBatis与其他数据访问层统一使用同一个事务管理器,保证事务的一致性。
二. 整合步骤
1. 引入依赖
首先,在pom.xml中引入MyBatis和Spring的依赖,具体可以根据需要自行添加版本号:
<!-- MyBatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- MyBatis-Spring依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- Spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.9</version>
</dependency>
2. 编写MyBatis配置文件
编写MyBatis的配置文件,其中要注意将数据源引用Spring的DataSource,例如:
<configuration>
<typeAliases>
<typeAlias alias="User" type="com.example.User"/>
</typeAliases>
<mappers>
<mapper resource="com/example/UserMapper.xml"/>
</mappers>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
3. 配置Spring
在Spring的配置文件中,需要配置以下内容:
1) 配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
2) 配置SqlSession工厂
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
3) 配置Mapper扫描器
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
</bean>
4. 使用Spring的声明式事务管理
只需要在Spring的配置文件中添加以下配置即可开启声明式的事务管理:
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
完成以上步骤后,即可使用MyBatis和Spring进行整合开发。
三. 示例
这里提供两个简单的示例,演示如何使用整合后的MyBatis和Spring进行数据访问。
1. 查询
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Integer id) {
return userMapper.selectByPrimaryKey(id);
}
}
@Repository
public interface UserMapper {
User selectByPrimaryKey(Integer id);
}
首先,在Spring的配置文件中启用Mapper扫描器:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
</bean>
然后在UserMapper接口中定义SQL语句:
<select id="selectByPrimaryKey" parameterType="java.lang.Integer"
resultMap="com.example.UserMapper.UserResult">
select * from user where id=#{id}
</select>
<resultMap type="com.example.User" id="UserResult">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
最后在UserService中使用UserMapper进行数据访问:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Integer id) {
return userMapper.selectByPrimaryKey(id);
}
}
2. 添加事务
在需要添加事务的方法上添加@Transactional注解,例如:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void saveUser(User user) {
userMapper.insert(user);
}
}
@Repository
public interface UserMapper {
void insert(User user);
}
这里需要在Spring配置文件中配置事务管理器:
<tx:annotation-driven transaction-manager="txManager" />
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
完成以上操作后,即可使用整合后的MyBatis和Spring进行数据访问,并且能够使用Spring的声明式事务管理来保证事务的一致性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis 与 Spring 的完美整合方法 - Python技术站