自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Shiro会话时长配置及项目业务拓展(PROJECT04_DAY04_02)

5.3 Shiro会话时长配置使用shiro框架实现认证操作,用户登录成功会将用户信息写入到会话对象中,其默认时长为30分钟,假如需要对此进行配置,可参考如下配置:第一步:在SpringShiroConfig类中,添加会话管理器配置。关键代码如下:@Bean public SessionManager sessionManager() { DefaultWebSessionManager sManager = new DefaultWebSessionManage

2021-10-21 16:19:48 1131

原创 Shiro框架授权过程实现(PROJECT04_DAY04_01)

4. Shiro框架授权过程实现4.1 授权流程分析授权即对用户资源访问的授权(是否允许用户访问此资源),用户访问系统资源时的授权流程如图-7所示:图-7其中授权流程分析如下:系统调用subject相关方法将用户信息(例如isPermitted)递交给SecurityManager。SecurityManager将权限检测操作委托给Authorizer对象。Authorizer将用户信息委托给realm。Realm访问数据库获取用户权限信息并封装。Authorizer对用户授权信息进行

2021-10-21 15:49:33 759

原创 Shiro安全框架简介及认证操作(PROJECT04_DAY03_02)

1.Shiro安全框架简介1.1 Shiro概述Shiro是apache旗下一个开源安全框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。用户在进行资源访问时,要求系统要对用户进行权限控制,其具体流程如图-1所示:图-11.2 Shiro概要架构在概念层面,Shiro 架构包含三个主要的理念,如图-2所示:图-2其中:Subject :

2021-10-21 15:18:54 2177

原创 Spring AOP异步操作实现及Cache操作实现(PROJECT04_DAY03_01)

5. Spring AOP异步操作实现5.1 异步场景分析在开发系统的过程中,通常会考虑到系统的性能问题,提升系统性能的一个重要思想就是“串行”改“并行”。说起“并行”自然离不开“异步”,今天我们就来聊聊如何使用Spring的@Async的异步注解。5.2 Spring 业务的异步实现5.2.1 启动异步配置在基于注解方式的配置中,借助@EnableAsync注解进行异步启动声明,Spring Boot版的项目中,将@EnableAsync注解应用到启动类上,代码示例如下:@EnableAsyn

2021-10-20 18:48:07 948

原创 用户行为日志记录实现及Spring AOP事务处理(PROJECT04_DAY02_02)

3.5. 用户行为日志记录实现(实践)本小节作为课堂练习,以AOP方式记录项目中的用户行为信息,并将其存储到数据库。参考日志模块的文档。private void saveLog(ProceedingJoinPoint jp,long time)throws Exception { //1.获取用户行为数据 //获取目标方法所在类的类型 Class<?> targetCls=jp.getTarget().getClass(); String targetClsName=targetCl

2021-10-18 17:35:02 871

原创 缓存切面优化及切面优先级介绍(PROJECT04_DAY02_01)

3.3 切面优先级设置实现切面的优先级需要借助@Order注解进行描述,数字越小优先级越高,默认优先级比较低。例如:定义日志切面并指定优先级。@Order(1)@Aspect@Componentpublic class SysLogAspect { …}定义缓存切面并指定优先级:@Order(2)@Aspect@Componentpublic class SysCacheAspect { …}说明:当多个切面作用于同一个目标对象方法时,这些切面会构建成一个切

2021-10-14 16:10:31 741

原创 Spring AOP 通知和切入点表达式增强(PROJECT04_DAY01_02)

3. Spring AOP编程增强3.1 切面通知应用增强3.1.1 通知类型在基于Spring AOP编程的过程中,基于AspectJ框架标准,spring中定义了五种类型的通知(通知描述的是一种扩展业务),它们分别是:前置通知 (@Before)返回通知 (@AfterReturning)异常通知 (@AfterThrowing)后置通知 (@After)环绕通知 (@Around) :重点掌握(优先级最高)3.1.2 通知执行顺序假如这些通知全部写到一个切面对象中,其执行顺序及

2021-10-14 16:05:43 720

原创 Spring AOP 简介及快速实践(PROJECT04_DAY01_01)

1. Spring AOP简介1.1 AOP 概述1.1.1 AOP 是什么?AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。如图-1所示:图-1AOP与OOP字面意思相近,但其实两者完全是面向不同领域的设计思想。实际项目中我们通常将面向对象理解为一个静态过程(例如一个系统有多少个模块,一个

2021-10-14 15:49:25 816

原创 用户模块新增和修改操作(PROJECT03_DAY03_02)

5. 用户添加页面呈现5.1 业务时序分析在用户列表页面,点击添加按钮时加载编辑页面,其加载时序分析,如图-11所示:图-115.2 准备用户编辑页面准备用户编辑页面(/templates/pages/sys/user_edit.html)5.3 用户编辑页面呈现业务描述与设计实现在用户列表页面中点击添加按钮时,呈现用户编辑页面。关键代码设计与实现第一步:用户列表事件注册,关键代码如下:$(document).ready(function(){ ...

2021-10-12 17:52:35 1263

原创 角色数据更新实现、用户管理设计说明、列表页面呈现及禁用启用(PROJECT03_DAY03_01)

7.3 客户端关键业务及代码实现7.3.1 列表页面修改按钮事件处理业务描述与设计实现在角色修改按钮上进行事件注册,点击页面修改按钮时,基于角色id向服务端发起异步请求获取角色相关数据,然后加载修改页面。关键代码设计与实现第一步:页面加载完成,进行修改按钮事件注册,关键代码如下:$(function(){//假如是修改$(".input-group-btn").on("click","btn-update",doLoadEditUI);});第二步:修改按钮事件处理函数定义或

2021-10-11 18:49:06 1024

原创 角色模块添加及修改(PROJECT03_DAY02_02)

5. 角色添加页面呈现5.1 业务时序分析点击角色列表上的添加按钮,其时序分析,如图-11所示:图-115.2 准备角色编辑页面准备角色编辑页面(/templates/pages/sys/role_edit.html)5.3 角色编辑页面呈现业务描述与设计实现在角色列表页面中点击添加按钮时,呈现角色编辑页面。关键代码设计与实现第一步:角色列表事件注册,关键代码如下:$(document).ready(function(){ ... $(".inpu

2021-10-08 18:55:28 972

原创 菜单修改模块及角色管理模块查询业务(PROJECT03_DAY02_01)

8. 菜单修改页面数据呈现8.1 业务时序分析当在菜单列表页面中选中某条记录,然后点击修改按钮时,其业务时序分析如图-16所示:图-168.2 客户端关键业务及代码实现8.2.1 列表页面修改按钮事件处理业务描述与设计实现点击页面修改按钮时,获取选中菜单记录,并异步加载编辑页面。关键代码设计与实现第一步:列表页面修改按钮事件注册,关键代码如下:$(".input-group-btn").on("click",".btn-update",doLoadEditUI);第二步:

2021-09-28 17:57:49 1125

原创 菜单模块添加页面呈现及代码实现(PROJECT03_DAY01_02)

5. 菜单添加页面呈现5.1 业务时序分析添加页面加载时序分析,如图-12所示:图-125.2 准备菜单编辑页面首先准备菜单列表页面(/templates/pages/sys/menu_edit.html),然后在menu_list.html页面中点击菜单添加时异步加载菜单编辑页面。5.3 菜单编辑页面呈现业务描述与设计实现菜单列表页面点击添加按钮时,异步加载菜单编辑页面。关键代码设计与实现第一步:菜单列表页面上,对添加按钮进行事件注册,关键代码如下:$(document).

2021-09-27 16:49:53 975

原创 菜单管理列表数据呈现(PROJECT03_DAY01_01)

3.菜单管理列表数据呈现3.1 数据架构分析菜单列表页面加载完成,启动菜单数据异步加载操作,本次菜单列表页面要呈现菜单以及上级菜单信息,其数据查询时,数据的封装及传递过程,如图-8 所示。图-8说明:本模块将从数据库查询到的菜单数据封装到 map 对象,一行记录一个 map 对象,其中 key 为表中的字段(列)名,值为字段(列)对应的值。数据加载过程其时序分析,如图-9 所示:图-93.2 服务端关键业务及代码实现3.2.1 Dao 接口实现业务描述及设计实现通过数据层对象,基

2021-09-24 19:22:36 876

原创 菜单模块介绍及列表页面呈现(PROJECT02_DAY05_02)

第六步:完善业务刷新方法,当在最后一页执行删除操作时,基于全选按钮状态及当前页码值,刷新页面。关键代码如下:function doRefreshAfterDeleteOK(){var pageCount=$("#pageId").data("pageCount");var pageCurrent=$("#pageId").data("pageCurrent");var checkAllState=$("#checkAll").prop("checked");if(pageCurrent==page

2021-09-24 18:56:45 1422

原创 日志模块客户端关键业务及代码实现2(PROJECT02_DAY05_01)

3.4.4 列表页面信息查询实现业务描述及设计当用户点击日志列表的查询按钮时,基于用户输入的用户名进行有条件的分页查询,并将查询结果呈现在页面。关键代码设计与实现:第一步:日志列表页面加载完成,在查询按钮上进行事件注册。代码如下:$(".input-group-btn").on("click",".btn-search",doQueryObjects)第二步:定义查询按钮对应的点击事件处理函数。代码如下:function doQueryObjects(){ //

2021-09-24 18:32:18 943

原创 日志模块客户端关键业务及代码实现1(PROJECT02_DAY04_02)

控制层响应数据处理分析,如图-7所示:图-73.4 客户端关键业务及代码实现3.4.1 客户端页面事件分析当用户点击首页日志管理时,其页面流转分析如图-8所示:图-83.4.2 日志列表信息呈现业务描述与设计实现日志分页页面加载完成以后,向服务端发起异步请求加载日志信息,当日志信息加载完成需要将日志信息、分页信息呈现到列表页面上。关键代码设计与实现第一步:分页页面加载完成,向服务端发起异步请求,代码参考如下: $(function(){ //为什么要

2021-09-22 19:12:21 1046

原创 日志模块服务端关键业务2(PROJECT02_DAY04_01)

第五步:单元测试类SysLogDaoTests,对数据层方法进行测试。package com.cy.pj.sys.dao;import java.util.List;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import com

2021-09-09 17:41:30 1145

原创 日志模块服务端关键业务1(PROJECT02_DAY03_02)

3.3 服务端关键业务及代码实现3.3.1Entity类实现业务描述及设计实现构建实体对象(POJO)封装从数据库查询到的记录,一行记录映射为内存中一个的这样的对象。对象属性定义时尽量与表中字段有一定的映射关系,并添加对应的set/get/toString等方法,便于对数据进行更好的操作。关键代码分析及实现package com.cy.pj.sys.entity;import java.io.Serializable;import java.util.Date;public cl

2021-09-09 17:15:39 1201

原创 动吧项目首页初始化及日志模块分析(PROJECT02_DAY03_01)

3.2 首页初始化3.2.1 定义页面初始资源将js、css、images相关资源拷贝到项目static目录将pages页面拷贝到项目的templates目录3.2.2 创建页面Controller创建呈现首页页面的controller对象。package com.cy.pj.sys.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annot

2021-09-06 16:57:43 1278

原创 动吧项目简介及技术整合(PROJECT02_DAY02_02)

1. 项目简介1.1 概述动吧旅游生态系统,应市场高端用户需求,公司决定开发这样的一套旅游系统,此系统包含旅游电商系统(广告子系统,推荐子系统,评价子系统,商品子系统,订单子系统,…),旅游分销系统(分销商的管理),旅游业务系统(产品研发,计调服务,系统管理,…) 。1.2 原型分析基于用户需求,进行原型设计(基于html+css+js进行静态页面实现)。例如系统登录页面:系统登录成功页面(例如starter.html)菜单展示页面说明:原型设计好以后,会与客户进行确认,确认好以后进行签

2021-09-06 16:42:36 3281

原创 AJAX 技术在 jQuery 中应用(PROJECT02_DAY02_01)

3. AJAX 技术在 jQuery 中应用3.1 jQuery 简介jQuery 是一个快速、简洁的 JavaScript 框架,是一个个优秀的 JavaScript 代码库(或 JavaScript 框架)。jQuery 设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 HTML 文档操作、事件处理、动画设计和 Ajax 交互。3.2 jQuery中常用 A

2021-09-06 15:52:05 645

原创 AJAX快速入门-POST、代码简化及实现活动删除业务(PROJECT02_DAY01_02)

2.3.2 Ajax Post 请求操作实现课堂练习:基于时序图分析,进行代码设计和实现,如图-6所示:图-6图-6中涉及到的相关代码参考如下:服务端控制层关键代码实现:在控制层的 doSaveActivity 方法中,通过业务 层获取商品信息。@RequestMapping("activity_edit") public String doActivityEditUI() { return "activity_edit"; }@RequestMapping("doSaveActivi

2021-08-23 17:30:50 866

原创 AJAX快速入门-GET(PROJECT02_DAY01_01)

2.Ajax 快速入门2.1 Ajax 请求响应过程分析所有的Ajax 请求都会基于DOM(HTML元素)事件,通过XHR(XMLHttpRequest)对象实现与服务端异步通讯局部更新,如图-4所示:图-4Controller 层代码://http://localhost/activity/activity_list @RequestMapping("activity_list") public String doActivityListUI(Model model){ retur

2021-08-23 16:51:07 978 2

原创 Lombok安装及AJAX简介(PROJECT01_DAY06_02)

2.3 Lombok插件应用Lombok是一个第三库,可以基于lombok中提供的API,在程序编译时自动织入一些方法。这样做的话可以简化我们对某些方法的编写,例如,省略pojo类中的set方法,get方法,toString等方法的编写。我们写的java程序可以在编译时,通过lombok自动将这些方法添加到.class文件中,其应用步骤如下:第一步:添加依赖。<dependency> <groupId>org.projectlombok</groupId&

2021-08-23 16:05:39 875

原创 Activity更改操作及代码、热部署和健康检查(PROJECT01_DAY06_01)

更改操作及代码Dao 层:@Update("update tb_activity set title=#{title},category=#{category},startTime=#{startTime},endTime=#{endTime}," + "remark=#{remark} where id=#{id}")int updateActivity(Activity entity);@Select("select * from tb_activity where id=#{id}"

2021-08-23 15:01:16 1054 2

原创 Spring Boot应用加强实现代码(PROJECT01_DAY05_02)

2.Spring Boot 应用加强实现查询数据库的操作及代码:POJO 实体类:package com.cy.pj.activity.pojo;import java.time.LocalDateTime;import org.springframework.format.annotation.DateTimeFormat;/** * 用于存储活动信息的pojo对象 */public class Activity { private Long id; private String

2021-08-16 17:31:51 1037

原创 Spring Boot整合Spring MVC及第三单元简介(PROJECT01_DAY05_01)

查询时序分析:如图-17所示图-17删除时序分析:如图-18所示:图-18添加时序分析:如图-19所示:图-19SpringBoot小节总结重难点分析掌握基于Spring boot 实现HikariCP连接池整合与测试应用的过程掌握基于Spring boot 实现MyBatis框架资源的整合与测试。掌握基于Spring boot 实现Spring MVC资源的整合与测试。掌握Mybatis框架中的核心API以及应用关系掌握Spring MVC 中的核心API对象以及这些对象之间的调用

2021-08-16 16:43:42 1693

原创 Spring Boot整合Spring MVC(PROJECT01_DAY04_02)

3.2初始配置3.1添加Spring MVC依赖编辑pom.xml文件,添加web依赖,Thymeleaf依赖,代码如下:Web依赖(提供了Spring MVC核心API,同时会嵌入一个Tomcat服务器)<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web&

2021-08-16 16:36:28 1679 1

原创 Spring Boot整合MyBatis与SpringMVC(PROJECT01_DAY04_01)

构建业务层接口及实现类参考图-13的设计,进行代码实现,具体业务自己设计(例如查询)。图-13在图-13中,我们的测试类GoodsServiceTest,通过耦合与GoodsService接口实现具体商品业务处理。而在GoodsService接口的实现GoodsServiceImpl中通过耦合GoodsDao接口完成具体的数据逻辑处理。课堂练习:基于图-13的设计,实现商品信息的查询,并将查询到的数据在测试类中进行输出。具体步骤如下:第一步:定义pojo对象(Goods)用于存储从数据库查询到的

2021-08-16 16:24:44 1393

原创 MyBatis业务进阶分析实现及SQL的健壮性(PROJECT01_DAY03_02)

如果我们不使用 Dao 接口,能不能通过之前我们学习过的方式访问数据库呢?代码敲完 回顾上一天断点图。package com.cy.pj.goods.dao;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.a

2021-08-16 15:57:49 969

原创 Spring Boot整合MyBatis框架(PROJECT01_DAY03_01)

2.Spring Boot 整合 MyBatis 框架2.1概述Mybatis 是一个优秀的持久层框架,底层基于 JDBC 实现与数据库的交互。并在 JDBC 操作的基础上做了封装和优化,它借助灵活的 SQL 定制,参数及结果集的映射方式, 更好的适应了当前互联网技术的发展。Mybatis 框架的简单应用架构,如图-8 所示: 图-8在当今的互联网应用中项目,mybatis 框架通常会由 spring 框架进行资源整合,作为数 据层技术实现数据交互操作。2.2 初始配置2.2.1 添加 MyBa

2021-08-16 15:50:25 1358

原创 Spring Boot整合连接池(PROJECT01_DAY02_02)

1. Spring Boot 整合连接池1.1 概述实际开发中应用程序与数据库交互时,“获得连接”或“释放资源”是非常消耗系统资源的 两个过程,为了解决此类性能问题,通常情况我们采用连接池技术来重用连接 Connection 对象(空间换时间),如图-1 所示:图-1Java 为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己 的连接池实现这个接口。然后我们的应用程序中耦合与这个接口,便可以方便的切换不 同厂商的连接池,常见的连接池有 DBCP、C3P0.

2021-08-12 16:27:09 1162

原创 Spring Boot作用域(PROJECT01_DAY02_01)

第四步:为对象设计作用域,设置延迟加载,设置生命周期方法(了解)。在 Spring 框架中,Spring 为由它创建和管理的对象,设计了一些特性,例如作用域, 延迟加载,生命周期方法等,基于这些特性实现对 Bean 对象的管理。package com.cy.pj.common.cache; @Component @Scope("singleton") //作用域,如果不写默认为单例,写上则有两个属性 "singleton"与"prototype" @Lazy //使用场景:不是实时使用,则延迟加

2021-08-12 15:33:10 2048

原创 Spring Boot项目启动分析及项目初步实现(PROJECT01_DAY01_02)

3.2 项目启动过程分析(了解)找到项目的入口类(使用了@SpringBootApplication 注解描述),然后运行启动类, 检测启动过程,SpringBoot 在启动时,控制台会出现如图-14 标识:图-14项目启动时发生了什么呢?我在这里画了张图帮大家进行一下分析,如图-15 所示:图-15SpringBoot 项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描 指定包以及子包中的类进行加载,然后检测类上是否有 Spring 框架中指定的注解描述(例如@Componen

2021-08-12 14:45:12 1461

原创 Spring Boot 简介及入门(PROJECT01_DAY01_01)

1. Spring Boot 概述现在软件市场已经形成一定的规模,系统架构的复杂度也越来越高(例如有单体架构, 分布式架构,微服务架构)。软件的整个架构体系正在发生很大变化,在这种变化中,企业 现在更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此Spring Boot诞生。 *说明:学技术一定要了解技术发展史,并对技术的发展有一定的前瞻性。*2. Spring Boot 核心特性Spring Boot是一个脚手架(而非框架),构建于 Spring框架(Framewor

2021-08-12 13:43:32 2206 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除