SpringBoot整合Mybatis-Plus
1、导入Mybatis-Plus的starter依赖
-
导入Mybatis-Plus的依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency>
依赖版本可以根据官网地址进行调整
或者,在创建SpringBoot项目时,使用SpringBoot Initialize直接加入Mybatis-Plus依赖,即可
2、分析Mybatis-Plus的自动配置原理
- 对其中的MybatisPlusAutoConfiguration进行分析(这基本上包含了自动配置原理的全部,看不懂的就去补一下注解部分的学习)
3、编写一个Mapper并继承BaseMapper,并分析BaseMapper的作用
-
编写 Mapper 包下的
UserMapper
接口package com.zhao.admin.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zhao.admin.bean.User; public interface UserMapper extends BaseMapper<User> { }
其中,User的数据库创建如下:
-
创建User表
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (id) );
-
添加记录
INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');
-
4、使用Mybatis-Plus操作数据库
-
Service层直接调用Mapper操作数据库
因为Mybatis-Plus在BaseMapper中封装了操作数据库的接口,所以可以直接调用基本的操作数据库的CRUD,复杂的还要自己写(连表查询什么的)
package com.zhao.admin.service; import com.zhao.admin.bean.User; import com.zhao.admin.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired UserMapper userMapper; public User getUserById(Long id) { return userMapper2.selectById(id); } }
-
Controller调用Service层
package com.zhao.admin.controller; import com.zhao.admin.bean.User; import com.zhao.admin.service.UserService; import com.zhao.admin.service.UserService2; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Slf4j @Controller public class UserController { @Autowired UserService userService; @ResponseBody @GetMapping("/user") public User getUserById(@RequestParam("id") Long id) { return userService2.getUserById(id); } }
-
测试,使用Postman进行测试
测试结果如下:
5、使用Mybatis-Plus简化Service层
-
修改目录结构
service层由service的interface,与对应实现类组成,即:
-
service的接口(interface)
-
service的实现类:
-
-
编写Service接口,Service接口的实现类的代码
-
UserService接口代码:
package com.zhao.admin.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zhao.admin.bean.User; /** * @Author: * @Date: * @Description: */ public interface UserService extends IService<User> { }
-
UserServiceImpl实现类代码:
package com.zhao.admin.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhao.admin.bean.User; import com.zhao.admin.mapper.UserMapper; import com.zhao.admin.service.UserService; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { public User getUserById(Long id) { return getById(id);//对应Mybatis-Plus中ServiceImpl中的方法 } }
其中,getById(id)是UserServiceImpl从ServiceIMpl类中继承过来的方法,
按住Ctrl+F12,查看UserSErviceImpl全部的方法,如下:
UserServiceImpl有以上方法的原理分析:
从以上可以看出,Mybatis-Plus的IService接口帮我们写了很多方法声明,然后Mybatis-Plus的ServiceImpl又帮助我们实现了对应的接口,我们的实现类又继承了ServiceImpl,所以我们写的实现类UserServiceImpl就有了这些方法。
-
-
注意点
- UserService extends IService。即,UserService接口继承了IService接口,并传递了参数User,这就告诉了IService操作的对象为User,他所有的方法都是针对User对象操纵的。
- UserServiceImpl extends ServiceImpl<UserMapper, User>。即,UserServiceIMpl实现类继承了Mybatis-Plus提供的ServiceImpl的实现类,这就帮助我摩恩不用再去实现继承过来的IService接口中的方法。因为ServiceImp实现类已经帮我们实现了,我们只需调用即可。
6、使用Mybatis-Plus完成CRUD
在Controller层我们就可以轻松使用这些方法了,UserController完成CRUD部分代码如下:
package com.zhao.admin.controller;
import com.zhao.admin.bean.User;
import com.zhao.admin.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Slf4j
@Controller
public class UserController {
@Autowired
UserService userService;
//查询
@ResponseBody
@GetMapping("/user")
public User getUserById(@RequestParam("id") Long id) {
return userService.getById(id);
}
/*
* userService.list(); 查询所有的User信息
* userService.removeById(id); 删除对应id的User记录
* userService.save(user); 想数据库中插入一条User记录
* 等等
/
}
如果有帮助,点个关注,让我们互相学习吧。