当我们需要将Spring和MyBatis结合在一起使用时,可以采用以下步骤来实现:
1. 项目搭建
首先我们需要搭建一个Spring项目,可以使用Spring Boot或者Spring MVC。如果使用Spring Boot,则可以选择自动配置MyBatis的starter,这样无需手动配置MyBatis。如果使用Spring MVC,则需要手动配置MyBatis。
2. 引入相关依赖
<!-- 引入Spring和MyBatis的核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 引入MyBatis的Spring integration依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.version}</version>
</dependency>
这里需要引入Spring和MyBatis的核心依赖,以及MyBatis的Spring integration依赖,版本号根据具体情况而定。
3. 配置数据源和事务管理器
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<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>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
这里定义了一个BasicDataSource作为数据源,以及一个DataSourceTransactionManager作为事务管理器,并使用tx:annotation-driven开启注解事务。
4. 配置SqlSessionFactory和MapperScannerConfigurer
<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.example.entity" />
</bean>
<!-- 配置MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
这里配置了SqlSessionFactoryBean和MapperScannerConfigurer,SqlSessionFactoryBean需要指定数据源,MapperScannerConfigurer需要指定Mapper接口的包名,并指定SqlSessionFactoryBean的名称。
示例一:使用MyBatis的注解方式进行操作
假设我们有一个User实体类和一个对应的UserDao接口,我们可以在UserDao中使用MyBatis的注解方式进行操作:
@Mapper
public interface UserDao {
@Select("SELECT * FROM tb_user WHERE id = #{id}")
User findById(Integer id);
@Insert("INSERT INTO tb_user(username, password) VALUES(#{username}, #{password})")
void save(User user);
@Update("UPDATE tb_user SET username = #{username}, password = #{password} WHERE id = #{id}")
void update(User user);
@Delete("DELETE FROM tb_user WHERE id = #{id}")
void delete(Integer id);
}
这里使用了@Mapper注解标注UserDao接口,并在接口中使用MyBatis的注解方式进行CRUD操作。
示例二:使用MyBatis的Mapper XML文件进行操作
除了注解方式,我们还可以使用Mapper XML文件来定义SQL语句,如下所示:
在resources目录下创建一个名为mapper的目录,并在mapper目录下创建一个名为UserMapper.xml的文件,文件内容如下:
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.UserDao">
<select id="findById" resultType="com.example.entity.User">
SELECT * FROM tb_user WHERE id = #{id}
</select>
<insert id="save" parameterType="com.example.entity.User">
INSERT INTO tb_user(username, password) VALUES(#{username}, #{password})
</insert>
<update id="update" parameterType="com.example.entity.User">
UPDATE tb_user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<delete id="delete" parameterType="java.lang.Integer">
DELETE FROM tb_user WHERE id = #{id}
</delete>
</mapper>
在UserDao中使用@Mapper注解,并使用@MapperScan注解扫描mapper包,如下所示:
@Mapper
public interface UserDao {
User findById(Integer id);
void save(User user);
void update(User user);
void delete(Integer id);
}
@SpringBootApplication
@MapperScan("com.example.mapper")
public class MybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisDemoApplication.class, args);
}
}
这里使用了@Mapper注解标注UserDao接口,并在接口中定义了CRUD方法,无需指定SQL语句。在启动类中使用@MapperScan注解扫描mapper包。
以上就是整合Spring和MyBatis的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Spring与MyBatis的整合的方法 - Python技术站