重新加装MybatisPlus
1.字段填充器注意重写了strictFill方法统一规范,字段填充的值和类型所有的表都一样。所以不作类型判断。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253@Componentpublic class FieldAutoFillHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { User user = CurrentUser.getCurrentUser(); this.strictInsertFill(metaObject, "deleteFlag", null, DeleteFlag.N); this.strictInsertFill(metaObject, "isDelete", ...
MybatisPlus针对Saas系统的动态多租户插件
多租户就是用额外的一个字段代表当前表中的数据的归属。在sql curd时根据上下文的用户(租户) 自动拼接此条件动态就是有些表是公用的,没有多租户的概念。那么操作此表的时候需要排除,亦或者多个字段,每个字段的值都不一样等
前期工作1.首先定义一个多租户字段的枚举,为提取数据库多租户字段的字段做准备IEnums参考通用枚举
1234567891011121314151617181920212223242526272829303132@Getterpublic enum TenantField implements IEnums<String> { // mid 为我们系统的租户字段 // CurrentTenant 是业务系统的上下文,比如说当前的登录用户信息,可以自由改造 MID("商户id", "mid", () -> CurrentTenant.getCurrentTenant().getMid()), ; private final String[] dbFieldNames; ...
mybatisPlus分析Lambda语法原理
用lambda就不用写字符串了,这个对于开发业务来说,能减少很多的错误发生。尤其是字段写错了,数据库变更字段名了,等。用法如下
1eq(FissionCoupon::getMid, mid)
他会自动转换为mid,那他的原理是什么呢?原来他接受的是一个可序列化的Function对象
123@FunctionalInterfacepublic interface SFunction<T, R> extends Function<T, R>, Serializable {}
其实用到了jdk自带的序列化。因为lambda是个特殊的实例,也是个特殊的class。在序列化的时候lambda实例中有一个writeReplace方法。
可参考jdk的序列化 Serializable原理该方法的返回值是一个lambda描述对象,java.lang.invoke.SerializedLambda 1234567891011121314public final class SerializedLambda implements Serializabl ...