项目结构
src/main/java
└── com.morningbox
├── config // 配置类
├── controller // 控制器
├── service // 服务层
│ ├── impl // 服务实现类
├── mapper // Mapper接口
├── model // 实体类
├── dto // 数据传输对象
├── exception // 自定义异常
├── utils // 工具类
└── MorningBoxApplication.java // 启动类
src/main/resources
├── application.yml // 配置文件
└── static // 静态资源
添加依赖
<!-- mybatis-plus- -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.2</version>
</dependency>
这是完整的依赖文件为
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>MorningBoxSpring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MorningBoxSpring</name>
<description>MorningBoxSpring</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<!-- Spring Boot Starter -->
<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>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 数据校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- Redis缓存 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- JSON处理 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- 工具类 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<!-- mybatis-plus- -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.2</version>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.morningboxspring.MorningBoxSpringApplication</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
使用Mybatis-Plus时,实体类的设计可以更简洁,不需要JPA的注解,但仍然可以使用MyBatis的注解(如@TableName、@TableId、@TableField)
配置类
MyBatisPlusConfig
package config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 功能:MyBatisPlusConfig
* 作者:爱因斯坦乐
* 日期:2025/3/1
*/
@Configuration
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分页插件
return interceptor;
}
}
实体类设计
下面以用户表(user)、地址表(address)和订单信息表(orders)为例,其他表可依次添加实体类
User.java
package com.example.morningboxspring.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 功能:User表实体类
* 作者:爱因斯坦乐
* 日期:2025/3/1
*/
@Data
@TableName("user")// 指定数据库表名
public class User {
@TableId(type = IdType.AUTO) // 主键自增
private Long userId;
private String openid; // 微信OpenID
private String phone; // 手机号
private String nickname; // 昵称
private String avatarUrl; // 头像URL
private LocalDateTime createTime; // 注册时间
}
Address.java
package com.example.morningboxspring.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 功能:Address表实体类
* 作者:爱因斯坦乐
* 日期:2025/3/1
*/
@Data
@TableName("address") // 指定数据库表名
public class Address {
@TableId(type = IdType.AUTO) // 主键自增
private Long addressId;
private Long userId; // 用户ID
private String contactName; // 联系人姓名
private String contactPhone; // 联系人手机号
private String detailAddress; // 详细地址
private Integer isDefault; // 是否默认地址
}
Order.java
package com.example.morningboxspring.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 功能:Order表实体类
* 作者:爱因斯坦乐
* 日期:2025/3/1
*/
@Data
@TableName("orders") // 指定数据库表名
public class Order {
@TableId(type = IdType.AUTO) // 主键自增
private Long orderId;
private Long userId; // 用户ID
private Long merchantId; // 商家ID
private Long addressId; // 地址ID
private Double totalAmount; // 总金额
private String status; // 订单状态
private LocalDateTime createTime; // 创建时间
}