MybatisPlus核心用法

MybatisPlus核心用法

1.使用MybatisPlus的基本步骤:

①引入MybatisPlus依赖,代替Mybatis依赖

<!--MybatisPlus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

②定义Mapper接口并继承BaseMapper

public interface UserMapper extends BaseMapper<User> {}

③在实体类上添加注解声明 表信息

④在application.yml中根据需要添加配置

2.MybatisPlus是如何获取实现CRUD的数据库表信息的?

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

约定:

•默认以类名驼峰转下划线作为表名

•默认把名为id的字段作为主键

•默认把变量名驼峰转下划线作为表的字段名

3.MybatisPlus的常用注解有哪些?

•@TableName:指定表名称及全局配置

•@TableId:指定id字段及相关配置

•@TableField:指定普通字段及相关配置

如果表名称和实体类名称不符合约定该怎么做?

使用注解来设定表名、主键、普通字段信息等。

在这里插入图片描述

IdType的常见类型有哪些?

•AUTO、ASSIGN_ID、INPUT

使用@TableField的常见场景是?

•成员变量名与数据库字段名不一致

•成员变量名以is开头,且是布尔值

•成员变量名与数据库关键字冲突

•成员变量不是数据库字段

4.MyBatisPlus的配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如:

mybatis-plus:
	type-aliases-package: com.itheima.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为雪花算法生成
			update-strategy: not_null # 更新策略:只更新非空字段

具体可参考官方文档:使用配置 | MyBatis-Plus (baomidou.com)

5. 核心功能

条件构造器

在这里插入图片描述

条件构造器的用法:

•QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分

•UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用

•尽量使用LambdaQueryWrapper和 LambdaUpdateWrapper,避免硬编码

自定义SQL

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

①基于Wrapper构建where条件

List<Long> ids = List.of(1L, 2L, 4L);
int amount = 200;
// 1.构建条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().in(User::getId, ids);
// 2.自定义SQL方法调用
userMapper.updateBalanceByIds(wrapper, amount);

②在mapper方法参数中用Param注解声明wrapper变量名称,必须是ew

void updateBalanceByIds(@Param("ew") LambdaQueryWrapper<User> wrapper, @Param("amount") int amount);

③自定义SQL,并使用Wrapper条件

<update id="updateBalanceByIds">
    UPDATE tb_user SET balance = balance - #{amount} ${ew.customSqlSegment}
</update>

Service接口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MP的Service接口使用流程是怎样的?

自定义Service接口继承IService接口

public interface IUserService extends IService<User> {}

自定义Service实现类,实现自定义接口并继承ServiceImpl类

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {}

其中我们可以利用ServiceImpl中实现的方法直接进行增删改查等上图的操作。

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

lambaQuery.eq(条件,使用反射获取属性,属性的值也就是参数)
lambaUpdate同理,但最后要跟上.update();

6.DB静态方法

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

使用的时候必须给lambadQueryg一个实体类对象

7.逻辑删除

逻辑删除就是基于代码逻辑模拟删除效果,但并不会真正删除数据。思路如下:

•在表中添加一个字段标记数据是否被删除

•当删除数据时把标记置为1

•查询时只查询标记为0的数据

例如逻辑删除字段为deleted:

•删除操作:

UPDATE user SET deleted = 1 WHERE id = 1 AND deleted = 0

•查询操作:

SELECT * FROM user WHERE deleted = 0

MybatisPlus提供了逻辑删除功能,无需改变方法调用的方式,而是在底层帮我们自动修改CRUD的语句。我们要做的就是在application.yaml文件中配置逻辑删除的字段名称和值即可:

mybatis-plus:
	global-config:
		db-config:
			logic-delete-field: flag # 全局逻辑删除的实体字段名,字段类型可以是boolean、integer
			logic-delete-value: 1 # 逻辑已删除值(默认为 1)
			logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

8.枚举处理器

在这里插入图片描述

如何实现PO类中的枚举类型变量与数据库字段的转换?

①给枚举中的与数据库对应value值添加@EnumValue注解

给自定义的枚举类中添加@EnumValue注解如上右图

②在配置文件中配置统一的枚举处理器,实现类型转换

mybatis-plus:
	configuration:
	default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

9.JSON处理

在数据库表中存在info是JSON类型的,当我们想要获取info中的age或者其他属性时,很难获取到,这时候要使用JSON处理器。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值