溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何整合Mybatis并使用通用mapper和PageHelper進行分頁

發布時間:2021-12-15 11:45:48 來源:億速云 閱讀:391 作者:小新 欄目:大數據
# 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>

三、基礎整合MyBatis

1. 數據庫配置

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

2. 實體類與Mapper接口

創建用戶實體類:

@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);
}

四、集成通用Mapper

1. 添加依賴

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>4.2.4</version>
</dependency>

2. 配置通用Mapper

修改啟動類:

@SpringBootApplication
@MapperScan(basePackages = "com.example.mapper", 
            markerInterface = MyMapper.class)
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3. 創建通用Mapper接口

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

4. 使用示例

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();
    }
}

五、集成PageHelper分頁

1. 添加依賴

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.3</version>
</dependency>

2. 基礎配置

application.yml添加:

pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

3. 分頁使用示例

@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));
    }
}

六、高級功能與最佳實踐

1. 自定義查詢+分頁

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);
}

2. 多表關聯查詢分頁

@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);

3. 性能優化建議

  1. 大數據量時使用PageHelper.startPage后緊跟查詢語句
  2. 復雜查詢考慮使用@SelectProvider動態SQL
  3. 合理配置pagehelper.reasonable參數

七、常見問題解決

1. 分頁失效可能原因

  • PageHelper.startPage()未緊鄰查詢語句
  • 線程池環境下線程復用導致ThreadLocal污染
  • 配置參數不正確

2. 通用Mapper常見問題

  • 實體類需要添加@Id注解標識主鍵
  • 字段名與數據庫列名需保持一致(或通過@Column指定)
  • 繼承Mapper接口時不要覆蓋原生方法

3. 事務管理

@Transactional
public void batchInsert(List<User> users) {
    users.forEach(userMapper::insert);
}

八、總結

本文詳細介紹了SpringBoot整合MyBatis的全流程,通過通用Mapper顯著減少了樣板代碼,配合PageHelper實現了優雅的分頁功能。關鍵點總結:

  1. 正確配置數據源和MyBatis
  2. 合理設計Mapper接口繼承關系
  3. 掌握PageHelper的啟動時機
  4. 注意事務邊界控制

完整示例代碼已上傳GitHub:項目地址

擴展閱讀建議: - MyBatis動態SQL深度應用 - Spring Data JPA對比分析 - 分布式環境下的分頁方案 “`

注:本文實際約1850字,可根據需要增減示例代碼部分調整篇幅。建議在實際開發中: 1. 添加Swagger接口文檔支持 2. 整合Lombok簡化實體類 3. 配置Druid數據源監控 4. 實現統一異常處理

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女