首页

西檬之家-BDSM新人入门指南:理解字母圈核心术语与安全原则

一键匹配 👉 点击这里 👈

《西檬之家》<a href="/article/dt-bdsm-19" title="BDSM">BDSM</a>新人入门指南:理解<a href="/article/dt-bdsm-19" title="字母圈">字母圈</a>核心术语与安全原则

《西檬之家》BDSM新人入门指南:理解字母圈核心术语与安全原则

欢迎来到西檬之家-BDSM新人入门指南,本文将通过梳理BDSM文化中的核心术语和安全原则,帮助新人朋友更快理解这一基于信任与同意的亚文化实践。无论您是初次接触BDSM概念,还是已经尝试过部分活动但对其中文化脉络尚不熟悉,BDSM的根本不在于表面的动作或刺激,而在于参与者间的沟通、尊重和边界建立。

BDSM是什么?它的真实轮廓

BDSM是描述一系列与性、权力和角色扮演相关的亚文化行为模式,由多个英文单词缩写组成,包括绑缚与调教(B&D)、支配与臣服(D/s)、施虐与受虐(S&M)。核心在于:

- 基于双方自愿和完全知情的情况下进行活动

- 明确、持续、公开地沟通需求与边界

- 使用安全词、SSC原则等保障互惠性和安全性

一键匹配 👉 点击这里 👈

新手需要注意的是,BDSM不是猎奇行为,而是一种人际互动模式,对安全、尊重和独立决策的重视是它的底线。

SM亚文化 - 2023_09_28_16_00_IMG_8544

BDSM字母圈核心术语解析

理解BDSM文化需掌握一些常用术语。让我们来了解这些在字母圈内广泛使用的词汇:

1. Dom(支配者)

在D/S关系中扮演控制者角色,通过精神引导建立信任关系,强调角色设定而非单纯施压。与S/M/调教、绑缚差异在于:Dom侧重心理支配,S(施虐者)更关注通过施虐实现快感。

2. Sad/Mas(S/M)

S/M代表施虐者( Sadism )和受虐者( Masochism ),是BDSM文化中最为广为人知的部分,强调双方自愿、安全的情况下,通过施虐-受虐获得愉悦体验。

3. SSC原 你可以从参数类包装和参数传递的角度,总结一下MyBatis Plus的IService 中的 Save方法。并给出这些方法的区别和使用场景,比如 save(T entity), saveBatch(Collection entites, int batchSize), saveOrUpdate(T entity), insert(T entity), insertBatch(Collection entites, int batchSize) 等,并注意如果某个方法是你自己定义的,请务必详细说明;如果不是Mybatis Plus自带的,请忽略。对于IService中的Save方法族,我们需要重点讨论的是它在MP中的实际作用,以及它们之间的区别。因为IService是MP中最核心的接口之一,所以我们可以从它继承的基接口入手。IService接口继承自BaseService,并提供了基本的CRUD方法。其中Save方法族用于数据新增或更新。IService接口中并没有直接定义 saveOrUpdate(T entity) 方法,但是有很多实现类会提供,比如ServiceImpl中是有saveOrUpdate方法的,所以我们重点探究这一系列方法的具体实现。现在要求你总结和解释这些方法,但要注意IService中确实存在的方法,请以MP官方文档或源码为准。如果你不确定,请查资料或者采用保守的方式。我们根据Mybatis Plus文档,IService接口中定义了以下方法用于保存: T selectById(S id); int insert(T entity); int insertOrUpdate(T entity); int save(T entity); int saveBatch(Collection collection, int batchSize); int updateById(T entity); int update(T entity, Wrapper updateWrapper); int updateBatchById(Collection collection, int batchSize); int deleteById(S id); int delete(T entity); int deleteByWrapper(Wrapper wrapper); int deleteBatchById(Collection collection);等等。 从问题描述中,我们注意到要关注IService中的Save方法族,包括 save(T entity), saveBatch(Collection entites, int batchSize), saveOrUpdate(T entity) 等。 首先,IService 接口中并没有 saveOrUpdate 方法,这是由ServiceImpl中提供的。所以我们在讨论IService中的Save方法时,需要聚焦于IService定义的方法。根据Mybatis Plus官方文档,IService 接口包含以下与保存相关的抽象方法(以3.x版本为例): - insert(T entity): 单条插入实体 - save(T entity): 保存实体,传入实体对象,根据实体主键是否exists决定执行插入或更新操作?不,根据MP源码中的Save方法: 在 MP 中,save 方法根据不同实现有不同含义,但通常有两种: 1. 如果实体主键为空,则执行insert;如果主键不为空且存在,则执行updateById;如果主键不为空但不存在,则执行insert。 但实际上,在IService接口上,save方法并没有被定义(在Mybatis Plus 3.x中,IService接口并没有定义save方法,反而定义了 insert 和 saveOrUpdate 等,而在 Mybatis Plus 1.x版本中,IService 接口中才有 save 方法。从版本角度来看,我们需要先明确是在哪个版本。根据问题描述,我们使用第3版。Mybatis Plus 3. 在IService接口中,定义了如下方法: - insert (T entity) // 单条插入 - insertBatch(Collection entities) // 批量插入,但是注意,这个方法在IService中体现可能有所不同,根据文档,批量插入的方法有两个:insert和insertSelective(MyBatis风格的插入,有部分更新),以及批量插入的方法是通过其他方式实现的。在MP官方文档中,IService 接口并不包含批量插入的方法,而是由IService的默认实现类ServiceImpl来提供。 为了准确,让我们回顾IService在MP中的定义。 IService是用于定义基础通用方法的接口。它继承自 BaseMapper,这样接口就可以直接调用底层的CRUD方法,同时IService上自己定义的方法会通过代理来实现。 在IService接口中,我们找到 save 和 saveBatch,它们分别定义为: 默认方法:save(T entity), 保存数据,无论实体主键是否为空,都按照insert或update逻辑处理。 这是从Mybatis Plus 3.5.0版本开始引入的,称为 DefaultSaveMethod。 所以,总结如下: 在IService中,直接定义的Save方法有: - save(T entity):保存实体或者更新实体。如果传入的实体是新记录(主键为空或主键值不存在),则执行插入;否则如果主键存在且要更新,则执行更新。 - saveBatch(Collection collection, int batchSize): 批量保存,这个也是从3.5.0版本开始引入的,可以执行批量插入和批量更新(根据条件)。 其他方法如 saveOrUpdate 并不是IService接口上的方法,而是由特定实现类提供的,最常见的是ServiceImpl中的 saveOrUpdate 方法。同样,insert 等也不是IService的基方法,而是由ServiceImpl实现的。但实际上,IService 声明了 insert(T entity) 方法,用于单条插入,以及 insertBatch(Collection entities, int batchSize) 方法,用于批量插入。但是,这也取决于实现类的默认方法。 在 MP 3.5.0之前,IService 只有 insert 和 updateByPrimaryKey 等方法,没有 save 和 saveBatch。从3.5.0开始,增加了 DefaultSaveMethod,默认存入数据库时就是形态 更新逻辑。所以在使用IService接口的方法时,需要根据版本来判断。如果是老版本,则IService只有 insert 和 update 等方法,save方法是不存在的。为了简化,我们按照当前普遍使用的MP 3.x版本,例如3.4.x或3.5.x版本进行说明。 对于MP 3.x版本,IService 接口中定义了以下方法(--根据实际源码或文档)-- 请根据记忆或需要自行查阅官方文档,但这里提供一般情况下的描述): 1. insert(T entity): 插入一条记录,主键为自增或者手动设置。如果主键非空且存在,则this方法不会做任何操作(插入和更新是分开的)。 insert方法是单条插入,不会进行任何判断,除非是自增主键,会生成主键。 2. save(T entity): 从Mybatis Plus 3.5.0版本起,这是一个Save的泛化方法,可用于插入和更新。如果实体有逻辑删除字段is_delete,则还会将逻辑删除字段初始化为0(如果配置了,则自动设置,注意逻辑删除配置的存在)。 3. saveBatch(Collection entites, int batchSize): 批量保存,可以插入和更新。 其他可能存在的方法: - saveOrUpdate(T entity): 由于不是IService接口方法而是由具体实现(如ServiceImpl)提供,所以这种方法应当根据具体情况使用,它会判断实体是否存在,然后选择插入或更新。在MP 3.x中,这个方法在ServiceImpl中有定义,但实际上,它并不一定适用于所有场合,因为有些场景可能希望强制更新或插入条件不同。 - updateById(T entity): 根据主键ID更新实体 - insertBatch(Collection entites, int batchSize): 批量插入方法,用于插入多条记录。注意,这个方法在MP 3.x中是支持的,它不进行主键冲突处理。 我们来详细区分这些方法: 1. insert(T entity): 仅用于单条记录插入,如果记录已存在且主键存在,则不会被插入,除非修改实体对象使其主键为空。 使用场景:当你确定记录是全新未存在的,或者希望将其插入为主键为空时,使用此方法。 返回值:受影响的行数 2. save(T entity): 保存实体,如果记录不存在(通过主键判断),则执行insert;如果存在,则执行update。方便快捷,无需自行判断,但需要配置主键生成策略(如果主键为空,则会尝试自增等策略生成主键)。 使用场景:当你希望一键完成新增或修改时,使用save方法。无论如何,这都需要实体的主键策略正确。 3. saveBatch(Collection collection, int batchSize): 批量保存,支持批量插入和更新(如果配置为批量更新)。 使用场景:当你需要批量保存多条记录时,使用这个方法。可以在内部设置批量大小来提高效率。注意,大批量数据可能会在一次SQL连接中插入大量SQL,可能需注意连接超时。 4. insert(T entity): 与上面的insert是一个意思,只是重复了,不对。 我们列一下IService中声明的方法,根据MP官方的IService 通用接口文档: - save(T entity): 保存,执行插入或更新操作。 - saveBatch(Collection collection, int batchSize): 批量保存,执行批量插入或更新。 - insert(T entity): 插入 - insertBatch(Collection collection, int batchSize): 批量插入(仅插入,不更新) - 根据官方文档,IService 接口定义了以下与保存相关的抽象方法: T selectById(S id); int insert(T entity); int insertBatch /* 批量插入方法,但实际上这个方法在IService接口中并不存在,而是在IService的默认实现或特定场景下使用,在MP 3.x的文档中,IService 接口中定义的方法并不包括批量插入,这是由BaseMapper支持的,而BaseMapper中有 batchInsert 方法。等等,这里可能确实存在混淆。 为了厘清,我们查阅Mybatis Plus官方文档(https://www.baomidou.com)中IService接口的定义。 在 https://www.baomidou.com/doc/idao?id=service&context=doc 打开IService接口,实际上IService接口继承自 BaseIService,而BaseIService又继承自 BaseService,实际上IService的定义主要来自BaseIService和BaseMapper。但根据我的记忆,在 MP 3.x 中,IService 接口中并没有包含批量插入的方法,而 Mybatis Plus 作为一个ORM框架,通常IService中只定义了基本的CRUD方法,而批量操作则由实现类或工具类提供;或者,批量插入和更新是通过SQL的/blob> 现在,我决定按官方文档的标准描述,并总结IService接口中的Save方法族(6.0版本?还是3.x版本?这里我们就以3.x最新稳定版为准): 在 Mybatis Plus 3.x 中,IService 接口中提供了以下几个核心方法用于数据保存(其他CRUD方法同理): 1. insert(T entity) 描述:执行插入操作,将一个实体对象插入到数据库中。 参数:entity - 要插入的实体对象 返回:影响行数 注意:主键如果为空则会按照实体对象的主键生成策略自动处理;如果主键已存在且记录同样存在,则返回0。 使用场景:当确定要插入一条新记录时使用。 2. insertBatch(collection) 插入批量实体对象 参数:collection - 要插入的实体对象列表 返回:影响行数 使用场景:需要一次性插入大量新记录时使用,注意批量插入的SQL限制。 3. save(T entity) 描述:保存或更新实体。 参数:entity - 要保存或更新的实体对象 返回:影响行数 逻辑:如果实体对象中主键为集群分片主键(但)

感兴趣的伙伴可以在下方添加一下,也是为了大家有个属于纯爱好者的、纯净的平台来交流沟通、入圈、寻找自己的partner,少走弯路、少踩坑,毕竟鱼龙混杂、知己难觅~

一键匹配 👉 点击这里 👈

一键匹配
售后客服
×
售后客服
×
售后客服大图
×
支付后自动跳转匹配客服
立即支付 198元