tang-boot: 基于Spring Boot的前后端分离权限管理系统

需积分: 1 0 下载量 142 浏览量 更新于2024-10-12 收藏 4.49MB ZIP 举报
资源摘要信息:"tang-boot是一个基于Spring Boot 3、Spring Security、MyBatis和Redis等技术栈的前后端分离权限管理系统。" 知识点一:Spring Boot 3 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。Spring Boot 3是该框架的最新版本,它在原有版本的基础上进行了大量的升级和优化。其中最大的特点是对Java版本的要求提升到了Java 17,这要求开发者使用更新的Java特性和语言结构。Spring Boot 3也进一步加强了与Spring Cloud生态系统的兼容性,并提供了一系列新的功能和改进,包括Web、安全性、数据访问、缓存等方面的支持。它通过自动配置和“约定优于配置”的理念,大大简化了企业级应用的构建和部署。 知识点二:Spring Security Spring Security是一个功能强大、可高度定制的认证和访问控制框架。它是基于Servlet API构建的,主要用于为Java应用提供安全特性。Spring Security可以提供身份验证和授权机制,保护应用不受未授权访问的侵害。它为Web安全提供了全面的解决方案,支持多种认证方式,如HTTP基础认证、表单登录、OpenID等。此外,它还可以与LDAP、OAuth2.0、JWT等第三方服务集成。Spring Security还提供了对CSRF(跨站请求伪造)、Session固定等安全漏洞的防护。 知识点三:MyBatis MyBatis是一个流行的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis 的易用性和灵活性,使之成为一个在企业中广泛使用的持久层框架。它可以帮助开发者编写出更加简洁、更加模块化的代码。 知识点四:Redis Redis是一个开源的内存数据结构存储系统,用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。与传统的关系型数据库相比,Redis以键值对的形式存储数据,具有读写速度快、支持高并发访问、数据持久化到磁盘、支持发布订阅等多种高级功能。在分布式系统中,Redis常被用作缓存层,以提升系统的响应速度和并发处理能力。此外,它还可以用作消息队列(Redis Streams)和会话存储等。 知识点五:前后端分离权限管理系统 前后端分离是一种开发模式,它将前端展示和后端逻辑处理分开,前端负责展示页面和用户交互,后端提供API接口供前端调用。这种架构模式使得前后端可以独立开发、部署和更新。权限管理系统是在计算机系统中控制用户访问权限的软件,它可以帮助组织管理用户对系统资源的访问。一个典型的权限管理系统通常包括用户身份验证、授权、角色管理、权限分配和审计等功能。在前后端分离的架构中,后端通常会提供RESTful API接口,前端通过这些接口与后端进行数据交互,同时前端会配合后端提供的权限控制策略,对用户界面和功能进行访问控制。 知识点六:Spring Boot与MyBatis和Redis的整合 在Spring Boot项目中整合MyBatis和Redis,可以有效地提升应用的性能和可维护性。Spring Boot提供了与MyBatis和Redis集成的自动配置支持,使得开发者可以很方便地在项目中引入这两个组件。使用MyBatis可以简化数据库操作,提供更加直观的数据访问方式,而Redis的引入可以优化缓存机制,减少数据库访问次数,加快数据读取速度。开发者需要在Spring Boot的配置文件中进行相应的配置,然后通过注解或者XML配置文件来使用MyBatis的Mapper接口以及Redis的操作命令。整合后,可以实现更加高效的数据处理和缓存处理流程。

SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL -- new , PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL -- new , PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE , DECODE(PIS.REVERT_FLOW,'N',PIS.FLOW_TYPE,DECODE(PIS.FLOW_TYPE,'I','E','I')) AS FLOW_TYPE , PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION , PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE , PFT.FLIGHT_DATE AS FLIGHT_DATE , PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE , PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER , PFT.FLOW_TYPE AS AIRCRAFT_FLOW , FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE , PPT.AWB_NUMBER AS AWB_NUMBER , PPT.WEIGHT AS WEIGHT , PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR , PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE , PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE , PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE , PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE , PPT.REVENUE_TYPE AS REVENUE_TYPE , PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE , PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID , PPT.AWB_UID AS AWB_UID , PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID , PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT , FZ_AIRLINES FA , PN_TONNAGE_FLT_PORTS PTFP , PN_PORT_TONNAGES PPT , FF_AIRCRAFT_SERVICE_TYPES FAST , SR_PN_INVOICE_SEPARATIONS PIS --new , SR_PN_INVOICE_SEP_DETAILS PISD--new , SR_PN_INV_SEP_PORT_TONNAGES PISPT --new WHERE PFT.FLIGHT_OPERATION_DATE >= trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE,-1) ELSE ADD_MONTHS(:rundate,-1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND (PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR (PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (select EFF_DATE from SPECIAL_HANDLING_EFF_DATE) )) AND PFT.DELETING_DATETIME IS NULL AND FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL AND PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL AND PPT.TONNAGE_FLIGHT_PORT_UID (+)= PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE (+)= 'M' AND PPT.DISCREPANCY_TYPE (+)= 'NONE' AND PPT.ADJUSTMENT_INC_FLAG (+)= 'Y' AND PPT.DELETING_DATETIME (+) IS NULL AND FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL AND PIS.TEMPORAL_NAME = TO_CHAR((CASE :rundate --new WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END ), 'YYYYMM') || '00' AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID --new AND PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID --new AND PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID --new AND PIS.PRINT_SUPPORTING_DOC = 'Y';上面是oracle的写法,请转成spark SQL的写法。

2023-06-02 上传