SpringBoot + MyBatis-Plus 快速开发实战:从环境搭建到权限控制完整指南
·
一、前言
在Web应用开发课程中,掌握一套高效、规范的开发流程至关重要。本文将带你从零开始,使用SpringBoot + MyBatis-Plus技术栈,完整实现一个具有权限管理功能的Web应用。本教程适合有一定Java基础的同学,我将详细讲解每个关键步骤并提供完整的代码示例。
二、开发环境配置(JDK + Maven + IDEA)
2.1 JDK安装与配置
bash
# 下载JDK 11(LTS版本) # 配置环境变量 JAVA_HOME = C:\Program Files\Java\jdk-11.0.15 PATH = %JAVA_HOME%\bin
2.2 Maven配置优化
创建或修改 ~/.m2/settings.xml:
xml
<settings>
<mirrors>
<mirror>
<id>aliyun-maven</id>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</profile>
</profiles>
</settings>
2.3 IDEA高效配置技巧
-
安装插件:Lombok、MyBatisX、Maven Helper
-
开启注解处理:Settings → Build → Annotation Processors
-
配置智能提示:File → Power Save Mode(关闭)
三、SpringBoot项目快速搭建
3.1 使用Spring Initializr创建项目
访问 https://start.spring.io 或使用IDEA内置的Spring Initializr:
https://img-blog.csdnimg.cn/img_convert/123456.png
依赖选择:
-
Spring Web
-
Spring Boot DevTools
-
Lombok
-
MyBatis Framework
-
MySQL Driver
3.2 项目结构规范
text
src/ ├── main/ │ ├── java/com/example/ │ │ ├── config/ # 配置类 │ │ ├── controller/ # 控制器 │ │ ├── service/ # 服务层 │ │ │ ├── impl/ # 服务实现 │ │ ├── mapper/ # MyBatis映射器 │ │ ├── entity/ # 实体类 │ │ ├── dto/ # 数据传输对象 │ │ ├── vo/ # 视图对象 │ │ └── Application.java │ └── resources/ │ ├── mapper/ # XML映射文件 │ ├── static/ # 静态资源 │ ├── templates/ # 模板文件 │ └── application.yml └── test/ # 测试代码
四、MyBatis-Plus深度整合
4.1 添加MyBatis-Plus依赖
xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
4.2 基础配置
yaml
# application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/web_course?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: auto
logic-delete-field: deleted # 逻辑删除字段
logic-delete-value: 1
logic-not-delete-value: 0
4.3 实体类与Mapper
java
// User.java
@Data
@TableName("sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String username;
private String password;
private String email;
private Integer status;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
// UserMapper.java
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 自定义查询方法
@Select("SELECT * FROM sys_user WHERE email = #{email}")
User selectByEmail(String email);
}
4.4 自动填充处理器
java
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime",
LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime",
LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime",
LocalDateTime.class, LocalDateTime.now());
}
}
五、权限控制实现(Spring Security + JWT)
5.1 安全依赖配置
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.11.5</version>
</dependency>
5.2 JWT工具类
java
@Component
public class JwtUtil {
private static final String SECRET_KEY = "your-secret-key";
private static final long EXPIRATION = 86400000; // 24小时
public String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION))
.signWith(SignatureAlgorithm.HS256, SECRET_KEY)
.compact();
}
public String extractUsername(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(token)
.getBody()
.getSubject();
}
}
5.3 Security配置类
java
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationFilter jwtAuthenticationFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/auth/**", "/swagger-ui/**").permitAll()
.antMatchers("/api/admin/**").hasRole("ADMIN")
.antMatchers("/api/user/**").hasAnyRole("USER", "ADMIN")
.anyRequest().authenticated()
.and()
.addFilterBefore(jwtAuthenticationFilter,
UsernamePasswordAuthenticationFilter.class);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
六、数据缓存管理(Redis集成)
6.1 Redis配置
yaml
spring:
redis:
host: localhost
port: 6379
password:
database: 0
timeout: 5000ms
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
6.2 缓存注解使用
java
@Service
@Slf4j
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Cacheable(value = "user", key = "#id", unless = "#result == null")
@Override
public User getUserById(Long id) {
log.info("查询数据库获取用户:{}", id);
return userMapper.selectById(id);
}
@CachePut(value = "user", key = "#user.id")
@Override
public User updateUser(User user) {
userMapper.updateById(user);
return user;
}
@CacheEvict(value = "user", key = "#id")
@Override
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
}
七、完整的项目开发流程
7.1 开发流程示意
需求分析
数据库设计
项目搭建
实体类创建
Mapper层开发
Service层开发
Controller层开发
前端界面开发
单元测试
集成测试
性能优化
部署上线
7.2 Git版本控制规范
text
feat: 新功能 fix: 修复bug docs: 文档更新 style: 代码格式调整 refactor: 代码重构 test: 测试用例 chore: 构建过程或辅助工具变动
八、项目实战:用户管理系统
8.1 接口设计
java
@RestController
@RequestMapping("/api/users")
@Api(tags = "用户管理")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
@ApiOperation("分页查询用户")
public PageResult<UserVO> getUsers(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
Page<User> userPage = userService.page(new Page<>(page, size));
return PageResult.success(userPage, UserVO.class);
}
@PostMapping
@ApiOperation("创建用户")
public Result<UserVO> createUser(@Valid @RequestBody CreateUserDTO dto) {
User user = userService.createUser(dto);
return Result.success(BeanUtil.copyProperties(user, UserVO.class));
}
}
8.2 统一异常处理
java
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
@ResponseBody
public Result<?> handleBusinessException(BusinessException e) {
log.error("业务异常:{}", e.getMessage());
return Result.error(e.getCode(), e.getMessage());
}
@ExceptionHandler(Exception.class)
@ResponseBody
public Result<?> handleException(Exception e) {
log.error("系统异常:", e);
return Result.error(500, "系统繁忙,请稍后重试");
}
}
九、部署与监控
9.1 Docker部署
dockerfile
FROM openjdk:11-jre-slim VOLUME /tmp COPY target/web-course-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] EXPOSE 8080
9.2 健康检查端点
yaml
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always
十、总结
通过本文的详细讲解,我们完成了:
-
✅ 开发环境配置与优化
-
✅ SpringBoot项目快速搭建
-
✅ MyBatis-Plus深度整合与使用
-
✅ 基于Spring Security的权限控制
-
✅ Redis缓存管理实践
-
✅ 完整的项目开发流程
更多推荐


所有评论(0)