一、技术选型与整合原理
在Java生态中,Spring Boot 3作为新一代微服务框架,通过自动配置机制大幅简化开发流程。MyBatis作为持久层框架,凭借其灵活的SQL映射特性,成为数据库操作的首选方案。二者整合的核心在于:
- 自动配置机制:Spring Boot通过
spring-boot-starter-data-mybatis依赖自动注入SqlSessionFactory - 注解驱动开发:使用
@MapperScan实现接口扫描,替代传统XML配置 - 事务管理:通过
@Transactional注解实现声明式事务控制
典型项目结构如下:
src/├── main/│ ├── java/│ │ └── com/example/│ │ ├── config/ # 配置类│ │ ├── controller/ # 控制器层│ │ ├── service/ # 业务逻辑层│ │ ├── mapper/ # 数据访问层│ │ └── entity/ # 实体类│ └── resources/│ ├── mapper/ # SQL映射文件│ └── application.yml # 配置文件
二、环境搭建与依赖配置
2.1 基础依赖配置
在pom.xml中添加核心依赖:
<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis Spring Boot Starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!-- 数据库驱动(以MySQL为例) --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency></dependencies>
2.2 数据库配置
在application.yml中配置数据源:
spring:datasource:url: jdbc:mysql://localhost:3306/demo_db?useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.example.entityconfiguration:map-underscore-to-camel-case: true
三、核心功能实现
3.1 实体类设计
以用户管理为例,创建User实体类:
@Datapublic class User {private Long id;private String username;private String email;private LocalDateTime createTime;// 省略getter/setter}
3.2 Mapper接口开发
创建UserMapper接口,定义基础CRUD方法:
@Mapperpublic interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User selectById(Long id);@Insert("INSERT INTO user(username, email) VALUES(#{username}, #{email})")@Options(useGeneratedKeys = true, keyProperty = "id")int insert(User user);@Update("UPDATE user SET username=#{username}, email=#{email} WHERE id=#{id}")int update(User user);@Delete("DELETE FROM user WHERE id=#{id}")int delete(Long id);}
3.3 动态SQL实现
对于复杂查询场景,使用XML映射文件实现动态SQL:
<!-- UserMapper.xml --><mapper namespace="com.example.mapper.UserMapper"><select id="selectByCondition" resultType="User">SELECT * FROM user<where><if test="username != null">AND username LIKE CONCAT('%', #{username}, '%')</if><if test="email != null">AND email = #{email}</if></where>ORDER BY create_time DESC</select></mapper>
3.4 事务管理实践
在Service层使用@Transactional注解控制事务:
@Service@RequiredArgsConstructorpublic class UserService {private final UserMapper userMapper;@Transactionalpublic void batchInsert(List<User> users) {users.forEach(userMapper::insert);// 若抛出异常,所有操作将回滚}}
四、高级特性应用
4.1 分页查询实现
集成分页插件(以PageHelper为例):
-
添加依赖:
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></dependency>
-
使用示例:
@GetMapping("/page")public PageInfo<User> getPage(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "10") int pageSize) {PageHelper.startPage(pageNum, pageSize);List<User> users = userMapper.selectAll();return new PageInfo<>(users);}
4.2 多数据源配置
对于需要连接多个数据库的场景:
@Configurationpublic class DataSourceConfig {@Bean@ConfigurationProperties("spring.datasource.primary")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}@Bean@ConfigurationProperties("spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}@Beanpublic SqlSessionFactory primarySqlSessionFactory(DataSource primaryDataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(primaryDataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/primary/*.xml"));return bean.getObject();}}
五、调试与优化技巧
-
SQL日志监控:在配置文件中开启SQL日志
logging:level:com.example.mapper: debug
-
性能优化建议:
- 使用
@CacheNamespace实现二级缓存 - 对频繁查询的字段添加索引
- 避免N+1查询问题,使用
<association>和<collection>进行关联查询
- 使用
-
常见问题排查:
Invalid bound statement错误:检查Mapper接口与XML文件的namespace是否一致Table doesn't exist错误:确认数据库表名与实体类注解配置
六、完整项目示例
GitHub示例仓库(中立化描述):某代码托管平台提供完整项目模板,包含以下特性:
- 基于Spring Boot 3.2.0 + MyBatis 3.5.13
- 集成Swagger API文档
- 包含单元测试用例
- 提供Docker部署脚本
通过本文的实践指导,开发者可以快速掌握Spring Boot与MyBatis的整合开发技巧,构建出高效稳定的数据库操作层。对于毕业设计项目,建议在此基础上扩展权限管理、日志记录等企业级功能模块。