您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。