山西住房和建设厅网站厦门网页建站申请比较好

news/2025/9/29 7:32:36/文章来源:
山西住房和建设厅网站,厦门网页建站申请比较好,珠海企业营销型网站建设公司,金寨县住房和城乡建设部网站目录 一、完善解散部门功能 二、spring 事务 #xff08;1#xff09;Transactional 事务管理 ① rollbackFor 控制异常类型 ② propagation 事务传播控制 1、定义解散部门操作日记 三、AOP基础 1、概述 2、快速入门 #xff08;1#xff09;案例#xff1a;统…目录 一、完善解散部门功能 二、spring 事务  1Transactional 事务管理 ① rollbackFor 控制异常类型 ② propagation 事务传播控制 1、定义解散部门操作日记 三、AOP基础 1、概述 2、快速入门 1案例统计各个业务层方法的执行耗时 ① 引入AOP依赖 ② 建立AOP类 3、AOP核心概念 1AOP的执行流程  四、AOP进阶 1、通知类型 1PointCut 公共切点表达式  2、通知顺序 3、切入点表达式 1execution 2annotation 4、连接点 五、AOP案例 1引入AOP依赖 2在数据库里建操作日记记录表 3定义数据库表对应的实体类 4定义对应的Mapper接口 5定义注解 6完成AOP类编写 7给需要匹配的增删改方法加上注解 一、完善解散部门功能 删除部门时应该把部门下相应的员工也一并删除 注意数据库不推荐物理外键一般都是逻辑外键 step 1改写Dept的Service层 Overridepublic void delete(Integer id) {deptMapper.deleteById(id); //根据部门id删除部门empMapper.deleteByDeptId(id); //根据部门id删除该部门下对应的员工} step 2完善Emp的mapper层 //根据部门id删除对应员工Delete(delete from emp where dept_id #{deptId})void deleteByDeptId(Integer deptId); 二、spring 事务  当中间出现异常时会出现异常前的语句执行了但是异常后的语句没有成功执行会出现bug 因此我们需要进行事务回滚事务回滚指的是当发生错误或异常时事务能够自动地撤销已经执行的操作返回到事务开始之前的状态  1Transactional 事务管理 ① rollbackFor 控制异常类型 作用控制出现何种异常类型事务回滚默认情况下只有出现RuntimeException才会回滚异常 Transactional(rollbackFor Exception.class)Overridepublic void delete(Integer id) {deptMapper.deleteById(id); //根据部门id删除部门empMapper.deleteByDeptId(id); //根据部门id删除该部门下对应的员工} ② propagation 事务传播控制 作用当一个事务方法被另一个事务方法调用时这个事务方法应该如何进行事务控制 属性值含义REQUIRED默认值需要事务有则加入无则创建新事务REQUIRES_NEW 需要新事务无论有无事务总是创建新事务 当我们不希望事务相互影响时使用 这里我们运用一个案例进行详细说明 要求解散部门时无论解散成功or失败都要记录操作日志 1、定义解散部门操作日记 1DeptLog实体类 // 解散部门日志 Data //Data注解的主要作用是提高代码的简洁使用这个注解可以省去实体类中大量的get()、 set()、 toString()等方法 NoArgsConstructor AllArgsConstructor public class DeptLog {private Integer id;private LocalDateTime createTime;private String description; } 2DeptLogService public interface DeptLogService {//插入日志void insert(DeptLog deptLog); } public class DeptLogServiceImpl implements DeptLogService {Autowiredprivate DeptLogMapper deptLogMapper;TransactionalOverridepublic void insert(DeptLog deptLog) {deptLogMapper.insert(deptLog);} } 3DeptLogMapper Mapper public interface DeptLogMapper {Insert(insert into dept_log(create_time,description) values (#{createTime},#{description}))void insert(DeptLog deptLog); } 因为若不指定propagation的值默认为REQUIRED即为若需要新事务则无需再创建直接加入已有事务也就是insert方法加入到delete方法的事务中此时若delete事务出现异常整个事务发生回滚因此也不会有日志记录因此我们需要在insert上指定propagation的值为REQUIRES_NEW即若需要新事务则再开一个新事务当delete事务出现异常时只在delete事务中发生回滚insert事务正常运行日志正常记录 Transactional(rollbackFor Exception.class)Overridepublic void delete(Integer id) {try{deptMapper.deleteById(id); //根据部门id删除部门empMapper.deleteByDeptId(id); //根据部门id删除该部门下对应的员工}finally {DeptLog deptLog new DeptLog();deptLog.setCreateTime(LocalDateTime.now());deptLog.setDescription(本次解散的是id号部门);deptLogService.insert(deptLog);}}Transactional(propagation Propagation.REQUIRES_NEW)Overridepublic void insert(DeptLog deptLog) {deptLogMapper.insert(deptLog);} 三、AOP基础 1、概述 开发中在多个模块间有某段重复的代码我们通常是怎么处理的在传统的面向过程编程中我们也会将这段代码抽象成一个方法然后在需要的地方分别调用这个方法这样当这段代码需要修改时我们只需要改变这个方法就可以了。然而需求总是变化的有一天新增了一个需求需要再多出做修改我们需要再抽象出一个方法然后再在需要的地方分别调用这个方法又或者我们不需要这个方法了我们还是得删除掉每一处调用该方法的地方。实际上涉及到多个地方具有相同的修改的问题我们都可以通过 AOP 来解决 AOP 的主要作用就是在不侵入原有程序的基础上实现对原有功能的增强 2、快速入门 1案例统计各个业务层方法的执行耗时 ① 引入AOP依赖 !--AOP--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency② 建立AOP类   Slf4j Component Aspect // AOP类 public class TimeAspect {Around(execution(* com.itroye.service.*.*(..))) //切入点表达式public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {//记录开始时间long begin System.currentTimeMillis();//调用原始方法Object result joinPoint.proceed();//记录结束时间long end System.currentTimeMillis();log.info(joinPoint.getSignature()执行耗时{}ms,end-begin);return result;} } 3、AOP核心概念 连接点 JoinPoint可以被AOP控制的方法 通知 Advice指重复的逻辑也就是共性功能 切入点 PointCut匹配连接点的条件通知仅会在切入点方法执行时被应用 切面 Aspect通知切入点 目标对象 Target通知所应用的对象 1AOP的执行流程  运行的不是原始的目标对象而是基于目标对象所生成的代理对象 四、AOP进阶 1、通知类型 前置通知Before在目标方法执行前执行的通知。后置通知After在目标方法执行后执行的通知无论目标方法是否抛出异常都会执行。返回通知AfterReturning在目标方法正常返回后执行的通知。异常通知AfterThrowing在目标方法抛出异常后执行的通知。环绕通知Around在目标方法执行前后都可以执行的通知可以控制目标方法的执行。 注意 Around 需要调用ProceedingJoinPoint.proceed()让原始方法执行其他通知不需要目标方法执行 Around 的返回值必须是Object来接收原始方法的返回值 1PointCut 公共切点表达式  Slf4j Component Aspect public class MyAspect1 {Pointcut(execution(* com.itheima.service.impl.DeptServiceImpl.*(..)))public void pt(){}Before(pt())public void before(){log.info(before ...);}Around(pt())public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {log.info(around before ...);//调用目标对象的原始方法执行Object result proceedingJoinPoint.proceed();log.info(around after ...);return result;}After(pt())public void after(){log.info(after ...);}AfterReturning(pt())public void afterReturning(){log.info(afterReturning ...);}AfterThrowing(pt())public void afterThrowing(){log.info(afterThrowing ...);} } 2、通知顺序 3、切入点表达式 1execution 2annotation 用于匹配标识有特定注解的方法 新建注解 Retention(RetentionPolicy.RUNTIME) //运行时机 Target(ElementType.METHOD) //该注解可以定义在方法上 public interface MyLog { } 在需要切入的切入点方法上加上该注解 然后在切面处 annotation(注解全类名即可匹配拥有该注解的方法 4、连接点 连接点就是可以被AOP控制的方法 在Spring中用JoinPoint抽象了连接点用它可以获得方法执行时的相关信息如目标类名、方法名、方法参数等 对于Around通知获取连接点信息只能用ProceedingJoinPoint对于其他四种通知获取连接点信息只能用JoinPoint它是ProceedingJoinPoint的父类型 五、AOP案例 思路分析 需要对所有Service的增删改方法添加统一功能使用AOP技术  运用Around环绕通知由于增删改方法名无规律自定义Log注解完成目标方法匹配 1引入AOP依赖 !--AOP--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency2在数据库里建操作日记记录表 -- 操作日志表 create table operate_log(id int unsigned primary key auto_increment comment ID,operate_user int unsigned comment 操作人ID,operate_time datetime comment 操作时间,class_name varchar(100) comment 操作的类名,method_name varchar(100) comment 操作的方法名,method_params varchar(1000) comment 方法参数,return_value varchar(2000) comment 返回值,cost_time bigint comment 方法执行耗时, 单位:ms ) comment 操作日志表; 3定义数据库表对应的实体类 Data NoArgsConstructor AllArgsConstructor public class OperateLog {private Integer id; //IDprivate Integer operateUser; //操作人IDprivate LocalDateTime operateTime; //操作时间private String className; //操作类名private String methodName; //操作方法名private String methodParams; //操作方法参数private String returnValue; //操作方法返回值private Long costTime; //操作耗时 } 4定义对应的Mapper接口 Mapper public interface OperateLogMapper {//插入日志数据Insert(insert into operate_log (operate_user, operate_time, class_name, method_name, method_params, return_value, cost_time) values (#{operateUser}, #{operateTime}, #{className}, #{methodName}, #{methodParams}, #{returnValue}, #{costTime});)public void insert(OperateLog log);} 5定义注解 Retention(RetentionPolicy.RUNTIME) //运行时机 Target(ElementType.METHOD) //该注解可以定义在方法上 public interface Log { }6完成AOP类编写 Slf4j Component Aspect //切面类 public class LogAspect {Autowiredprivate HttpServletRequest request;Autowiredprivate OperateLogMapper operateLogMapper;Around(annotation(com.itroye.anno.Log))public Object recordLog(ProceedingJoinPoint joinPoint) throws Throwable {//操作人ID - 当前登录员工ID//获取请求头中的jwt令牌, 解析令牌String jwt request.getHeader(token);Claims claims JwtUtils.parseJWT(jwt);Integer operateUser (Integer) claims.get(id);//操作时间LocalDateTime operateTime LocalDateTime.now();//操作类名String className joinPoint.getTarget().getClass().getName();//操作方法名String methodName joinPoint.getSignature().getName();//操作方法参数Object[] args joinPoint.getArgs();String methodParams Arrays.toString(args);long begin System.currentTimeMillis();//调用原始目标方法运行Object result joinPoint.proceed();long end System.currentTimeMillis();//方法返回值String returnValue JSONObject.toJSONString(result);//操作耗时Long costTime end - begin;//记录操作日志OperateLog operateLog new OperateLog(null,operateUser,operateTime,className,methodName,methodParams,returnValue,costTime);operateLogMapper.insert(operateLog);log.info(AOP记录操作日志: {} , operateLog);return result;}}7给需要匹配的增删改方法加上注解 这里是给Controller层加的注释 保证返回值都是Result

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI两周手搓一个进度管理神器,快来安排你的国庆假期吧

国庆假期又要来了 ,你的休假计划还停留在"想想就激动"的阶段吗?作为一个有追求的码农 ,当然深知计划的重要性,赶快打开Excel 📊,准备制定一份详细的假期进度安排。但,总觉得太low。默默地打开Projec…

asp开发网站详细步骤深圳建网站公司哪家好

作品展示:背景需求: 制作绿色数字的数字描字帖 选用字体:print dashed(虚线字体) 【教学类-44-03】20240111阿拉伯数字字帖的字体(三)——德彪钢笔行书(实线字体)和pri…

2017网站开发就业前景外贸网络做推广公司

java socket 与linux c 通信问题97w211 : 2010-2-09 18:08 :发表于 来源 科技复兴如题,用java 做客户端,linux 的c 程序做服务器端。目前客户端向服务器端发送信息已经没问题,但是在添加服务器端向客户端发送信息的功能时却出现了死循环。在E…

深圳住房城乡建设局网站物业管理系统论文

图片来源:视觉中国来源:帮尼资讯 部分参考来源:福布斯中国、凤凰网财经、前瞻产业研究院,图片来源网络最近,商汤港股IPO终于迎来新进展。12月7日,商汤集团在香港启动公开发售。据悉,香港公开发售…

帮我做网站推广青岛网站建设技术托管

Jumpserver开源跳板机系统部署1.简介Jumpserver使用Python / Django进行开发,遵循Web 2.0规范,配备了业界领先的Web Terminal解决方案,交互界面美观、用户体验好。Jumpserver采纳分布式架构,支持多机房跨区域部署,中心…

高校网站推广方案seo培训优化

提前讲的重要知识点 一个类在没有父类的情况下默认有一个父类为Object类。 而当在有父类情况下,如果你那父类没有父类,则其父类的父类默认为object类,所以即使一个类有父类,其内部还是有object类。 object类都是隐藏起来的&…

MX 练石 2025 NOIP #10

0 + 45 + 10 + 0 = 55, Rank .笑点解析:NOIP 模拟赛。 可惜没打 D 的暴力,不过 D 暴力给 30pts 也是很厉害了。2025 --【炼石计划 NOIP】-- 第十套 链接:link 题解:link 时间:4h20min (2025.09.28 07:40~12:10) 题…

建设网站多久衡阳网站建设网站

4.1 排序 4.1.1 选择排序 4.1.2 插入排序 4.1.3 排序与sort函数的应用 sort函数参数 sort(首元素地址,尾元素的下一个元素的地址,比较函数(cmp,非必填))如果不写比较函数,那默认对给定区间进行递增排序 如何实现比较函数 从基本数据类型、结构体类型、STL容器进行自定排…

网站改版开发公司360营销

还有两天2010就要结束了,写下自己的年终总结吧,以总结自己,展望明年。2010对我来说是怎样的一年呢?忙碌的一年,鸭梨更大的一年,折腾的一年,复杂的一年,梦游的一年,痛并快…

大港做网站网站建设中倒计时模板下载

计算机综合应用能力实训计算机综合应用能力实训单选题:1、应用倒角命令“chamfer”进行倒角操作时:A、不能对多段线对象进行倒角B、可以对样条曲线对象进行倒角C、不能对文字对象进行倒角D、不能对三维实体对象进行倒角2、不是环形阵列定义阵列对象数目和…

教育局门户网站建设目的不会代码可以做网站吗

🔥博客主页:小王又困了 📚系列专栏:每日一练 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、选择题 📝1.第一题 📝2.第二题 &#x1f4d…

体育视频网站建设wordpress用户名怎么设置密码

学习 Jedis、RedisTemplate、StringRedisTemplate之间的比较 博客中提到:一. Jedis是Redis官方推荐的面向Java的操作Redis的客户端。 二. RedisTemplate,StringRedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更…

网站对域名中国比较大的外包公司

我的目标是能够运行windows 下的大部分PE格式的程序,这一点通过实验已经证明完全是可行的。 PE格式主要有exe dll sys等文件,这三个文件可以用相同的函数解析, 主要有以下段组成, 1、文件头,包含DOS文件头、PE文件头…

昆明网站定制备案时网站建设方案书

上周最新版Firefox 66因为爆出会使微软Office 365中的PowerPoint文字消失的臭虫,Mozilla暂停发送。3月27日Mozilla重新释出修补完成的最新版Firefox 66.0.2。根据Mozilla臭虫报告网页,Firefox 66除了造成Office 365中的PowerPoint文字消失的问题外&#…

域名注册官方网站大连seo皮皮

随着互联网技术的飞速发展,网络安全问题日益凸显。跨站脚本攻击(XSS 攻击)作为一种常见的网络攻击手段,给网络应用和用户数据安全带来了严重威胁。本文深入探讨了 XSS 攻击的原理、分类、危害以及相应的防范措施,旨在提…

idea网站开发好用的网站链接

之前线上服务器分发配置都是用shell和expect脚本分发,脚本写了很长,上周换了ansible,现在自己用python写一个,就30行代码就可以实现需求,之前的shell写了快200行了,蛋疼,代码如下: f…

重庆网络推广网站福州云建站模版

目录 1、安装 2、激活 3、停止 1、安装 1)为项目新建一个目录(比如:目录命名为learning_log) 2)在终端中切换到这个目录 3)执行命令:python -m venv ll_env,即可创建一个名为ll…

国际学院网站建设的意义专业seo培训

郁金香2021年游戏辅助技术初级班(上) %p、size_t、%zd、%llu、FindWindow、GetWindowText、SetWindowTextGetWindowThreadProcessId、OpenProcess、ReadProcessMemory封接读内存接口函数 int R4(void* 地址)跨进程向目标进程内存地址写入数值 WriteProce…

帝国cms能建设视频网站吗重庆神态网站建设

默认情况下,MySQL只允许本地登录,即只能在安装MySQL环境所在的主机下访问。但是在日常开发和使用中,我们经常需要访问远端服务器的数据库,此时就需要开启服务器端MySQL的远程连接权限。1、生成环境,连接MySQL 2、查看M…

家具网站设计网站装宽带多少钱一个月

来源:环球时报据路透社报道,有消息人士表示,俄罗斯政府已经开始与华为公司就36万台平板电脑安装俄罗斯自己研发的操作系统(OS)"极光"(Aurora,也称奥罗拉)的一项计划展开谈判。路透社表示&#xf…