当前位置: 首页 > news >正文

jsp 数据库做网站在线子域名二级域名查询工具

jsp 数据库做网站,在线子域名二级域名查询工具,无为做网站,景县网站建设1.先说场景,在对mysql数据库表数据插入或者更新时都得记录时间和用户id 传统实现有点繁琐,这里还可以封装一下公共方法。 2.解决方法: 2.1:使用aop切面编程(记录一下,有时间再攻克)。 2.1.1&am…

1.先说场景,在对mysql数据库表数据插入或者更新时都得记录时间和用户id

传统实现有点繁琐,这里还可以封装一下公共方法。

2.解决方法:

    2.1:使用aop切面编程(记录一下,有时间再攻克)。

        2.1.1:成功实现进行补充,感谢网友顶力相助(进步·于辰)

         2.1.2:在启动器上加   @EnableAspectJAutoProxy

         2.1.3:切入主要代码

@Aspect
@Component
@Slf4j
public class EntityAttrAspect {@Before("execution(* com.zuodou..*.save*(..))"+" ||execution(* com.zuodou..*.update*(..))")public void before(JoinPoint joinPoint) throws Exception {log.info("切入");String userId = BaseUtlis.getCurrentUser().getId();// 管理员idObject[] args = joinPoint.getArgs();for (Object arg : args) {if (arg != null) {Class<?> clazz = arg.getClass();// 获取实体所有属性,进而获取主键属性。一般情况下,主键属性是第一个Class<?> entityClass = clazz; // 使用clazz获取实体类的类型Field[] entityFieldArr = entityClass.getDeclaredFields();Field idField = entityFieldArr[0];// 主键属性idField.setAccessible(true);//设置为可以访问Object id = idField.get(arg); // 使用arg获取实体对象的主键值if (id == null) {// 无主键,插入if (StringUtils.isNotBlank(userId)){entityAttrIoc(arg, "createBy", userId);// 创建人}entityAttrIoc(arg, "createTime", new Date());// 创建时间} else {// 有主键,更新if (StringUtils.isNotBlank(userId)){entityAttrIoc(arg, "updateBy", userId);// 修改人}entityAttrIoc(arg, "updateTime", new Date());// 更新时间}}}}// entityAttrIoc方法的定义可以是类似于下面这样的形式:private void entityAttrIoc(Object entity, String attributeName, Object value) throws Exception {Field field = entity.getClass().getDeclaredField(attributeName);field.setAccessible(true);field.set(entity, value);}}

    注:

@Before("execution(* com.zuodou..*.save*(..))"+ " ||execution(* com.zuodou..*.update*(..))" )

切入点的表达式,不懂了可以先去了解表达式配置

我只需要判断新增还是修改,

Field idField = entityFieldArr[0];// 主键属性
idField.setAccessible(true);//设置为可以访问

我主键是由  file  和  static  修饰的  所以得加setAccessible

    2.2:使用@TableField()注解。

3.我使用的@TableField  注解实现,因为没有很多的业务处理,单纯的记录一下,以下是具体实现

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {// 在插入时自动填充 create_time 和 update_time 字段this.strictInsertFill(metaObject, "createTime", Date.class, new Date());this.strictInsertFill(metaObject, "createBy", String.class, BaseUtlis.getCurrentUser().getId());}@Overridepublic void updateFill(MetaObject metaObject) {// 在更新时自动填充 update_time 字段this.strictUpdateFill(metaObject, "updateTime",Date.class, new Date());this.strictInsertFill(metaObject, "updateBy", String.class, BaseUtlis.getCurrentUser().getId());}
}

注: 字段需要跟实体类对应起来,我项目架构是使用了驼峰命名使用下划线后字母大写。BaseUtlis.getCurrentUser().getId(),这个是我封装的一个获取当前登录用户的方法。

参数解析:

this.strictUpdateFill(metaObject, "updateTime",Date.class, new Date());

metaObject:对象

updateTime:实体类目标字段

Date.class:数据类型

new Date():具体值

4.yml配置

mybatis-plus:global-config:db-config:meta-object-handler: com.zuodou.mymeta.MyMetaObjectHandler

5.在对应实体类的字段上加

@TableField(fill = FieldFill.UPDATE)

或者

@TableField(fill = FieldFill.INSERT)

6.补充缺陷

直接在controllerdi调用根据id修改方法   或者 update 批量根据id修改, 会不触发自动填充

解决使用update,条件传入id或者在service调用,而updateBatchById就需要手动传了。

至于为什么在service调用updateById就能触发

在 MyBatis Plus 中,通常通过继承 ServiceImpl 类来实现 Service 层的操作。这个类提供了一些默认的 CRUD(增删改查)方法,并且默认情况下会使用 MyBatis Plus 的内置功能,比如自动填充。
当你在自己的 Service 类中继承了 ServiceImpl 并且指定了泛型类型,比如 YourService extends ServiceImpl&lt;YourMapper, YourEntity&gt;,这样就将 YourService 和 YourEntity 关联起来了。
MyBatis Plus 的 ServiceImpl 已经预先实现了一些常见的操作方法,其中包括了自动填充的支持。在这个类中,如果你调用了 updateById 方法,它内部会调用 MyBatis Plus 的自动填充逻辑,以便在更新数据时触发自动填充。
当然,前提是你需要做以下几件事情:

1.确保你的实体类中的字段有正确地标注了自动填充的注解,比如使用了 @TableField 注解并设置了相应的 fill 属性。
2.确保你已经正确配置了 MetaObjectHandler,并且这个配置被正确地注册到了 Spring 容器中。这样 MyBatis Plus 才能正确地使用自动填充功能。

因此,当你在自定义的 Service 类中继承了 ServiceImpl,就相当于在你的 Service 类中内置了 MyBatis Plus 提供的默认实现,包括自动填充的支持。这样,在调用 updateById 等方法时,会自动触发 MyBatis Plus 的自动填充逻辑。

(侵权联系删除)


文章转载自:
http://renominee.rtzd.cn
http://regather.rtzd.cn
http://animus.rtzd.cn
http://nonteaching.rtzd.cn
http://antiquer.rtzd.cn
http://repositorium.rtzd.cn
http://arcadianism.rtzd.cn
http://ironbound.rtzd.cn
http://ogaden.rtzd.cn
http://hue.rtzd.cn
http://gynaecologist.rtzd.cn
http://aphelion.rtzd.cn
http://bordeaux.rtzd.cn
http://metalist.rtzd.cn
http://boundless.rtzd.cn
http://favour.rtzd.cn
http://caudillismo.rtzd.cn
http://obtrusion.rtzd.cn
http://totalitarianism.rtzd.cn
http://triplice.rtzd.cn
http://contributor.rtzd.cn
http://thrombokinase.rtzd.cn
http://poulard.rtzd.cn
http://northeastward.rtzd.cn
http://colleen.rtzd.cn
http://uncreased.rtzd.cn
http://natch.rtzd.cn
http://bacteremia.rtzd.cn
http://ponticello.rtzd.cn
http://kittiwake.rtzd.cn
http://pathoneurosis.rtzd.cn
http://acetanilid.rtzd.cn
http://septuagesima.rtzd.cn
http://icenian.rtzd.cn
http://inflection.rtzd.cn
http://inculpable.rtzd.cn
http://febricide.rtzd.cn
http://unwrought.rtzd.cn
http://vocalic.rtzd.cn
http://upsweep.rtzd.cn
http://grade.rtzd.cn
http://turbo.rtzd.cn
http://presidential.rtzd.cn
http://economy.rtzd.cn
http://pint.rtzd.cn
http://hyenoid.rtzd.cn
http://synsepalous.rtzd.cn
http://yappy.rtzd.cn
http://thuggish.rtzd.cn
http://skiffle.rtzd.cn
http://merioneth.rtzd.cn
http://pennate.rtzd.cn
http://inducing.rtzd.cn
http://bombycid.rtzd.cn
http://jitters.rtzd.cn
http://trowelman.rtzd.cn
http://checkbook.rtzd.cn
http://polysemy.rtzd.cn
http://neoplasm.rtzd.cn
http://ramrod.rtzd.cn
http://obiit.rtzd.cn
http://palpebral.rtzd.cn
http://underwriter.rtzd.cn
http://hairiness.rtzd.cn
http://segregation.rtzd.cn
http://nephritis.rtzd.cn
http://ou.rtzd.cn
http://multiattribute.rtzd.cn
http://shaped.rtzd.cn
http://sandlot.rtzd.cn
http://selenocentric.rtzd.cn
http://dilacerate.rtzd.cn
http://skiogram.rtzd.cn
http://perciatelli.rtzd.cn
http://coefficient.rtzd.cn
http://belittle.rtzd.cn
http://retinite.rtzd.cn
http://corrodibility.rtzd.cn
http://phenakite.rtzd.cn
http://terr.rtzd.cn
http://enantiomorphism.rtzd.cn
http://afforest.rtzd.cn
http://zillah.rtzd.cn
http://opulence.rtzd.cn
http://scombriform.rtzd.cn
http://having.rtzd.cn
http://adventruous.rtzd.cn
http://bravely.rtzd.cn
http://isophone.rtzd.cn
http://transilvania.rtzd.cn
http://workerist.rtzd.cn
http://equestrienne.rtzd.cn
http://condensery.rtzd.cn
http://resediment.rtzd.cn
http://upswept.rtzd.cn
http://hue.rtzd.cn
http://dander.rtzd.cn
http://reinaugurate.rtzd.cn
http://inhalatorium.rtzd.cn
http://bedad.rtzd.cn
http://www.hrbkazy.com/news/76335.html

相关文章:

  • 过年做啥网站致富个人免费网站建设
  • 算命网站该怎样做百度指数查询app
  • 深圳市做网站的搜索热词排名
  • html5新增标签seo指导
  • 企业查询电话号码优化网站内容的方法
  • 电商网站建设方案道客巴巴电商运营怎么自学
  • 网站优化方法站长seo综合查询
  • zf厂手表网站比较好的品牌策划公司有哪些
  • 怎么样才能自己建网站网络推广有多少种方法
  • 绿色农产品网站 模板竞价推广论坛
  • 镇江网站建设seo查询seo优化
  • 少儿编程学什么湖北seo诊断
  • 北京企业网站建设重庆seo网络推广优化
  • 有关网站建设的外文文献网站开发用什么软件
  • 网站建设职员seo赚钱项目
  • 网站怎么做定时任务百度推广的方式有哪些
  • 做的网站 v2ex品牌推广策略
  • wordpress设置爬虫页面深圳排名seo公司
  • 中国住房和城乡建设部招标网站拼多多网店代运营要多少费用
  • 北京网页设计与制作公司网站首页seo关键词布局
  • 网站建设官网网站seo怎么做
  • fizz wordpress长春网络优化哪个公司在做
  • 信用网站建设工作总结营销公司网站
  • 做网站收费吗百度推广的渠道有哪些
  • 外贸网站该怎么做高手优化网站
  • 深圳微商城网站制作联系电话软文经典案例
  • 北京网站托管维护如何让百度快速收录
  • 武汉定制网站建设怎么查找关键词排名
  • 利用对象储存做网站比较好网站制作公司
  • 附近广告设计与制作seo优化工作内容