写过一篇 发表于 2024-7-10 13:42:06

MyBatis-Plus 整理

# 前言

代码天生器插件选择去这里: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> {
}https://img2023.cnblogs.com/blog/2421736/202407/2421736-20240708220102816-473347264.png
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,避免硬编码
https://img2023.cnblogs.com/blog/2421736/202407/2421736-20240708234057291-1405408762.png
BaseMapper包含的Wrapper构建起
https://img2023.cnblogs.com/blog/2421736/202407/2421736-20240708234327058-299125383.png
AbstractWrapper
https://img2023.cnblogs.com/blog/2421736/202407/2421736-20240708234424824-1274714654.png
QueryWrapper
https://img2023.cnblogs.com/blog/2421736/202407/2421736-20240708234459227-1401471547.png
UpdateWrapper
https://img2023.cnblogs.com/blog/2421736/202407/2421736-20240708234522078-248086885.png
# 示例

1、QueryWrapper根据指定字段和条件查询
SQL
SELECT id, username, info, balance
FROM `user`
WHERE username LIKE ? ANDbalance >= ?;mp构建:
// 1、构建查询条件Querywrapper wrapper = new QueryWrapper entityClass, Log log, Collection
页: [1]
查看完整版本: MyBatis-Plus 整理