# 前言
代码天生器插件选择去这里:https://www.cnblogs.com/zixq/p/16726534.html
干系插件在那里面已经提到了
# 上手
MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高服从而生
PS:要打开官网需要将欣赏器的广告拦截插件添加白名单,详细操纵访问官网即可看到
官网入手示例:https://www.baomidou.com/getting-started/
1、依赖- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter-test</artifactId>
- <version>3.5.7</version>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
- <version>3.5.7</version>
- </dependency>
复制代码 2、接口 extends BaseMapper。该接口界说了单表CRUD的一些常用API- // 泛型 User 是与数据库对应的实体类
- public interface UserMapper extends BaseMapper<User> {
- }
复制代码
Mybatis-Plus就是根据PO实体的信息来推断出表的信息,从而天生SQL的。默认情况下:
- MybatisPlus会把PO实体的类名驼峰转下划线作为表名
- MybatisPlus会把PO实体的全部变量名驼峰转下划线作为表的字段名,并根据变量类型推断字段类型
- MybatisPlus会把名为id的字段作为主键
但很多情况下,默认的实现与实际场景不符,因此MybatisPlus提供了一些注解便于我们声明表信息
3、然后就可以像调用自界说mapper接口方法一样调用了
# 注解
更多注解看官网:https://www.baomidou.com/reference/annotation/
@TableName:用来指定表名
@TableId:用来指定表中的主键字段信息。IdType枚举如下
- AUTO:数据库自增长
- INPUT:通过set方法自行输入
- ASSIGN_ID:分配 ID(默认方式),接口IdentifierGenerator的方法nextId来天生id,默认实现类为DefaultIdentifierGenerator雪花算法
@TableField:用来指定表中的普通字段信息
使用@TableField的常见场景:
- 成员变量名与数据库字段名不同等
- 成员变量名以is开头,且是布尔值
- 成员变量名与数据库关键字冲突
- 成员变量不是数据库字段
# 配置
兼容MyBatis的配置
另外更多配置,查看官网:https://www.baomidou.com/reference/
- mybatis-plus:
- type-aliases-package: com.zixq.mp.domain.po # 别名扫描包
- mapper-locations: "classpath*:/mapper/**/*.xml" # Mapper.xml文件地址,默认值
- configuration: map-underscore-to-camel-case: true # 是否开启下划线和驼峰的映射
- cache-enabled: false # 是否开启二级缓存
- global-config:
- db-config:
- id-type: assign_id # id为雪花算法生成 这个优先级没有使用 @TableId 注解高
- update-strategy: not_null # 更新策略:只更新非空字段
- # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
- logic-delete-field: deleted
- logic-delete-value: 1 # 逻辑已删除值(默认为 1)
- logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
复制代码逻辑删除进行上面配置后mp就可自动实现delete变update操纵了,但逻辑删除会占用空间,影响性能,所以可采用删除前将数据迁移到另一张表中
# 条件构造器
1、QueryWrapper 和 LambdaQueryWrapper一般用来构建select、delete、update的where条件部分
2、UpdateWrapper 和 LambdaUpdateWrapper通常只有在set语句比较特殊才使用,如set的是 money = money - 1000
3、尽量使用LambdaQueryWrapper 和 LambdaUpdateWrapper,避免硬编码
BaseMapper包含的Wrapper构建起
AbstractWrapper
QueryWrapper
UpdateWrapper
# 示例
1、QueryWrapper根据指定字段和条件查询
SQL- SELECT id, username, info, balance
- FROM `user`
- WHERE username LIKE ? AND balance >= ?;
复制代码 mp构建:
[code]// 1、构建查询条件Querywrapper wrapper = new QueryWrapper entityClass, Log log, Collection |