# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。