java小白第九天之MyBatis Plus
写在前面
本文是边看黑马b站视频边写的一片笔记, 文中大多图片都来自黑马视频. 旨在巩固学习以及方便后续查阅和供广大朋友们学习, 感谢黑马视频分享
01 MybatisPlus
01 快速入门
快速入门
02 简介
02 标准数据层开发
01 MyBatis Plus 分页查询功能
03 DQL 编程控制
01 条件查询方式
01 条件查询 – ``Wrapper
lt 小于 , gt 大于 , le 小于等于 , ge 大于等于 , eq 等于
02 条件查询-null 值处理
02 查询投影
查询指定字段或使用分组,计数等功能
03 复杂查询条件
04 字段与表名映射
01 问题一 表字段与编码属性设计不同步
**使用注解 @TableField(value = "表中字段名")
**
02 问题二 编码中添加了数据库中未定义的属性 online
使用注解 @TableField(exist = false)
说明该属性只在编程中使用,数据库中没有
03 问题三 默认查询开放了过多字段的查询权限
即默认查询会查询出所有字段内容,进行展示,包括密码等不可以直接展示的字段
在注解 @TableFiled中添加select属性
04 问题四 表明与编码类名不一致
05 注解 @TableField
06 注解 @TableName
04 DML 编程控制
01 id生成策略
雪花id
02 一些全局配置
03 多记录操作
一次删除多条记录
04 逻辑删除
直接将业务数据从数据库中删除,会影响其他有用数据,如下图所示
所以业务数据一般执行的是逻辑删除
即:使用一个专用字段标记该数据是否被删除
01 数据库的表中增加deleted字段
02 实体类增加属性 deleted
使用注解 @TableLogic
并注明value与deval的值,前者表示该条数据未删除,后者表示该条数据已删除
属性:deleted
+ 0: 未删除
+ 1: 已删除
+ 注意
+ 当使用 mybatis plus 中的查询语句时, deleted = 1 的记录不再显示,即 该属性的值会影响mybatis plus中所有其他 sql 操作,会自动加上 where deleted = 0 条件。 若想查询到该记录,自己写 sql,
这里也可以使用全局配置
执行结果示例
Sql语句为 UPDATE
逻辑删除步骤
记得设置 deleted 的默认值为0,表示未删除
单张表设置逻辑删除字段的属性:
记得标明注解中 value 与 deval 的值
全局配置逻辑删除字段 deleted
所有表都有一个字段表示逻辑删除
注意
- 使用逻辑删除后, mybatis plus 执行的删除操作变为更新操作
- 逻辑删除字段会影响到 mybatis plus 中其他 sql 操作的结果
05 乐观锁
解决并发问题
添加乐观锁的步骤
05 快速开发
导坐标
代码示例
package com.itheima;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
public class CodeGenerator {
public static void main(String[] args) {
//1.获取代码生成器的对象
AutoGenerator autoGenerator = new AutoGenerator();
//设置数据库相关配置
DataSourceConfig dataSource = new DataSourceConfig();
dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("root");
autoGenerator.setDataSource(dataSource);
//设置全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatisplus_04_generator/src/main/java"); //设置代码生成位置
globalConfig.setOpen(false); //设置生成完毕后是否打开生成代码所在的目录
globalConfig.setAuthor("黑马程序员"); //设置作者
globalConfig.setFileOverride(true); //设置是否覆盖原始生成的文件
globalConfig.setMapperName("%sDao"); //设置数据层接口名,%s为占位符,指代模块名称
globalConfig.setIdType(IdType.ASSIGN_ID); //设置Id生成策略
autoGenerator.setGlobalConfig(globalConfig);
//设置包名相关配置
PackageConfig packageInfo = new PackageConfig();
packageInfo.setParent("com.aaa"); //设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径
packageInfo.setEntity("domain"); //设置实体类包名
packageInfo.setMapper("dao"); //设置数据层包名
autoGenerator.setPackageInfo(packageInfo);
//策略设置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setInclude("tbl_user"); //设置当前参与生成的表名,参数为可变参数
strategyConfig.setTablePrefix("tbl_"); //设置数据库表的前缀名称,模块名 = 数据库表名 - 前缀名 例如: User = tbl_user - tbl_
strategyConfig.setRestControllerStyle(true); //设置是否启用Rest风格
strategyConfig.setVersionFieldName("version"); //设置乐观锁字段名
strategyConfig.setLogicDeleteFieldName("deleted"); //设置逻辑删除字段名
strategyConfig.setEntityLombokModel(true); //设置是否启用lombok
autoGenerator.setStrategy(strategyConfig);
//2.执行生成操作
autoGenerator.execute();
}
}