滚雪球学MyBatis(09):MyBatis与Spring整合
前言
欢迎回到我们的MyBatis系列教程。在前几期中,我们详细介绍了MyBatis的基础配置、CRUD操作、动态SQL、高级查询、缓存机制和插件的使用。这些内容帮助我们全面掌握了MyBatis的使用方法。本期内容中,我们将探讨如何将MyBatis与Spring整合,以便利用Spring的依赖注入和事务管理功能,进一步提升我们的开发效率和代码可维护性。
9.1 使用Spring管理MyBatis
整合MyBatis与Spring可以让我们利用Spring的依赖注入(DI)和事务管理功能,简化开发过程。我们将通过配置文件的方式来实现这种整合。
1. 添加依赖
在pom.xml
中添加Spring和MyBatis的依赖:
<dependencies><!-- Spring 依赖 --><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><!-- MyBatis 依赖 --><dependency><groupId>org.mybatis.spring</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!-- MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency>
</dependencies>
2. 配置Spring和MyBatis
在src/main/resources
目录下创建Spring配置文件applicationContext.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 数据源配置 --><bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis_demo"/><property name="username" value="root"/><property name="password" value="password"/></bean><!-- MyBatis SqlSessionFactoryBean 配置 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!-- MyBatis Mapper 扫描配置 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean><!-- 事务管理器配置 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven/><!-- Spring 组件扫描 --><context:component-scan base-package="com.example"/>
</beans>
3. 配置MyBatis
在src/main/resources
目录下创建MyBatis配置文件mybatis-config.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/></settings><typeAliases><typeAlias alias="User" type="com.example.model.User"/></typeAliases><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>
9.2 使用Spring Boot整合MyBatis
Spring Boot简化了Spring和MyBatis的整合过程,通过自动配置和注解,我们可以快速搭建项目。
1. 创建Spring Boot项目
在pom.xml
中添加Spring Boot和MyBatis的依赖:
<dependencies><!-- Spring Boot 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MyBatis 依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><!-- MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
2. 配置文件
在src/main/resources
目录下创建应用程序配置文件application.properties
:
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_demo
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.type-aliases-package=com.example.model
mybatis.mapper-locations=classpath:com/example/mapper/*.xml
3. 创建Spring Boot应用程序
创建Spring Boot主应用程序类:
package com.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.mybatis.spring.annotation.MapperScan;@SpringBootApplication
@MapperScan("com.example.mapper")
public class MyBatisSpringBootApplication {public static void main(String[] args) {SpringApplication.run(MyBatisSpringBootApplication.class, args);}
}
示例:使用Spring管理MyBatis
1. 创建数据模型和Mapper接口
创建User
类和UserMapper
接口:
package com.example.model;public class User {private int id;private String name;private int age;// Getters and Setters
}
package com.example.mapper;import com.example.model.User;
import java.util.List;public interface UserMapper {List<User> getAllUsers();User getUserById(int id);void insertUser(User user);void updateUser(User user);void deleteUser(int id);
}
2. 创建服务层
创建UserService
接口和实现类:
package com.example.service;import com.example.model.User;
import java.util.List;public interface UserService {List<User> getAllUsers();User getUserById(int id);void insertUser(User user);void updateUser(User user);void deleteUser(int id);
}
package com.example.service.impl;import com.example.mapper.UserMapper;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getAllUsers() {return userMapper.getAllUsers();}@Overridepublic User getUserById(int id) {return userMapper.getUserById(id);}@Override@Transactionalpublic void insertUser(User user) {userMapper.insertUser(user);}@Override@Transactionalpublic void updateUser(User user) {userMapper.updateUser(user);}@Override@Transactionalpublic void deleteUser(int id) {userMapper.deleteUser(id);}
}
3. 创建控制器层
创建UserController
:
package com.example.controller;import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getAllUsers() {return userService.getAllUsers();}@GetMapping("/{id}")public User getUserById(@PathVariable int id) {return userService.getUserById(id);}@PostMappingpublic void insertUser(@RequestBody User user) {userService.insertUser(user);}@PutMappingpublic void updateUser(@RequestBody User user) {userService.updateUser(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable int id) {userService.deleteUser(id);}
}
总结
通过本期内容,我们学习了如何将MyBatis与Spring整合,从配置文件方式到Spring Boot整合,通过这些内容,我们可以利用Spring的依赖注入和事务管理功能,进一步简化我们的开发过程。在下一期中,我们将探讨MyBatis的进阶使用,包括多数据源配置、动态SQL生成器和MyBatis Generator的使用。
感谢大家的阅读,我们下期再见!