mybatisplus entity基类
时间: 2024-12-25 13:13:17 浏览: 45
MyBatis Plus (MBP) 的 Entity 基类是一种用于简化开发 ORM(Object Relational Mapping,对象关系映射)框架的工具,比如 MyBatis。它提供了一些预生成的基础代码和便利的方法,使得基于数据库表的实体类快速映射到 Java 对象上,并简化了数据持久化的过程。
在 MBP 中,Entity 基类通常包含以下几个方面:
1. **字段自动填充**:MBP 可以自动生成一些字段的 getter 和 setter 方法,减少了手动编写的工作量。
2. **CRUD 操作**:它提供了方便的一致性API,如 `insert()`, `update()`, `deleteById()` 等,简化了增删改查的操作。
3. **数据权限管理**:MBP 提供了基础的数据权限控制功能,如字段级别的字段级加密、唯一校验等。
4. **全局查询拦截器**:允许开发者添加全局的查询拦截器,对所有查询结果进行统一处理。
5. **分页和排序**:内置分页和排序的支持,减少开发者对 SQL 手动编码的复杂度。
使用 MBP 的 Entity 基类,你可以直接从数据库映射到 Java 类,避免了编写大量的 XML 映射文件,提高了开发效率。同时,MBP 的设计也尽可能保持了与原生 MyBatis 的兼容性,便于理解和维护。
相关问题
mybatis-plus entity基类
### MyBatis-Plus 中 Entity 基类的使用方法和实现细节
#### 一、简介
MyBatis-Plus 提供了一个抽象的基础实体类 `BaseEntity` 或者接口 `IPage<T>` 来帮助开发者快速构建自己的业务实体。通过继承这些基础组件,能够自动获得一系列便捷的方法用于处理常见的持久化逻辑。
#### 二、主要特性
##### 继承自 BaseMapper 的默认行为支持
当定义一个新的 Mapper 并让它扩展 `com.baomidou.mybatisplus.core.mapper.BaseMapper` 后,在对应的 XML 文件里无需再编写 SQL 映射语句即可完成基本的数据存取操作[^2]。
##### 自动填充字段
对于某些特定场景下的属性值设置需求(比如创建时间戳),可以通过实现 `MetaObjectHandler` 接口来自动生成并维护这类信息而不需要手动干预每一个新增或更新动作[^1]。
```java
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
```
##### 主键策略设定
为了方便不同类型的主键生成机制的选择,默认提供了几种常见的方式如雪花算法(Snowflake),UUID等;也可以根据项目实际情况定制专属方案[^3]。
```java
@TableId(type = IdType.AUTO)
private Long id;
// OR
@TableId(value="id", type= IdType.INPUT)
private String customId;
```
#### 三、常用注解介绍
| 注解名称 | 描述 |
| --- | --- |
| `@TableField` | 指定表中的列名及其附加选项,例如是否忽略该字段不参与查询条件拼接等 |
| `@Version` | 支持乐观锁版本控制标记 |
| `@LogicDelete` | 软删除标志位 |
mybatisplus 代码示例
### MyBatisPlus 代码示例
以下是一个完整的 MyBatisPlus 使用示例,涵盖了基本的 CRUD 操作以及如何通过代码生成器生成基础代码。
#### Maven 依赖配置
在 Spring Boot 项目中使用 MyBatisPlus 需要引入相应的依赖项。以下是常见的依赖配置:
```xml
<dependencies>
<!-- MyBatis-Plus Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- 数据库驱动 (以 MySQL 为例) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
```
上述配置包含了 `mybatis-plus-boot-starter` 和数据库连接所需的驱动程序[^2]。
---
#### 实体类定义
假设有一个名为 `User` 的表,其字段包括 `id`, `name`, 和 `age`。可以通过注解方式定义实体类:
```java
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user") // 映射到 user 表
public class User {
@TableId // 主键标注
private Long id;
private String name;
private Integer age;
// Getter 和 Setter 方法
}
```
此部分利用了 `mybatis-plus-annotation` 提供的功能来简化映射关系。
---
#### Mapper 接口定义
MyBatisPlus 提供了一个通用的基类 `BaseMapper<T>`,可以直接继承并实现基本的 CRUD 功能:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
// 可在此扩展自定义 SQL 查询方法
}
```
无需额外编写 XML 文件即可完成大部分常用操作。
---
#### Service 层设计
为了进一步封装业务逻辑,通常会创建一个服务层接口及其实现类:
```java
// 定义 Service 接口
public interface UserService extends IService<User> {}
// 实现 Service 类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
```
这里借助了 MyBatisPlus 提供的 `IService<T>` 和 `ServiceImpl<M,T>` 抽象类,减少了重复编码的工作量。
---
#### 控制器层
最后,在控制器中调用服务层的方法处理 HTTP 请求:
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.getById(id);
return ResponseEntity.ok(user);
}
@PostMapping("/")
public ResponseEntity<String> createUser(@RequestBody User user) {
boolean success = userService.save(user);
return success ? ResponseEntity.ok("Created successfully!") : ResponseEntity.badRequest().body("Failed to create!");
}
}
```
以上展示了基于 RESTful API 的增删改查功能实现。
---
#### 自动化代码生成
如果希望减少手动编写代码的时间,可以使用 MyBatisPlus 提供的代码生成器来自动生成所需文件。以下是一个简单的代码生成器配置实例:
```java
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
public class CodeGenerator {
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
gc.setAuthor("Your Name");
gc.setOpen(false); // 是否打开输出目录
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("password");
mpg.setDataSource(dsc);
// 包名设置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.demo");
pc.setModuleName(null); // 不指定模块名则默认为空
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("user"); // 设置需要生成的表名
strategy.setNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰命名
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
mpg.setStrategy(strategy);
mpg.execute(); // 执行生成
}
}
```
运行该脚本后,会在指定路径下生成一系列预设好的 Java 文件,从而大幅提升开发效率[^3]。
---
###
阅读全文
相关推荐
















