Mybatis-Plus

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。
MyBatis-Plus在MyBatis之上套了一层外衣,单表CRUD的操作几乎都可以由MyBatis-Plus代替执行。而且提供了各种查询方式,分页行为。作为使用者无需编写xml,直接调用MyBatis-Plus提供的API就可以了。

1.初始化工程
a. 创建一个空的Spring Boot工程
b. 添加依赖
1)引入Spring Boot Starter父工程
2)引入spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、Lombok、mysql依赖
c. 配置文件
1)在application.yml配置文件中添加mysql数据库相关配置
2)在springboot启动类中添加@Mapper注解,扫描Mapper文件夹
d. 编写实体类,编写mapper接口类并实现BaseMapper
e. 开始使用,添加测试类,进行功能测试

2.ActiveRecord:(AR)
ActiveRecord是什么?

  • 每一个数据库表对应创建一个类,类的每一个对象实例对应数据库中表的一行记录;通常表的每个字段在类中都有相应的Field
  • ActiveRecord负责把自己持久化,在ActiveRecord中封装了对数据库的访问,通过对象自己实现CRUD,实现优雅的数据库操作
  • ActiveRecord也封装了部分业务逻辑,可以作为业务对象使用
  • ActiveRecord中实体类要继承Model
    3.表和列
    主键,TableName,Tableld
    IdType枚举类,主键定义如下:
  1. none没有主键
  2. auto自动增长
  3. input手动输入
  4. id_worker:实体类用Long id,表的列用bigint,int类型大小
  5. id_worker_str 实体类使用 String id,表的列使用varchar 50
  6. uuid 实体类使用 String id,列使用 varchar 50
    4.指定表名
    定义实体类,默认的表名和实体类同名;如果不一致,在实体类定义上面使用@TableName说明表名称。
    例如:@TableName(value=“数据库表名”)
    5.指定字段名称
    使用@TableField指定字段名称
    例如:@TableField(value=“数据库表中字段名称”)
    6.使用mybatis-plus 需要注意这几个注解
    @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。

@TableField(exist = true):表示该属性为数据库表字段。

Mybatis-Plus 插件有这个功能,可以看一下

@TableName:数据库表相关

@TableId:表主键标识

@TableField:表字段标识

@TableLogic:表字段逻辑处理注解(逻辑删除)
7.查询和分页
1)查询构造器:Wrapper
QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper)的父类用于生成sql的where条件,entity属性也用于生成sql的where条件。MP3.x开始支持lambda表达式,LambdaQueryWrapper,LambdaUpdateWrapper支持lambda表达式的构造查询条件。
条件:

  • allEq :基于map的相等
  • eq :等于=
  • ne :不等于 <>
  • gt :大于 >
  • ge:大于等于 >=
  • lt :小于 <
  • le :小于等于 <=
  • between :BETWEEN 值1 AND 值2
  • notBetween:NOT BETWEEN 值1 AND 值2
  • like :LIKE “%值%”
  • notLike :NOT LIKE “%值%”
  • likeLeft :LIKE “%值”
  • likeRight :LIKE “值%”
  • isNull:字段 IS NULL
  • isNotNull :字段 IS NOT NULL
  • in :字段 IN(value1,value2,…)
  • notIn :NOT IN(value1,value2,…)
  • inSal :字段 IN(sql语句) 例如:inSql(“age”,“1,2,3”) —> age in(1,2,3)
  • notInSql :字段 NOT IN(sql语句)
  • groupBy :GROUP BY 字段
  • orderByAsc :升序ORDER BY 字段,…ASC
  • orderByDesc :升序ORDER BY 字段,…DESC
  • orderBy :自定义字段排序 orderBy(true,true,“id”,“name”)–> order by id ASC,name ASC
  • having :条件分组
  • or :OR语句,拼接 + OR 字段 = 值
  • and :AND语句,拼接 + AND 字段 = 值
  • apply :拼接sql
  • last :在sql语句后拼接自定义条件
  • exists :拼接EXISTS(sql语句)例如:exists(“select id from table where age = 1”) -->exists(select id from table where age = 1)
  • notExists :拼接 NOT EXISTS(sql语句)
  • nested :正常嵌套 不带 AND 或者 OR
    1)、QueryWrapper:查询条件封装类
    方法:select 设置查询字段select后面的内容
    2)、UpdateWrapper:更新条件封装类
    方法:set 设置要更新的字段,MP拼接sql语句
    setSql 参数是sql语句,MP不在处理语句
    8.分页
    前提:配置分页插件,实现物理分页。默认是内存分页

分页查询
(1).配置分页插件

@Configuration //注明该类为配置类,相当于ssm中<bean>配置文件
public class Config {

    //分页插件
    @Bean
    public PaginationInterceptor PaginationInterceptor(){
        return new PaginationInterceptor();
    }
}

(2).分页

    /**
     *  QueryWrapper的作用:QueryWrapper:该类中设置数据用于当作查询时使用的条件  WHERE (amount > ?)
     *
     *  分页:
     *  1.统计记录数:SELECT COUNT(1) FROM goods WHERE (amount > ?)
     *  2.实现分页,在sql语句的末尾加入 limit 0, 2
     *      SELECT id,amount,price,name FROM goods WHERE (amount > ?) LIMIT ?,?
     *      Parameters: 50(Integer), 0(Long), 2(Long)
     */
    @RequestMapping(value = "/paging")
    public String test(Model model){
        QueryWrapper<Goods> qw = new QueryWrapper<>();
        qw.gt("amount", 50);

        //Preparing: SELECT id,amount,price,name FROM goods WHERE (amount > ?) LIMIT ?,?
        //Parameters: 50(Integer), 0(Long), 2(Long)
        IPage<Goods> page = new Page<>();
        //设置分页的数据
        page.setCurrent(1); //设置当前页
        page.setSize(2);  //每页记录数
        IPage<Goods> goodsIPage = goodsDao.selectPage(page, qw);
        List<Goods> records = goodsIPage.getRecords();
        for (Goods good : records) {
            System.out.println(good);
        }

        model.addAttribute("records",records);
        return "goods";
    }

9.MP生成器
准备条件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值