Mybatis Plus 学习
Mybatis-Plus介绍
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,
为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,
可以参考 mybatis-plus官网 。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,
我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。
Lombok 介绍
Lombok介绍网上很多博主都分享过,远比我讲的好。我这里就直接放个官网吧 - -> Lombok 官网
更多的我这里就不多赘述了,大家想了解可以自己去找度娘,我们直接开始吧
maven(pom.xml)基础配置
<dependencies>
<!--springboot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--lombox依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--MyBatis Plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!--json依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<!--MySQL连接依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
这里就主要讲一下mybatis-plus的三种使用方法
大家先看看每种方法的使用,我后面会把一些关键的注解或是继承类的介绍放在下面
1. ActiveRecord模式调用
PS:Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射。
model层:↓
@TableName(value = "demo_user")
@Data
public class User extends Model<User> {
//id
@TableId(type = IdType.UUID)
private String id;
//姓名
private String userName;
//年龄
private Integer userAge;
//性别
private Integer userGender;
//手机号
private String phone;
//时间
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date time;
}
controller层:↓
@Controller
@RequestMapping("/user")
@Component
@Slf4j
public class UserController {
/**
* 查询(可按照条件)
* @return
*/
@RequestMapping(value = "/queryUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject queryUser(){
JSONObject jsonObject=new JSONObject();
Map<String,Object> params=new HashMap<>();
User user=new User();
List<User>users=user.selectAll();
jsonObject.put("users",users);
return jsonObject;
}
/**
* 分页查询
* @param pageNo
* @param pageSize
* @return
*/
@RequestMapping(value = "/pageUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject pageUser(Integer pageNo,Integer pageSize){
JSONObject jsonObject=new JSONObject();
User user=new User();
Page<User> page = new Page<>(pageNo, pageSize);
IPage<User> users=user.selectPage(page, null);
jsonObject.put("users",users);
return jsonObject;
}
/**
* 添加或修改数据
* @param user
* @return
*/
@RequestMapping(value = "/addOrUpdUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject addOrUpdUser(User user){
JSONObject jsonObject=new JSONObject();
user.setTime(new Date());
boolean success=user.insert();
jsonObject.put("success",success);
return jsonObject;
}
/**
* 根据id删除数据
* @param id
* @return
*/
@RequestMapping(value = "/delUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject delUser(String id){
JSONObject jsonObject=new JSONObject();
User user=new User();
boolean success=user.deleteById(id);
jsonObject.put("success",success);
return jsonObject;
}
}
2. 继承通用Mapper接口方式调用
model层:↓
@TableName(value = "demo_user")
@Data
public class User {
//id
@TableId(type = IdType.UUID)
private String id;
//姓名
private String userName;
//年龄
private Integer userAge;
//性别
private Integer userGender;
//手机号
private String phone;
//时间
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date time;
}
Mapper层:↓
@Repository
public interface UserMapper {
}
controller层:↓
@Controller
@RequestMapping("/user")
@Component
@Slf4j
public class UserController {
@Autowired
private UserMapper userMapper;
/**
* 查询(可按照条件)
* @return
*/
@RequestMapping(value = "/queryUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject queryUser(){
JSONObject jsonObject=new JSONObject();
Map<String,Object> params=new HashMap<>();
Collection<User> users=userMapper.selectByMap(params);
jsonObject.put("users",users);
return jsonObject;
}
/**
* 分页查询
* @param pageNo
* @param pageSize
* @return
*/
@RequestMapping(value = "/pageUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject pageUser(Integer pageNo,Integer pageSize){
JSONObject jsonObject=new JSONObject();
Page<User> page = new Page<>(pageNo, pageSize);
IPage<User> users=userMapper.selectPage(page, null);
jsonObject.put("users",users);
return jsonObject;
}
/**
* 添加或修改数据
* @param user
* @return
*/
@RequestMapping(value = "/addOrUpdUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject addOrUpdUser(User user){
JSONObject jsonObject=new JSONObject();
user.setTime(new Date());
int success=userMapper.insert(user);
jsonObject.put("success",success);
return jsonObject;
}
/**
* 根据id删除数据
* @param id
* @return
*/
@RequestMapping(value = "/delUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject delUser(String id){
JSONObject jsonObject=new JSONObject();
int success=userMapper.deleteById(id);
jsonObject.put("success",success);
return jsonObject;
}
}
3. 继承通用IService接口方式调用
model层:与第二种方法的一致↑
mapper层:↓
@Repository
public interface UserMapper extends BaseMapper<User> {
}
service层:↓
public interface UserService extends IService<User> {
}
serviceImpl层:↓
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
controller层:↓
@Controller
@RequestMapping("/user")
@Component
@Slf4j
public class UserController {
@Autowired
private UserService userService;
/**
* 查询(可按照条件)
* @return
*/
@RequestMapping(value = "/queryUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject queryUser(){
JSONObject jsonObject=new JSONObject();
Map<String,Object> params=new HashMap<>();
Collection<User> users=userService.listByMap(params);
jsonObject.put("users",users);
return jsonObject;
}
/**
* 分页查询
* @param pageNo
* @param pageSize
* @return
*/
@RequestMapping(value = "/pageUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject pageUser(Integer pageNo,Integer pageSize){
JSONObject jsonObject=new JSONObject();
Page<User> page = new Page<>(pageNo, pageSize);
IPage<User> users=userService.page(page);
jsonObject.put("users",users);
return jsonObject;
}
/**
* 添加或修改数据
* @param user
* @return
*/
@RequestMapping(value = "/addOrUpdUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject addOrUpdUser(User user){
JSONObject jsonObject=new JSONObject();
user.setTime(new Date());
boolean success=userService.saveOrUpdate(user);
jsonObject.put("success",success);
return jsonObject;
}
/**
* 根据id删除数据
* @param id
* @return
*/
@RequestMapping(value = "/delUser", method = RequestMethod.POST)
@ResponseBody
public JSONObject delUser(String id){
JSONObject jsonObject=new JSONObject();
boolean success=userService.removeById(id);
jsonObject.put("success",success);
return jsonObject;
}
}
以上就是常用的三种调用模式
接下来介绍一下一些关键的注解或是继承类
1.Mybatis-Plus 常用注解
- @TableName:对数据表名注解
- @TableId:表主键标识
@TableId(value = “id”, type = IdType.AUTO):自增
@TableId(value = “id”, type = IdType.ID_WORKER_STR):分布式全局唯一ID字符串类型
@TableId(value = “id”, type = IdType.INPUT):自行输入
@TableId(value = “id”, type = IdType.ID_WORKER):分布式全局唯一ID 长整型类型
@TableId(value = “id”, type = IdType.UUID):32位UUID字符串
@TableId(value = “id”, type = IdType.NONE):无状态 - @TableField:表字段标识
@TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
@TableField(exist = true):表示该属性为数据库表字段。
@TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。
@TableField(fill = FieldFill.INSERT):注解填充字段 ,生成器策略部分也可以配置! - @Version:乐观锁注解、标记
- @EnumValue:通枚举类注解
- @TableLogic:表字段逻辑处理注解(逻辑删除)
- @SqlParser:租户注解
- @SqlParser:租户注解
2.Mybatis-Plus 常用继承
- Model 应该是为了单表实体的操作方便,具体是为了支持 ActiveRecord 形式调用方便而设计出来的!
ActiveRecord 官方介绍 - BaseMapper 是为mapper节省了基础的增删改查的封装!
BaseMapper 方法详解 - IService<> 这也减少了相对应的代码工作量,把通用的接口提取到公共。
IService 方法注解
总结
总的来说 Mybatis-plus 还是很方便的,可以省掉很多基础的代码(增删改查)
方法封装的也是很完善,各种查询的方式、添加的方式等基本上都有
但要是比较复杂的SQL或是逻辑关系,还是得自己上手敲
还是那句话 “代码是死的人是活的,根据自身情况修改”,百度是个好东西!
要是有大佬有更好的方发或是连接,有时间的话可以在评论区留言,供大家参考,谢谢!