下面是SpringBoot配置MyBatis-Plus的详细步骤:
1. 添加依赖
<dependencies>
<!-- SpringBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 配置文件
application.yml:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password
mybatis-plus:
# mapper.xml文件位置
mapper-locations: classpath:mapper/*.xml
# 实体类包路径
type-aliases-package: com.example.entity
configuration:
# 驼峰命名转换
map-underscore-to-camel-case: true
# 打印SQL语句(开发环境使用)
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
3. 实体类
@Data
@TableName("user")
public class User {
// 主键
@TableId(type = IdType.AUTO)
private Long id;
// 普通字段
private String username;
private String password;
// 逻辑删除
@TableLogic
private Integer deleted;
// 乐观锁
@Version
private Integer version;
// 自动填充
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
4. Mapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 继承BaseMapper后即可使用内置的CRUD方法
// 自定义方法
@Select("SELECT * FROM user WHERE username = #{username}")
User findByUsername(String username);
}
5. Service层
// 接口
public interface UserService extends IService<User> {
User findByUsername(String username);
}
// 实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findByUsername(String username) {
return userMapper.findByUsername(username);
}
}
6. 配置类
@Configuration
@MapperScan("com.example.mapper")
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
/**
* 自动填充处理器
*/
@Bean
public MetaObjectHandler metaObjectHandler() {
return new 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());
}
};
}
}
7. Controller层
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
// 分页查询
@GetMapping
public IPage<User> list(@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
return userService.page(new Page<>(page, size));
}
// 条件查询
@GetMapping("/search")
public List<User> search(String username) {
return userService.list(new QueryWrapper<User>()
.like("username", username));
}
// 添加
@PostMapping
public boolean save(@RequestBody User user) {
return userService.save(user);
}
// 修改
@PutMapping
public boolean update(@RequestBody User user) {
return userService.updateById(user);
}
// 删除
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Long id) {
return userService.removeById(id);
}
}
8. 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">
<!-- 自定义复杂查询 -->
<select id="getComplexData" resultType="com.example.vo.UserVO">
SELECT
u.id,
u.username,
r.role_name
FROM user u
LEFT JOIN user_role ur ON u.id = ur.user_id
LEFT JOIN role r ON ur.role_id = r.id
WHERE u.deleted = 0
</select>
</mapper>
9. 常用操作示例
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
// 条件构造器示例
public List<User> searchUsers(String keyword) {
return list(new QueryWrapper<User>()
.like("username", keyword)
.or()
.like("email", keyword)
.orderByDesc("create_time"));
}
// 分页查询示例
public IPage<User> pageUsers(int page, int size) {
return page(new Page<>(page, size), new QueryWrapper<User>()
.orderByDesc("create_time"));
}
// 批量操作示例
public boolean batchSave(List<User> users) {
return saveBatch(users);
}
// 链式调用示例
public User getOneUser(String username) {
return lambdaQuery()
.eq(User::getUsername, username)
.one();
}
}
希望对各位看官有所帮助,如果能得到您的一个赞,那就太荣幸了,下期见,谢谢~