springboot-mybatisplus操作集锦(上)
springboot-mybatisplus操作集锦(上)
一、编码
1.配置文件
spring:
# 配置数据源信息
datasource:
# 配置数据源类型
type: com.zaxxer.hikari.HikariDataSource
# 配置连接数据库信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
这个配置块的作用是让 Spring Boot 应用能够通过 HikariCP 连接到本地的 MySQL 数据库。配置正确后,就可以使用 MyBatis-Plus 进行数据库操作,简化 CRUD 代码并提高开发效率。
注意事项
-
连接地址url MySQL5.7版本的url:
jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
MySQL8.0版本的url:
jdbc:mysql://localhost:3306/mybatis_plus? serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
2.启动类
@SpringBootApplication
@MapperScan("com.lucifer.mybatisplus.mapper")
public class MybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusApplication.class, args);
}
}
在Spring Boot启动类中添加@MapperScan注解,扫描mapper包
3.实体类
@Data //lombok注解
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
Lombok 是一个用于简化 Java 代码的库,通过注解的方式减少样板代码(boilerplate code)。常用的功能包括:
- 自动生成 getters 和 setters。
- 生成构造函数。
- 提供
@Data
、@Builder
、@Value
等注解来简化类的定义。
4.mapper文件
public interface UserMapper extends BaseMapper<User> {
}
二、工具
1.显示日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.BaseMapper
以下是基于 BaseMapper 的 CRUD 操作教程,适用于使用 MyBatis 的项目。
1. 引入依赖
确保在你的 pom.xml
文件中添加 MyBatis 和相关依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
2. 创建实体类
定义一个实体类,例如 User
:
public class User {
private Long id;
private String name;
private String email;
// Getters and Setters
}
3. 创建 Mapper 接口
创建一个继承 BaseMapper
的接口,例如 UserMapper
:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
4. 创建 Service 类
创建服务类以实现 CRUD 操作,例如 UserService
:
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
实现 UserService
接口:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public boolean save(User user) {
return userMapper.insert(user) > 0;
}
@Override
public boolean removeById(Long id) {
return userMapper.deleteById(id) > 0;
}
@Override
public User getById(Long id) {
return userMapper.selectById(id);
}
@Override
public List<User> list() {
return userMapper.selectList(null);
}
}
5. 使用 Controller 处理请求
创建控制器类,例如 UserController
:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public String createUser(@RequestBody User user) {
userService.save(user);
return "User created successfully!";
}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getById(id);
}
@GetMapping
public List<User> getAllUsers() {
return userService.list();
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
userService.removeById(id);
return "User deleted successfully!";
}
}
6. 配置 MyBatis
在 application.yml
中配置 MyBatis:
mybatis-plus:
mapper-locations: classpath:/mappers/**/*.xml
typeAliasesPackage: com.example.model
7. 测试 CRUD 操作
你可以使用 Postman 或其他 API 测试工具进行以下操作:
-
创建用户:发送 POST 请求到
/users
,请求体为用户的 JSON 数据。 -
获取用户:发送 GET 请求到
/users/{id}
。 -
获取所有用户:发送 GET 请求到
/users
。 -
删除用户:发送 DELETE 请求到
/users/{id}
。
8.与IService
的对比表:
特性 | BaseMapper | IService |
---|---|---|
定义 | 基础数据访问层接口 | 服务层接口,封装业务逻辑 |
功能 | 提供基本的 CRUD 操作 | 提供 CRUD 及其他业务操作 |
使用场景 | 适合简单 CRUD 操作 | 适合复杂业务逻辑 |
方法数量 | 方法数量较少 | 方法数量较多,包含业务方法 |
代码复杂度 | 较低 | 较高,需实现业务逻辑 |
扩展性 | 扩展性有限 | 扩展性强,可自定义业务逻辑 |
优点 | 简单直接,易于使用 | 逻辑清晰,易于维护 |
缺点 | 缺乏业务逻辑管理 | 增加了代码复杂度 |
三、常用注解
1. @TableName
指定实体类对应的表名。
@TableName("user")
public class User {
private Long id;
private String name;
private Integer age;
}
这个示例中,User
实体类对应数据库中的 user
表。
2. @TableField
用于映射实体字段与数据库表字段,或指定字段属性(如忽略、加密等)。
@TableName("user")
public class User {
private Long id;
@TableField("username")
private String name;
@TableField(exist = false)
private String extraField; // 该字段在数据库中不存在
}
name
字段在数据库中对应 username
,而 extraField
字段不会映射到数据库中。
3. @IdType
指定主键生成策略。
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
}
id
字段的值由数据库自动生成,使用自增策略。
4. @Version
用于实现乐观锁。
@TableName("user")
public class User {
private Long id;
private String name;
private Integer age;
@Version
private Integer version;
}
在更新时,MyBatis-Plus 会根据 version
字段的值进行检查,确保数据没有被其他事务修改过。
5. @TableLogic
实现逻辑删除。设置后,执行删除操作时,不会真正删除记录,而是更新逻辑删除字段。
@TableName("user")
public class User {
private Long id;
private String name;
private Integer age;
@TableLogic
private Integer deleted;
}
在此示例中,deleted
字段用于标记逻辑删除,0 表示未删除,1 表示已删除。