一、项目初始化与基础配置
1.1 创建标准化项目结构
推荐使用Spring Initializr工具生成项目骨架,选择以下核心依赖:
- Spring Web (构建RESTful接口)
- MyBatis Framework (ORM框架)
- MySQL Driver (数据库连接)
- Lombok (简化实体类开发)
项目生成后需执行以下优化操作:
- 删除
src/test目录下自动生成的测试类(后续按需补充) - 清空
application.properties文件并转换为YAML格式配置 - 统一项目编码为UTF-8(IDE设置中需同步修改文件编码与控制台编码)
1.2 构建工具配置优化
在pom.xml中补充关键插件配置:
<build><plugins><!-- Maven编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin><!-- MyBatis Generator插件(可选) --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.2</version></plugin></plugins></build>
二、数据库集成配置
2.1 连接池配置最佳实践
推荐使用HikariCP连接池,在application.yml中配置:
spring:datasource:url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTCusername: rootpassword: '012345' # 密码以0开头需加引号driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10connection-timeout: 30000idle-timeout: 600000
2.2 实体类与Mapper接口设计
创建标准化的实体类(以User为例):
@Data@TableName("sys_user") // 若使用MyBatis-Plus可添加此注解public class User {@TableId(type = IdType.AUTO) // 主键自增策略private Long id;private String username;private String email;private LocalDateTime createTime;}
对应的Mapper接口应遵循以下规范:
@Mapperpublic interface UserMapper {// 基础CRUD方法int insert(User user);int deleteById(Long id);int update(User user);User selectById(Long id);List<User> selectAll();// 条件查询示例List<User> selectByUsername(@Param("username") String username);}
三、MyBatis核心配置
3.1 XML映射文件规范
在resources/mapper目录下创建UserMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.entity.User"><id column="id" property="id"/><result column="username" property="username"/><result column="email" property="email"/><result column="create_time" property="createTime"/></resultMap><insert id="insert" parameterType="com.example.entity.User"useGeneratedKeys="true" keyProperty="id">INSERT INTO sys_user(username, email, create_time)VALUES(#{username}, #{email}, #{createTime})</insert><!-- 其他SQL语句省略... --></mapper>
3.2 动态SQL高级应用
推荐使用<where>、<set>等标签实现动态SQL:
<update id="update" parameterType="com.example.entity.User">UPDATE sys_user<set><if test="username != null">username = #{username},</if><if test="email != null">email = #{email},</if></set>WHERE id = #{id}</update>
四、业务层实现
4.1 Service层设计规范
创建标准的UserService接口:
public interface UserService {User createUser(UserDTO userDTO);User updateUser(Long id, UserDTO userDTO);void deleteUser(Long id);User getUserById(Long id);PageInfo<User> getAllUsers(int pageNum, int pageSize);}
实现类中应包含事务管理:
@Service@RequiredArgsConstructorpublic class UserServiceImpl implements UserService {private final UserMapper userMapper;@Override@Transactionalpublic User createUser(UserDTO userDTO) {User user = new User();BeanUtils.copyProperties(userDTO, user);user.setCreateTime(LocalDateTime.now());userMapper.insert(user);return user;}// 其他方法实现省略...}
4.2 分页查询实现
推荐使用PageHelper分页插件:
-
添加依赖:
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></dependency>
-
服务层实现:
@Overridepublic PageInfo<User> getAllUsers(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);List<User> users = userMapper.selectAll();return new PageInfo<>(users);}
五、控制器层实现
5.1 RESTful API设计规范
创建UserController遵循以下原则:
@RestController@RequestMapping("/api/users")@RequiredArgsConstructorpublic class UserController {private final UserService userService;@PostMappingpublic ResponseEntity<User> createUser(@Valid @RequestBody UserDTO userDTO) {User user = userService.createUser(userDTO);return ResponseEntity.created(URI.create("/api/users/" + user.getId())).body(user);}@GetMapping("/{id}")public ResponseEntity<User> getUser(@PathVariable Long id) {return ResponseEntity.ok(userService.getUserById(id));}// 其他接口省略...}
5.2 统一异常处理
创建全局异常处理器:
@ControllerAdvicepublic class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {Map<String, String> errors = new HashMap<>();ex.getBindingResult().getAllErrors().forEach(error -> {String fieldName = ((FieldError) error).getField();String errorMessage = error.getDefaultMessage();errors.put(fieldName, errorMessage);});return ResponseEntity.badRequest().body(errors);}}
六、项目优化建议
- 配置管理:使用Spring Cloud Config或Nacos实现配置中心化
- 日志体系:集成Logback+SLF4J实现结构化日志
- 监控告警:通过Micrometer+Prometheus+Grafana构建监控体系
- API文档:使用Swagger/OpenAPI生成交互式文档
- 安全防护:集成Spring Security实现JWT认证授权
本文完整演示了从项目初始化到业务实现的完整流程,开发者可根据实际需求调整技术选型和实现细节。建议在实际项目中结合单元测试(JUnit 5+Mockito)和集成测试(Testcontainers)保证代码质量,并通过CI/CD流水线实现自动化部署。