# SpringBoot如何整合Mybatis并使用通用mapper和PageHelper進行分頁
## 一、前言
在Java企業級應用開發中,SpringBoot+MyBatis的組合因其高效便捷的特性被廣泛使用。本文將詳細介紹如何在SpringBoot項目中整合MyBatis,并配合通用Mapper簡化單表操作,使用PageHelper實現優雅的分頁功能。通過本文的學習,您將掌握:
1. SpringBoot與MyBatis的基礎整合
2. 通用Mapper的配置與使用技巧
3. PageHelper分頁插件的實戰應用
4. 常見問題解決方案
## 二、環境準備
### 1. 開發環境要求
- JDK 1.8+
- Maven 3.6+
- SpringBoot 2.7.x
- MySQL 5.7+
### 2. 創建SpringBoot項目
通過Spring Initializr創建項目時勾選:
- Spring Web
- MyBatis Framework
- MySQL Driver
或手動添加依賴:
```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
application.yml
配置示例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.entity
創建用戶實體類:
@Data
public class User {
private Long id;
private String username;
private String password;
private Integer age;
private Date createTime;
}
傳統Mapper接口:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);
@Insert("INSERT INTO user(username,password) VALUES(#{username},#{password})")
int insert(User user);
}
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>4.2.4</version>
</dependency>
修改啟動類:
@SpringBootApplication
@MapperScan(basePackages = "com.example.mapper",
markerInterface = MyMapper.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
public interface UserMapper extends MyMapper<User> {
// 無需編寫基礎CRUD方法
}
// 服務層調用示例
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getById(Long id) {
return userMapper.selectByPrimaryKey(id);
}
public List<User> selectAll() {
return userMapper.selectAll();
}
}
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.3</version>
</dependency>
application.yml
添加:
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
@Service
public class UserService {
public PageInfo<User> getUsersByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectAll();
return new PageInfo<>(users);
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public Result list(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize) {
return Result.success(userService.getUsersByPage(pageNum, pageSize));
}
}
public PageInfo<User> searchUsers(String keyword, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
Example example = new Example(User.class);
example.createCriteria().andLike("username", "%"+keyword+"%");
List<User> users = userMapper.selectByExample(example);
return new PageInfo<>(users);
}
@Select("SELECT u.*, d.dept_name FROM user u LEFT JOIN department d ON u.dept_id=d.id")
Page<User> selectWithDept(Page<User> page);
// 調用方式
Page<User> page = PageHelper.startPage(1, 10);
userMapper.selectWithDept(page);
PageHelper.startPage
后緊跟查詢語句@SelectProvider
動態SQLpagehelper.reasonable
參數@Id
注解標識主鍵@Column
指定)@Transactional
public void batchInsert(List<User> users) {
users.forEach(userMapper::insert);
}
本文詳細介紹了SpringBoot整合MyBatis的全流程,通過通用Mapper顯著減少了樣板代碼,配合PageHelper實現了優雅的分頁功能。關鍵點總結:
完整示例代碼已上傳GitHub:項目地址
擴展閱讀建議: - MyBatis動態SQL深度應用 - Spring Data JPA對比分析 - 分布式環境下的分頁方案 “`
注:本文實際約1850字,可根據需要增減示例代碼部分調整篇幅。建議在實際開發中: 1. 添加Swagger接口文檔支持 2. 整合Lombok簡化實體類 3. 配置Druid數據源監控 4. 實現統一異常處理
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。