4.Mybatis-plus
官网 : https://www.baomidou.com/
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上封装了大量常规操作,减少了SQL的编写量。
4.1.Maven依赖
使用时通常通过Springboot框架整合使用
并且使用Lombok框架简化实体类
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
重点注意 :
- 与 SpringBoot整合时, 在启动类增加注解 @MapperScan("mapper接口路径 ") 或者 在每一个Mapper类上加 @Mapper注解
这样做的目的是为Spring框架能够扫描到这些Mapper接口, 并进行依赖注入到Service类
- Mybatis-Plus 在处理连表查询操作时, 还是要编写SQL语句进行连表的
但是结果集封装不再需要 resultMap 结点, 可以直接通过 resultType属性指向实体类
因为在实体类中通过 注解已经指明 属性与字段的对应关系
4.2.Service层
4.2.1.结构
4.2.2.代码
Mybatis-Plus 提供了 IService 接口 及 ServiceImpl实现类, 并封装大量操作方法
接口 :
// 接口
import com.yuan.mybatisplus.entity.Teacher;
import com.baomidou.mybatisplus.extension.service.IService;
public interface TeacherService extends IService<Teacher> {
}
实现类 :
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuan.mybatisplus.entity.Teacher;
import com.yuan.mybatisplus.mapper.TeacherMapper;
import com.yuan.mybatisplus.service.TeacherService;
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher>
implements TeacherService{
}
4.2.3.常用方法
.list(); //查询
.list(Wrapper<T>); //条件查询
.getById(Serializable); // 根据主键查询
.save(T); //插入数据
.updateById(T); //以 主键匹配 修改数据
.removeById(Serializable); // 根据 主键 删除
.removeByIds(Collection<? extends Serializable> ); // 根据主键集合 删除多条记录
4.3.Mapper层
4.3.1.结构
可以看到 BaseMapper定义了基本操作方法
4.3.2.代码
import com.yuan.mybatisplus.entity.Teacher;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface TeacherMapper extends BaseMapper<Teacher> {
}
4.4.Entity 实体类
在实体类中通过注解说明与数据库表的对应关系
@TableName(value ="表名")
// 这个不是必需的
@Data
// lombok的注解, 封装了Setter/Getter/ toString()/ 无参构造/ 有参构造 等基本方法, 使代码更简洁
@TableId(type = IdType.AUTO)
// 指明主键,
type = IdType.AUTO
用于说明 主键自增长 , 也可以
@TableField(exist = false)
// 指明当前属性没有对应的字段
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 教师 teacher
* @TableName teacher
*/
@TableName(value ="teacher")
@Data
public class Teacher implements Serializable {
/**
* 讲师主键
*/
@TableId(type = IdType.AUTO)
private Integer tchId;
/**
* 讲师姓名
*/
private String tchName;
/**
* 讲师介绍
*/
private String tchInfo;
/**
* 讲师性别
*/
private Boolean tchSex;
/**
* 讲师注册时间
*/
private Date tchRegTime;
/**
* 讲师头像
*/
private String tchPic;
/**
* 登录账号
*/
private String tchUser;
/**
* 登录密码
*/
private String tchPass;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
4.5.Wrapper条件构造器
Wrapper
: 条件构造抽象类,最顶端父类
AbstractWrapper
: 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper
: Entity 对象封装操作类,不是用lambda语法
UpdateWrapper
: Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper
: Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper
:看名称也能明白就是用于Lambda语法使用的查询Wrapper ***
LambdaUpdateWrapper
: Lambda 更新封装Wrapper
具体方法参考官网