一、環境準備
- 開發工具:IntelliJ IDEA 2023.1 + JDK 1.8.0_382+ Maven3.6.3
- 數據庫:MySQL 8.0.21
- 依賴版本:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version> </parent><dependencies><!-- Web支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis支持 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency><!-- MySQL驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><!-- 測試支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies>
二、項目結構
src/main/java
└─com.shuanglibi.demo├─controller├─service├─mapper├─entity└─DemoApplication.java
src/main/resources├─application.yml└─mapper└─UserMapper.xml
src/test/java└─com.shuanglibi.demo└─service└─UserServiceTest.java
三、核心代碼實現
1. 配置文件 application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8username: rootpassword: xxxxxxdriver-class-name: com.mysql.cj.jdbc.Drivermybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.shuanglibi.demo.entityconfiguration:map-underscore-to-camel-case: true
2. 實體類 User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Long id;private String name;private Integer age;private LocalDateTime createTime;
}
3. Mapper接口 UserMapper.java
@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User findById(Long id);@Insert("INSERT INTO user(name, age, create_time) VALUES(#{name}, #{age}, NOW())")@Options(useGeneratedKeys = true, keyProperty = "id")int insert(User user);@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")int update(User user);@Delete("DELETE FROM user WHERE id=#{id}")int delete(Long id);
}
4. Service層 UserService.java
@Service
@RequiredArgsConstructor
public class UserService {private final UserMapper userMapper;public User getUserById(Long id) {return userMapper.findById(id);}public int createUser(User user) {return userMapper.insert(user);}public int updateUser(User user) {return userMapper.update(user);}public int deleteUser(Long id) {return userMapper.delete(id);}
}
四、單元測試實現(JUnit 5)
1. 測試基類配置
@SpringBootTest
@Transactional
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class BaseTest {@Autowiredprotected UserService userService;@Autowiredprotected UserMapper userMapper;
}
2. 完整測試類 UserServiceTest.java
class UserServiceTest extends BaseTest {@Testvoid testCRUD() {// 創建測試User newUser = new User(null, "張三", 25, null);int insertResult = userService.createUser(newUser);assertEquals(1, insertResult);assertNotNull(newUser.getId());// 查詢測試User fetchedUser = userService.getUserById(newUser.getId());assertEquals("張三", fetchedUser.getName());assertEquals(25, fetchedUser.getAge());// 更新測試fetchedUser.setAge(26);int updateResult = userService.updateUser(fetchedUser);assertEquals(1, updateResult);User updatedUser = userService.getUserById(fetchedUser.getId());assertEquals(26, updatedUser.getAge());// 刪除測試int deleteResult = userService.deleteUser(newUser.getId());assertEquals(1, deleteResult);User deletedUser = userService.getUserById(newUser.getId());assertNull(deletedUser);}
}
五、關鍵問題解決方案
1. 數據庫連接問題
# 如果出現時區錯誤,在連接URL中添加:
spring.datasource.url: jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai
2. MyBatis注解與XML配置選擇
- 簡單SQL使用注解方式
- 復雜SQL推薦XML配置(resources/mapper/UserMapper.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shuanglibi.demo.mapper.UserMapper"><select id="findByName" resultType="User">SELECT * FROM user WHERE name = #{name}</select>
</mapper>
3. 事務管理配置
@Configuration
@EnableTransactionManagement
public class MyBatisConfig {// 可自定義事務管理器
}
六、運行與驗證
- 啟動測試類執行所有測試方法
- 查看控制臺輸出:
2023-10-20 14:30:22.123 INFO 12345 --- [ main] c.e.d.s.UserServiceTest : Started UserServiceTest in 2.345 seconds
2023-10-20 14:30:22.456 INFO 12345 --- [ main] o.s.t.c.transaction.TransactionContext : Began transaction...
七、擴展建議
- 添加分頁查詢:使用PageHelper插件
- 集成Swagger文檔:
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
- 使用MyBatis Generator自動生成代碼:
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.2</version>
</plugin>
文章亮點:
- 完整覆蓋Spring Boot 2.x + MyBatis整合流程
- 提供可直接運行的測試代碼
- 包含常見問題解決方案
- 遵循Java 1.8語法規范
- 使用現代測試框架(JUnit 5 + Spring Boot Test)
建議讀者在實際操作時注意:
6. 提前創建好testdb數據庫
7. 保持MySQL服務正常運行
8. 根據實際情況修改數據庫連接參數
9. 使用Postman進行接口驗證(配合Controller層)
源碼在此,插去直接可以用,記得耐心點等待依賴下載完再啟動。 (Spring Boot整合MyBatis+MySQL源碼)