首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跟我学Springboot开发后端管理系统2:Mybatis-Plus实战2

在上一篇文章讲述了如何使用Mybatis-plus自动生成代码,生成的代码具有单表操作数据库的能力,节约了开发时间。然后讲述了如何在Spring Boot中整合Mybatis-Plus。...Mybatis-Plus自动填充功能 在Matrix-web项目中,数据库的所有表都有四个公共字段,即create_by、create_time、update_by、update_time ,即存储了表数据的创建人...在对表插入一条数据的时候,需要自动填充四个字段,对表数据更新操作,需要更新后2个字段。但是如果在每个插入和更新业务逻辑里面, 手动的填充这四个字段,增加了工作量。..., /** * 更新填充字段 */ UPDATE, /** * 插入和更新填充字段 */ INSERT_UPDATE } 然后再表中映射的实体类...{ ... } 当调用SysUserMapper插入SysUser数据的时候,就会自动在数据库中插入create_by、create_time、update_by、update_time这四个数据。

68130

Mybatis-Plus增强包

当@Bind*系列注解用在对象上即表达一对一,当注解在List上时便表达一对多的意思,当外部对象本身就是查询集合的情况下便是多对多的场景了。...ADMIN".equals(userRule); } } BaseEntity使用 通常的表设计中,都会要求添加一些审计数据,比如创建人、创建时间、最后修改人、最后修改时间,但是这些属性又不应该属于业务的...为了简化数据审计字段的工作量,框架内部集成了BaseEntity @Getter @Setter public class BaseEntityID_TYPE extends Serializable...primary属性,在多个Entity映射一张表的情况下,确定主Entity是哪个,数据表生成的时候根据主表来生成。...,默认为id ---- 动态条件注解 @DynamicCondition 描述: 适用场景:数据筛选,比如根据不同权限获取不同数据,用户只能看到自己的数据,管理员能看到所有人的数据。

1.5K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在线问题反馈模块实战(五):实现对通用字段内容自动填充功能

    /** * 自动补充插入或更新时的值 * * @author luoYong * @date @Component public class MpMetaObjectHandler implements...,即对于sys_questions表所对应的实体我们将直接继承BaseEntity类即可,只要是insert、update等相关插入、修改方法执行时就不需要再管这些通用字段的赋值问题了,都会自动通过MpMetaObjectHandler...其次还有一点需要注意的就是,你这么设置,就要注意在你获取用户信息的时候,我是通过t登录生成token令牌从缓存中获取对于用户的userInfo;若对于开放接口(白名单)而言,它就是支持免登录通过接口调取...,那你就得注意获取用户信息是否支持了,如不支持那就你的实体最好就不要用自动填充,也就是不继承BaseEntity,自己在实体单独加上那些字段或者额外封装个通用实体类但不加mp的填充注解,这样也是可以的。...然后对于继承了BaseEntity又无法获取用户信息的,目前我也是没有办法避免它也会执行这个字段注入,发现个最笨的方法就是徒手写sql,在持久层定义mapper方法;虽然啊这方案比较low,但是能有效解决目前问题的

    26620

    实用API设计案例

    :查询我的关注企业/收藏资讯/收藏产品列表等 然后我在service中调用如下: /** * 我的关注/收藏 * * @param page 分页参数 * @param userAttention...例如这里service的第二行是:在userAttention中调用UserAttention::getUserId,并以user_id=userId作为where条件,在对应的数据库表名为user_attention...中取出attention_id,但mybatis-plus的selectList返回的是UserAttention,所以我们再使用并行流转换为attentionId List ids = list...extends BaseEntity> typeClass; } 然后我们再配置mvc配置fastjson序列化枚举以及Mybatis-plus通用枚举之后 再到Controller中调用service...type,分页拿到不同表的数据 例如传入MEMBER 传入NEWS 传入PRODUCT 这样就能用最少的代码做最多的事,达到事半功倍的效果

    32110

    一款极简单的 BaseEntity CRUD 方法

    开发方式,特别对单表或多表CRUD,利用继承节省了每个实体类的重复属性(创建时间、ID等字段),软件删除等功能,进行 crud 操作时不必时常考虑仓储的使用; 本文介绍 BaseEntity 一种极简约的...功能特点 自动迁移实体结构(CodeFirst),到数据库; 直接操作实体的方法,进行 CRUD 操作; 简化用户定义实体类型,省去主键、常用字段的配置(如CreateTime、UpdateTime...package FreeSql.Provider.Sqlite 1、定义一个主键 int 并且自增的实体类型,BaseEntity TKey 指定为 int/long 时,会认为主键是自增; public...{ get; set; } } 3、定义多主键的实体类型,可以在 static 构造函数中重写字段名; public class User2 : BaseEntity时,软删除条件会附加在每个表中; 有关更多查询方法,请参考资料:https://github.com/2881099/FreeSql/wiki/%e6%9f%a5%e8%af%a2

    94510

    在线问题反馈模块实战(四):封装通用字段类

    所以我直接将所有表中通用字段都统计了一遍,却发现有一部分字段每张表基本都涉及,比如uuid,creator、updator、create_time及update_time,总共将近20张表,其中这些字段在...14张表中是有完整出现的,所以,猜猜我接下来要干嘛?        ...对的,被你们猜对了,第一步可以将这些通用字段都抽取出来,我这就直接将该通用字段抽到一个新实体中,且命名为:BaseEntity.java。...对于这部分通用字段的内容填充,在日常的增删改过程中,赋值逻辑,代码是不是大量重复了,对吧,你们仔细想想,是不是这部分字段赋值逻辑都是一模一样的,获取登录人信息设置创建人,修改人,然后new Date()...使用aop切面请求,在调用insert或update时,获取实体然后将通用字段信息赋值,这是最开始的玩法,但是现在啊,我不教学你那么复杂的实现方式,重复造轮子不好玩,我要的是你们能现学现用,而这一期的内容

    15040

    数据权限,一个注解搞定!

    部门表在设计的时候,有一个 ancestors 字段,通过这个字段可以非常方便的查询一个部门的子部门。 最后两张关联表就没啥好说了。 好了,这些都分析完了,我们就来看看具体的实现。 3....由于数据权限实现的核心思路就是在要执行的 SQL 上动态追加查询条件,那么动态追加的 SQL 必须要考虑到原本 SQL 定义时的部门表别名和用户表别名。这两个属性就是用来干这事的。...由于一个用户可能有多个角色,所以在 dataScopeFilter 方法中要先遍历角色,不同的角色有不同的数据权限,这些不同的数据权限之间通过 OR 相连,最终生成的补充 SQL 的格式类似这样 AND...那么这里还涉及到一个细节,前面 SQL 在定义时,用的表别名是什么,我们在 @DataScope 中指定的别名就要是什么。...sys_user 表中的 dept_id 字段是表示这个用户所属的部门 id,而 sys_role_dept 表中是描述某一个角色能够操作哪些部门,这是不一样的,把这个捋清楚了,上面的 SQL 就好懂了

    2.6K10

    混搭 TypeScript + GraphQL + DI + Decorator 风格写 Node.js 应用

    不同于现有的所有其他 JavaScript ORM 框架,TypeORM 支持 Active Record 和 Data Mapper 模式(在我这次写的项目中,使用的是 Active Record...MVC 架构,实际开发过程中还会有更细分的优化,主要体现两方面: 为了方便后期扩展,还会引入 中间件(middleware) 机制,这些概念相信但凡写过 Koa/Express 的都知道 —— 不过这里还是重述一下...字段,它的类型是 Article[] ,在使用 @Field 注解时需要注意,因为我们想表示数组一定存在但有可能为空数组情况,需要使用 {nullable: "items"}(即 [Item]!)...class Article extends BaseEntity { @PrimaryGeneratedColumn() @Field(type => ID) id: number;...前端的技术发展迭代相对来说迭代比较快,这是好事,能让你用新技术做得更少、收获地更多;当然不可否认这对前端同学也是挑战,需要你都保持不断学习的心态,去及时补充这些新的知识。学无止境,与君共勉。

    3.3K20

    ASP.NET MVC 5 - 给电影表和模型添加新字段

    你可能不希望这样的事情发生:在某些情况下,当您更改数据测试时,你希望你的变化后数据库同步更新。在这种情况下,你想要做一个有条件的插入操作:只有当它不存在的时候,插入一行。...您可以在创建新的电影时指定一个电影等级。...你看到这个错误,因为更新的的Movie模型类中比现在Movie现有数据库表的schema不同。 (在数据库表中没有Rating列。) 有几个解决错误的方法: 1....下面的图片显示了 程序包管理器控制台窗口的输出 (日期戳前面添加的评级会有所不同) ? 重新运行应用程序,然后浏览 /Movies 的 URL。您可以看到新的评级字段。 ?...该项目目前正在使用的迁移 (migrations),当你添加新的字段或更新数据库Schema, 你不需要删除数据库。在下一节中,我们将让更多的架构更改,并使用迁移来更新的数据库。

    2.4K80

    Entity Framework Repository模式

    在数据访问层,我们可以专门的为每个类进行封装业务处理类,但是其中类与类之间相同或类似的代码段太多,对于编码人员来说,更是浪费时间,同样的代码,要在项目的不同使用地方,进行多次的复制修改几个代码字段即可使用...基于以上考虑引出了我们的Repository设计模式。 Repository设计模式  在《企业架构模式》中,译者将Repository翻译为资源库。...给出如下说明:通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调。...类 BaseEntity类中定义了所有参加数据操作实体的公共属性,因此我们把该类定义为抽象类,作为派生类的的基类。...具有一定的灵活性 我们发现接口的泛型TEntity有一个约束需要继承BaseEntity,BaseEntity就是把实体中公共的属性抽取出来,比如:Id(主键),CreateDate(创建时间)等。

    1.1K10

    Spring data 相关注解

    @MappedSuperclass标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够隐射在其子类对用的数据库表中 @MappedSuperclass标识得嘞不能再有@Entity...(name = "id") //声明该属性与数据库字段的映射关系。...在javax.persistence.GenerationType中定义了以下几种可供选择的策略: IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式; AUTO...可以用来在使用jpa的时记录一些业务无关的字段,比如最后更新时间等等。...2)数据库插入 @PrePersist和@PostPersist事件在实体对象插入到数据库的过程中发生: @PrePersist事件在调用persist()方法后立刻发生,此时的数据还没有真正插入进数据库

    2.1K20

    第四十四章: 基于SpringBoot & AOP完成统一资源自动查询映射

    implements Serializable{} 该类仅仅实现了Serializable接口,在创建业务实体时需要继承该类,这也是基本的设计规则,方便后期添加全局统一的字段或者配置。...注解用于配置在查询结果的字段上,如:我们查询用户头像时定义的字段为userHeadImage,我们这时仅仅需要在userHeadImage字段上添加ResourceField即可。...、多个对象进行调用不同的方法 统一资源方法自动根据@ResourceField注解配置信息以及对象类型配置@Id字段的值作为目标对象编号设置资源到返回对象内。...我们一般在开发过程中,用户表内对应的实体是不允许根据业务逻辑修改的,如果你需要变动需要继承实体后添加对应的字段即可。...在方法返回对象时就会被资源自动处理分别将查询到的资源设置到UserDetailDTO内的headImage、backImage。

    1.5K90

    ASP.NET MVC 2示例Tailspin Travel UI层分析

    下面重点来说明一下管理后台的DynamicData的结构,先可以阅读一下Scott Guthrie 的文章 新的ASP.NET动态数据支持: ASP.NET 动态数据在进行创建和更新数据时还会对所录入的数据进行验证...比如字段是日期类型,则只允许录入日期。 ASP.NET 动态数据具有自动格式功能:比如 bit 类型的字段显示为一个多选框,而标识字段不会在插入数据时显示出来。...DynamicData/Content/FilterUserControl.ascx 在显示表中的数据时,该控件显示在表头,用以过滤表中的内容,比如可以只列表产品目录为“实用工具”的产品。...包含各种类型的字段在查看和创建、编辑时所呈现的控件。 DynamicData/PageTemplates 文件夹。包含在进行查看、编辑时的页面模板。...Dynamic Data还有一个快速开发的基础是脚手架,脚手架是一种机制,通过脚手架,我们不必再为每一个表的增加、查看、修改做不同的页面,因为脚手架会自动生成这些页面。

    1.6K90

    SpringBoot之使用jpahibernate

    图2.1     bootstrap.yml内容如下,我们不需要手动创建数据库表,jpa/hiberate会自动会为我们创建的 server: port: 9092 servlet: context-path...org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy,那么当实体的属性为驼峰结构时,对应到数据库表的字段上,会用...= userRepository.save(user); log.info("返回,{}", save); return save; } } 4、验证     在浏览器地址栏中输入.../serviceB/queryUser/1     一些思考: 自动创建表结构,我们不需要手动去创建,我们修改实体的时候,系统会自动更新数据库中的表结构。...所有实体都继承BaseEntity,那么每个实体对应的数据库表,在创建日期、更新日期等共有属性都同一了,这样在一定程度上便于代码理解和系统维护。

    1.1K10
    领券