Mybatis-plus

Mybatis-plus

1.介绍Mybatis-plus

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

2.如何使用

  1. 创建一个springboot工程并加入相关的依赖
<!--引入mybatis-plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
<!--引入lombok依赖-->     
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2.配置文件连接数据库

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/empgl?serverTimezone=Asia/Shanghai

#打印日志
logging.level.com.mybatisplus.mybatisplus.mapper=debug

3.创建与数据库表名一致的实体
在这里插入图片描述

@Data
@AllArgsConstructor
@NoArgsConstructor
public class EmpDb {

    @TableId(type = IdType.AUTO)//设置主键类型  自动递增
    private Integer empno;
    @TableField(value = "e_name")//字段名和数据库对不上的时候手动对应
    private String ename;
    private String job;
    private Integer deptno;
    private String hireday;

    @TableLogic//设置逻辑删除  执行删除的时候执行的其实是修改
    private Integer deleted;

    @TableField(fill = FieldFill.INSERT)//设置自动填充,执行新增时候自动填充
    private Date createtime;

    @TableField(fill = FieldFill.INSERT_UPDATE)//设置自动填充,执行新增或修改的时候自动填充
    private Date updatetime;

    public EmpDb(Integer empno, String ename, String job, Integer deptno, String hireday, Integer deleted) {
        this.empno = empno;
        this.ename = ename;
        this.job = job;
        this.deptno = deptno;
        this.hireday = hireday;
        this.deleted = deleted;
    }
}

4.创建mapper
只需继承BaseMapper接口加上泛型,就无需自己写增删改查代码就可以调用相对应的功能。

public interface EmpMapper extends BaseMapper<EmpDb> {
}

5.主启动类加对mapper层的扫描注解
在这里插入图片描述
6.测试

 @Resource
    private EmpMapper empMapper;

    @Test
    void contextLoads() {
        EmpDb empDb = empMapper.selectById(1);
        System.out.println(empDb);
    }

在这里插入图片描述

3.新增的时候对主键赋值

对上面实体类的操作
@TableId(type = IdType.AUTO)
IdType类型有以下
在这里插入图片描述
以自动递增方式测试

@Test
    void testinsert(){
        EmpDb empDb = new EmpDb(null, "测试", "睡觉", 1, "2021-6-21",0);
        int insert = empMapper.insert(empDb);
        System.out.println(insert);
    }

可以看到数据库已经按照主键自增的方式新增一条数据
在这里插入图片描述

4.逻辑删除

只对自动注入的sql起效:
插入: 不作限制
查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
删除: 转变为 更新

实体里加入这个注解
@TableLogic
测试

@Test
    void testdelete(){
        int delete = empMapper.deleteById(1);
        System.out.println(delete);
    }

在这里插入图片描述在这里插入图片描述

5.自动填充

@TableField(fill = FieldFill.INSERT)//设置自动填充,执行新增时候自动填充
@TableField(fill = FieldFill.INSERT_UPDATE)//设置自动填充,执行新增或修改的时候自动填充
要让这两个注解生效需要自己书写配置类配置
在这里插入图片描述
测试

@Test
    void testinsert(){
        EmpDb empDb = new EmpDb(null, "测试2", "睡觉2", 2, "2021-6-21",0);
        int insert = empMapper.insert(empDb);
        System.out.println(insert);
    }

新增的时侯没有赋值,数据库已经自动把值填充到这两个字段里
在这里插入图片描述

6.条件查询

Wrapper: 条件的包装类。

//条件查询
    @Test
    void testselectBywarpper(){
        QueryWrapper<EmpDb> empDbQueryWrapper = new QueryWrapper<>();
        empDbQueryWrapper.between("hireday","2021-01-01","2022-02-02");
        empDbQueryWrapper.or();
        empDbQueryWrapper.like("ename","测试");
        empDbQueryWrapper.orderByDesc("deptno");
        List<EmpDb> empDbs = empMapper.selectList(empDbQueryWrapper);
        System.out.println(empDbs);
    }

在这里插入图片描述

7.分页查询

Mybatis-plus自带分页插件无需导入依赖,但需要在配置类中配置
在这里插入图片描述
测试

@Test
    void testPageselect(){
        Page<EmpDb> page = new Page<>(1,4);
        Page<EmpDb> empDbPage = empMapper.selectPage(page, null);
        System.out.println("当前总页数"+empDbPage.getPages());
        System.out.println("当前总条数"+empDbPage.getTotal());
        System.out.println("当前记录"+empDbPage.getRecords());
    }

控制台结果如下
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值