
目录
映射匹配兼容性:
为什么 MyBatis-Plus 要用 JavaBean 来对应数据库表
因此自然而然的出现了下面的一些问题:
1.当表字段与编码属性设计不同步时:
2.编码中添加了数据库中未定义的属性
3.采用默认查询开放了更多的字段查看权限
4.表名与开发设置不匹配
id生成策略控制:
1. AUTO(数据库自增)
ASSIGN_ID(分布式ID,雪花算法)
NPUT(手动输入)
ASSIGN_UUID(UUID字符串)
多记录操作:
逻辑删除:
乐观锁:
1.在数组库表中加一个乐观锁字段
2.在实体类中加上对应的字段
3.在MybatisPlus的拦截器中加上乐观锁的拦截器
前言:上一篇我们讲解了MybatisPlus查询的相关基础操作以及null值的处理,这一章节我们主要补充查询中存在的一些特殊情况如映射匹配兼容性,
当 MyBatis-Plus 执行 SQL 时,它需要知道我们的 Java 实体类对应数据库中的哪一张表。它的查找顺序是:注解 -> 全局策略 -> 实体类名(驼峰转下划线)。
其次就是在MybatisPlus这个框架中,我们写的JavaBean主要是为了将数据库表结构映射为内存中的 Java 对象。
MyBatis-Plus 选择用 JavaBean 作为实体类,是因为 JavaBean 的规范完美地解决了 ORM(对象关系映射) 的几个核心需求:
setter 方法,将数据库查询结果填入对象。
getter 方法,获取参数值拼接到 SQL 中(例如插入数据时获取字段值)。
概念 | 解释 |
|---|---|
JavaBean | 是一种代码编写规范 (私有属性 + getter/setter + 无参构造)。它就像一个通用的数据盒子。 |
数据库表对应 | 是 JavaBean 在持久层的一个具体应用场景。当 JavaBean 专门用来映射数据库表时,我们称之为实体类 (Entity)。 |
使用@TableField(value=“”)注解,写在模型类属性上方。value设置数据库表字段的名称。

exist:设置属性在数据库表字段中是否存在,默认为true。此属性无法与value合并使用
@TableField(exist = false)

如密码字段在执行的时候,会在前台进行展示,这样是完全不合理的,因此我们可以设置select设置属性是否参与查询


关于是现有JavaBean还是现有数据库表先出现
维度 | 先有数据表 (传统/数据驱动) | 先有 JavaBean (DDD/领域驱动) |
|---|---|---|
出发点 | 数据如何存储、如何查询更快 | 业务如何建模、如何封装规则 |
JavaBean 角色 | 数据的载体 (只有getter/setter) | 业务逻辑的核心 (包含行为方法) |
对应关系 | JavaBean 完全匹配数据库 | 数据库表适配 JavaBean (可能有映射转换) |
适用场景 | 报表系统、简单的CRUD后台、对性能要求极高的系统 | 业务逻辑复杂的核心系统、微服务、中台 |
设计者 | DBA、后端开发 | 领域专家、架构师、后端开发 |
主键id是什么,MyBatis-Plus执行 updateById、deleteById 等方法时,需要知道哪个字段是主键
如果没有标记,MyBatis-Plus就不知道用哪个条件去更新或删除
唯一标识一条记录,被其他表引用(建立表间关系),提高查询效率,数据库会自动为主键创建索引,所以通过主键查询是最快的。简单来说,主键就是每一行数据的"身份证号",主键就像是数据世界的"坐标",没有它,你就无法精确找到任何一条数据,也无法建立表与表之间的关系。
在MyBatis-Plus中,主键有多种生成方式,通过 @TableId 的 type 属性指定:
@TableId(type = IdType.AUTO)
private Long id;@TableId(type = IdType.ASSIGN_ID)
private Long id;@TableId(type = IdType.INPUT)
private String orderNo; // 主键可能是业务编号@TableId(type = IdType.ASSIGN_UUID)
private String id; // 注意这里是String类型作用维度 | 具体说明 | 类比理解 |
|---|---|---|
唯一标识 | 每条记录的唯一ID | 身份证号 |
查询速度 | 主键索引,查询最快 | 书的页码 |
表间关联 | 被外键引用,建立关系 | 人与人之间的亲属关系凭证 |
数据完整性 | 不能为null,不能重复 | 保证每个人都有一个唯一且有效的身份 |
我们也可以在yml文件中进行全局配置,不用在每个JavaBean中写注解

按照主键删除多条记录 List<Long> ids= Arrays.aslist(new Long[]{2,3});userDao.deleteBatchIds (ids); 根据主键查询多条记录 List<Long> ids= Arrays.asList(new Long[]{2,3});List<User> userList = userDao.selectBatchIds(ids);
在有些情况时,我们删除数据的时候,会导致业务数据从数据库中废弃。因此我们使用逻辑删除,并不是真正的把数据删除。,而是为数据设置为是否可用字段,需要删除时设置为不可用字段(如员工离职,但是员工做成的业务对公司有用,所以不能完全删除掉),数据保留在数据库中。
1.在数据库表添加逻辑删除字段
2.实体类中添加对应的字段,并表明是逻辑字段。

3.配置逻辑删除字面值(全局配置简化)

在实际生活中,某平台开放了秒杀活动,但只有100个名额,但是抢购的人很多,当就剩最后一个名额的时候,但又有很多人抢购,这个名额归谁呢,这时就需要我们的锁机制了。

在SQL发送到数据库之前,动态修改它。
乐观锁拦截器,乐观锁是一种解决并发冲突的机制,它假设并发冲突很少发生,所以在更新时检查数据是否被修改过。 mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return mpInterceptor;
拦截器帮我们做了三件事:
version = version + 1
AND version = 旧版本号
结语:
最后的最后,感谢大家观看到最后,如果对你有帮助,请一键三连,点赞,关注(拜托了),收藏,你的支持就是我最大的鼓励,持续更新对大家有帮助的知识!
