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

九江集团网站建设公司自己做的网站怎么用qq登入

九江集团网站建设公司,自己做的网站怎么用qq登入,网站源代码购买,建设部网站设计资质查询Spring Core Container, AOP, Data Access, Web... 基础 1. 简单介绍Spring 一款开源的轻量级 Java 开发框架#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。Spring 支持 IoC#xff08;Inversion of Control:控制反转#xff09; 和 AOP(Aspect-Oriented Pro…Spring Core Container, AOP, Data Access, Web... 基础 1. 简单介绍Spring 一款开源的轻量级 Java 开发框架旨在提高开发人员的开发效率以及系统的可维护性。Spring 支持 IoCInversion of Control:控制反转 和 AOP(Aspect-Oriented Programming:面向切面编程)、可以很方便地对数据库进行访问、可以很方便地集成第三方组件电子邮件任务调度缓存等等、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。不重新造轮子开箱即用提高开发效率。 2. SpringMVC, Spring Boot 和 Spring的关系 Spring MVC 是 Spring 中的一个很重要的模块主要赋予 Spring 快速构建 MVC 架构的 Web 程序的能力。MVC 是模型(Model)、视图(View)、控制器(Controller)的简写其核心思想是通过将业务逻辑、数据、显示分离来组织代码。 使用 Spring 进行开发各种配置过于麻烦比如开启某些 Spring 特性时需要用 XML 或 Java 进行显式配置。于是Spring Boot 减少配置文件开箱即用诞生了 3. Spring 框架中用到了哪些设计模式 工厂设计模式 : Spring 使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。 代理设计模式 : Spring AOP 功能的实现。 单例设计模式 : Spring 中的 Bean 默认都是单例的。 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类它们就使用到了模板模式。 包装器设计模式 : 我们的项目需要连接多个数据库而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。 适配器模式 : Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。 IoC 1. 理解 IoCInversion of Control:控制反转 是一种设计思想而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权交由 Spring 框架来管理。将对象之间的相互依赖关系交给 IoC 容器工厂来管理并由 IoC 容器完成对象的注入需要创建一个对象的时候只需要配置好配置文件/注解即可完全不用考虑对象是如何被创建出来的。 控制指的是对象创建实例化、管理的权力 反转控制权交给外部环境Spring 框架、IoC 容器 2. Spring Bean Bean 代指的就是那些被 IoC 容器所管理的对象。 Component通用的注解可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层可以使用Component 注解标注。 Repository / Mapper : 对应持久层即 Dao 层主要用于数据库相关操作。 Service : 对应服务层主要涉及一些复杂的逻辑需要用到 Dao 层。 Controller : 对应 Spring MVC 控制层主要用于接受用户请求并调用 Service 层返回数据给前端页面。 3. Component vs. Bean Component 注解作用于类而Bean注解作用于方法 所在类有Configuration。 Component通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中ComponentScan 注解。 Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,Bean告诉了 Spring 这是某个类的实例当我需要用它的时候还给我。 Bean 注解比 Component 注解的自定义性更强而且很多地方我们只能通过 Bean 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring容器时则只能通过 Bean来实现。 Configuration public class AppConfig {Beanpublic TransferService transferService() {return new TransferServiceImpl();} ​ } 4. Autowired 和 Resource 的区别是什么 两者都是注入Bean的注解。 Autowired 是 Spring 提供的注解Resource 是 JDK 提供的注解。 Autowired 默认的注入方式为byType根据类型进行匹配Resource默认注入方式为 byName根据名称进行匹配。 当一个接口存在多个实现类的情况下Autowired 和Resource都需要通过名称才能正确匹配到对应的 Bean。Autowired 可以通过 Qualifier 注解来显式指定名称Resource可以通过 name 属性来显式指定名称。 Autowired 支持在构造函数、方法、字段和参数上使用。Resource 主要用于字段和方法上的注入不支持在构造函数或参数上使用。 5. Bean 的作用域 singleton : IoC 容器中只有唯一全局共享的 bean 实例。Spring 中的 bean 默认都是单例的是对单例设计模式的应用。 prototype : 每次获取都会创建一个新的 bean 实例。也就是说连续 getBean() 两次得到的是不同的 Bean 实例。 仅 Web 应用可用request、session、application/global-session、websocket 配置作用域 搭配Scope注解 Bean Scope(value ConfigurableBeanFactory.SCOPE_PROTOTYPE) public Person personPrototype() {return new Person(); } ​ 6. Bean 是线程安全的吗 取决于其作用域和状态。 prototype 作用域下每次获取都会创建一个新的 bean 实例不存在资源竞争问题所以不存在线程安全问题。singleton 作用域下IoC 容器中只有唯一的 bean 实例可能会存在资源竞争问题取决于 Bean 是否有状态。如果这个 bean 是有状态的话那就存在线程安全问题有状态 Bean 是指包含可变的成员变量的对象。 不过大部分 Bean 实际都是无状态没有定义可变的成员变量的比如 Dao、Service这种情况下 Bean 是线程安全的。 对于有状态单例 Bean 的线程安全问题常见的有两种解决办法 在 Bean 中尽量避免定义可变的成员变量。 在类中定义一个 ThreadLocal 成员变量将需要的可变成员变量保存在 ThreadLocal 中推荐的一种方式。 7. Bean 的生命周期了解么? 重要实例化 — 属性赋值 — 初始化 — 销毁。 AOP 1. 理解 AOP(Aspect-Oriented Programming:面向切面编程) 能够将那些与业务无关却为业务模块的公共行为例如事务处理、日志管理、权限控制等封装起来便于减少系统的重复代码降低模块间的耦合度并有利于未来的可拓展性和可维护性。 Spring AOP 就是基于动态代理的如果要代理的对象实现了某个接口那么 Spring AOP 会使用 JDK Proxy去创建代理对象。 而对于没有实现接口的对象就无法使用 JDK Proxy 去进行代理了这时候 Spring AOP 会使用 Cglib 去生成一个被代理对象的子类来作为代理。 术语含义目标(Target)被通知的对象代理(Proxy)向目标对象应用通知之后创建的代理对象连接点(JoinPoint)目标对象的所属类中定义的所有方法均为连接点切入点(Pointcut)被切面拦截 / 增强的连接点切入点一定是连接点连接点不一定是切入点通知(Advice)增强的逻辑 / 代码也即拦截到目标对象的连接点之后要做的事情切面(Aspect)切入点(Pointcut)通知(Advice)Weaving(织入)将通知应用到目标对象进而生成代理对象的过程动作 一个小例子使用AOP Spring AOP 属于运行时增强而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying)而 AspectJ 基于字节码操作(Bytecode Manipulation)。 2. 多个切面的执行顺序如何控制 通常使用 Order 注解直接定义切面顺序 // 值越小优先级越高 Order(3) Component Aspect public class LoggingAspect implements Ordered { ​ Spring MVC 1. 理解 MVC 是一种设计模式Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的 Web 层的开发并且它天生与 Spring 框架集成。Spring MVC 下我们一般把后端项目分为 Service 层处理业务、Dao 层数据库操作、Entity 层实体类、Controller 层(控制层返回数据给前台页面)。 2. 核心组件 DispatcherServlet核心的中央处理器负责接收请求、分发并给予客户端响应。 HandlerMapping处理器映射器根据 URL 去匹配查找能处理的 Handler 并会将请求涉及到的拦截器和 Handler 一起封装。 HandlerAdapter处理器适配器根据 HandlerMapping 找到的 Handler 适配执行对应的 Handler Handler请求处理器处理实际请求的处理器。 ViewResolver视图解析器根据 Handler 返回的逻辑视图 / 视图解析并渲染真正的视图并传递给 DispatcherServlet 响应客户端 流程说明重要 客户端浏览器发送请求 DispatcherServlet拦截请求。 DispatcherServlet 根据请求信息调用 HandlerMapping 。HandlerMapping 根据 URL 去匹配查找能处理的 Handler也就是我们平常说的 Controller 控制器 并会将请求涉及到的拦截器和 Handler 一起封装。 DispatcherServlet 调用 HandlerAdapter适配器执行 Handler 。 Handler 完成对用户请求的处理后会返回一个 ModelAndView 对象给DispatcherServletModelAndView 顾名思义包含了数据模型以及相应的视图的信息。Model 是返回的数据对象View 是个逻辑上的 View。 ViewResolver 会根据逻辑 View 查找实际的 View。 DispaterServlet 把返回的 Model 传给 View视图渲染。 把 View 返回给请求者浏览器 3. 统一异常处理 ControllerAdvice ExceptionHandler ControllerAdvice ResponseBody public class GlobalExceptionHandler { ​ExceptionHandler(BaseException.class)public ResponseEntity? handleAppException(BaseException ex, HttpServletRequest request) {//......} ​ExceptionHandler(value ResourceNotFoundException.class)public ResponseEntityErrorReponse handleResourceNotFoundException(ResourceNotFoundException ex, HttpServletRequest request) {//......} } 这种异常处理方式下会给所有或者指定的 Controller 织入异常处理的逻辑AOP当 Controller 中的方法抛出异常的时候由被ExceptionHandler 注解修饰的方法进行处理。 循环依赖 1. 理解 指 Bean 对象循环引用是两个或多个 Bean 之间相互持有对方的引用一种设计缺陷。 Component public class CircularDependencyA {Autowiredprivate CircularDependencyB circB; } ​ Component public class CircularDependencyB {Autowiredprivate CircularDependencyA circA; } 2. 三级缓存 Spring 框架通过使用三级缓存就是三个Map来解决这个问题确保即使在循环依赖的情况下也能正确创建 Bean。 一级缓存singletonObjects存放最终形态的 Bean已经实例化、属性填充、初始化单例池为“Spring 的单例属性”⽽⽣。一般情况我们获取 Bean 都是从这里获取的但是并不是所有的 Bean 都在单例池里面例如原型 Bean 就不在里面。 二级缓存earlySingletonObjects存放过渡 Bean半成品只实例化也就是三级缓存中ObjectFactory产生的对象与三级缓存配合使用的可以防止 AOP 的情况下每次调用ObjectFactory#getObject()都是会产生新的代理对象的。 三级缓存singletonFactories存放ObjectFactoryObjectFactory的getObject()方法最终调用的是getEarlyBeanReference()方法可以生成原始 Bean 对象或者代理对象如果 Bean 被 AOP 切面代理。三级缓存只会对单例 Bean 生效。 class A {// 使用了 Bprivate B b; } class B {// 使用了 Aprivate A a; } 当 Spring 创建 A 之后发现 A 依赖了 B 又去创建 BB 依赖了 A 又去创建 A 在 B 创建 A 的时候那么此时 A 就发生了循环依赖由于 A 此时还没有初始化完成因此在 一二级缓存 中肯定没有 A 那么此时就去三级缓存中调用 getObject() 方法去获取 A 的 前期暴露的对象 也就是调用上边加入的getEarlyBeanReference() 方法 然后就将这个ObjectFactory从三级缓存中移除并且将前期暴露对象放入到二级缓存中那么 B 就将这个前期暴露对象注入到依赖来支持循环依赖就不会重复初始化了 3. Lazy 能解决循环依赖吗 Lazy 用来标识类是否需要懒加载/延迟加载可以作用在类上、方法上、构造器上、方法参数上、成员变量中。如果一个 Bean 被标记为懒加载那么它不会在 Spring IoC 容器启动时立即实例化而是在第一次被请求时才创建。这可以帮助减少应用启动时的初始化时间也可以用来解决循环依赖部分问题。 Lazy class A {// 使用了 Bprivate B b; } ​ class B {// 使用了 Aprivate A a; } A 的构造器上添加 Lazy 注解之后延迟 Bean B 的实例化加载的流程如下 首先 Spring 会去创建 A 的 Bean创建时需要注入 B 的属性 由于在 A 上标注了 Lazy 注解因此 Spring 会去创建一个 B 的代理对象将这个代理对象注入到 A 中的 B 属性 之后开始执行 B 的实例化、初始化在注入 B 中的 A 属性时此时 A 已经创建完毕了就可以将 A 给注入进去。 对 A 中的属性 B 进行注入时注入的是 B 的代理对象因此不会循环依赖。 全局懒加载会让 Bean 第一次使用的时候加载会变慢并且它会延迟应用程序问题的发现当 Bean 被初始化时问题才会出现。 #默认false spring.main.lazy-initializationtrue ​ 事务 1. 理解 事务是逻辑上的一组操作要么都执行要么都不执行。(转账) 2. 特性 ACID 原子性Atomicity事务是最小的执行单位不允许分割。事务的原子性确保动作要么全部完成要么完全不起作用 一致性Consistency执行事务前后数据保持一致例如转账业务中无论事务是否成功转账者和收款人的总额应该是不变的 隔离性Isolation并发访问数据库时一个用户的事务不被其他事务所干扰各并发事务之间数据库是独立的 持久性Durability一个事务被提交之后。它对数据库中数据的改变是持久的即使数据库发生故障也不应该对其有任何影响。 3. Spring 对事务的支持 程序是否支持事务首先取决于数据库 比如使用 MySQL 的话如果你选择的是 innodb 引擎。 想要保证事务的原子性就需要在异常发生时对已执行操作进行回滚在 MySQL 中恢复机制是通过 回滚日志undo log 实现的所有事务进行的修改都会先记录到这个回滚日志中然后再执行相关的操作。将数据回滚到修改之前的样子即可 回滚日志会先于数据持久化到磁盘上即使遇到数据库突然宕机等情况当用户再次启动数据库的时候数据库还能够通过查询回滚日志来回滚之前未完成的事务。 4. Spring 支持两种方式的事务管理 编程式 通过 TransactionTemplate或者TransactionManager手动管理事务。 Autowired private TransactionTemplate transactionTemplate; public void testTransaction() { ​transactionTemplate.execute(new TransactionCallbackWithoutResult() {Overrideprotected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { ​try { ​// .... 业务代码} catch (Exception e){//回滚transactionStatus.setRollbackOnly();} ​}}); } ​ 声明式 推荐使用代码侵入性最小实际是通过 AOP 实现基于 Transactional 的全注解方式使用最多。 Transactional(propagation Propagation.REQUIRED) public void aMethod {//do somethingB b new B();C c new C();b.bMethod();c.cMethod(); } ​ 5. 事务管理接口介绍 PlatformTransactionManager平台事务管理器Spring 事务策略的核心。 TransactionDefinition事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)。 TransactionStatus事务运行状态。 Spring 并不直接管理事务而是提供了多种事务管理器。 因为要将事务管理行为抽象出来然后不同的平台去实现它这样我们可以保证提供给外部的行为不变方便我们扩展。SPI机制 接口接口理解为提供了一系列功能列表的约定接口本身不提供功能它只定义行为。但是谁要用就要先实现我遵守我的约定然后再自己去实现我定义的要实现的功能。 1. PlatformTransactionManager: 事务管理接口 package org.springframework.transaction; ​ import org.springframework.lang.Nullable; ​ public interface PlatformTransactionManager {//获得事务TransactionStatus getTransaction(Nullable TransactionDefinition var1) throws TransactionException;//提交事务void commit(TransactionStatus var1) throws TransactionException;//回滚事务void rollback(TransactionStatus var1) throws TransactionException; } ​ 2. TransactionDefinition:事务属性 通过PlatformTransactionManager#getTransaction(TransactionDefinition definition)得到一个事务。 事务属性是事务的一些基本配置描述了事务策略如何应用到方法上。 隔离级别 getIsolationLevel(), ISOLATION_* 传播行为 getPropagationBehavior() 回滚规则 常量 是否只读 isReadOnly() 事务超时 getTimeout() package org.springframework.transaction; ​ import org.springframework.lang.Nullable; ​ public interface TransactionDefinition {int PROPAGATION_REQUIRED 0;int PROPAGATION_SUPPORTS 1;int PROPAGATION_MANDATORY 2;int PROPAGATION_REQUIRES_NEW 3;int PROPAGATION_NOT_SUPPORTED 4;int PROPAGATION_NEVER 5;int PROPAGATION_NESTED 6;int ISOLATION_DEFAULT -1;int ISOLATION_READ_UNCOMMITTED 1;int ISOLATION_READ_COMMITTED 2;int ISOLATION_REPEATABLE_READ 4;int ISOLATION_SERIALIZABLE 8;int TIMEOUT_DEFAULT -1;// 返回事务的传播行为默认值为 REQUIRED。int getPropagationBehavior();//返回事务的隔离级别默认值是 DEFAULTint getIsolationLevel();// 返回事务的超时时间默认值为-1。如果超过该时间限制但事务还没有完成则自动回滚事务。int getTimeout();// 返回是否为只读事务默认值为 falseboolean isReadOnly(); ​NullableString getName(); } 3. TransactionStatus:事务状态 获取或判断事务的相应状态信息。 通过PlatformTransactionManager#commit/rollback(TransactionStatus var1)得到。 public interface TransactionStatus{boolean isNewTransaction(); // 是否是新的事务boolean hasSavepoint(); // 是否有恢复点void setRollbackOnly();  // 设置为只回滚boolean isRollbackOnly(); // 是否为只回滚boolean isCompleted; // 是否已完成 } 6. Transactional 注解使用详解 方法推荐将注解使用于方法上不过需要注意的是该注解只能应用到 public 方法上否则不生效。 类如果这个注解使用在类上的话表明该注解对该类中所有的 public 方法都生效。 接口不推荐在接口上使用。 Transactional 的工作机制是基于 AOP 实现的AOP 又是使用动态代理实现的。如果目标对象实现了接口默认情况下会采用 JDK 的动态代理如果目标对象没有实现了接口,会使用 CGLIB 动态代理。 propagation事务的传播行为默认值为 REQUIRED可选的值在上面介绍过isolation事务的隔离级别默认值采用 DEFAULT可选的值在上面介绍过timeout事务的超时时间默认值为-1不会超时。如果超过该时间限制但事务还没有完成则自动回滚事务。readOnly指定事务是否为只读事务默认值为 false。rollbackFor用于指定能够触发事务回滚的异常类型并且可以指定多个异常类型。 Spring Boot 1. 理解 一个开源的、用于简化 Spring 应用初始化和开发过程的框架。虽然Spring的组件代码是轻量级的但它的配置却是重量级的所以SpringBoot的设计策略是通过开箱即用和约定大于配置 来解决配置重的问题的。 核心功能起步依赖、自动配置。 特点 Spring Boot 内嵌了 Tomcat、Jetty、Undertow 等容器不需要在服务器上部署 WAR 包了直接运行 jar 包就可以启动项目超级方便。 开箱即用没有代码生成也无需XML配置。同时也可以修改默认值来满足特定的需求。还允许我们通过 yaml 来管理应用的配置比传统的 properties 文件更加简洁。 Spring Boot 提供了一系列的 Starter可以快速集成常用的框架例如 Spring Data JPA、Spring Security、MyBatis 等。starter-webSpring Boot 会自动配置 Tomcat 和 Spring MVC。 起步依赖将具备某种功能的坐标打包到一起并提供一些默认的功能一个Maven项目对象模型POM。定义了对其他库的传递依赖这些东西加在一起即支持某项功能。 Spring Boot 提供了一系列的 Actuator可以帮助我们监控和管理应用比如健康检查、审计、统计等。 2. 自动配置原理 容器利用反射技术根据 Bean 的类型、名称等自动注入所需的依赖。 自动配置 是一个运行时更准确地说是应用程序启动时的过程考虑了众多因素才决定Spring配置应该用哪个不该用哪个。该过程是Spring自动完成的。 Spring Boot 通过EnableAutoConfiguration开启自动装配通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配。 自动配置类其实就是通过Conditional**按需加载**的配置类想要其生效必须引入spring-boot-starter-xxx包实现起步依赖。 3. 常用注解 1. SpringBootApplication 加在启动类上是Configuration、EnableAutoConfiguration、ComponentScan 注解的集合。 EnableAutoConfiguration启用 SpringBoot 的自动配置机制 ComponentScan扫描被Component (Repository,Service,Controller)注解的 bean注解默认会扫描该类所在的包下所有的类。 Configuration允许在 Spring 上下文中注册额外的 bean 或导入其他配置类。 2. Bean 类相关 对象注入 Autowired, Resource 自动装配的 bean 的类Component, Repository, Service, Controller 控制器 bean,并且是将函数的返回值直接填入 HTTP 响应体中,是 REST 风格的控制器RestController ( Controller ResponseBody ) 声明 Spring Bean 的作用域: Scope ( singleton, prototype, request, session) 声明配置类: Configuration Qualifier 3. 处理常见HTTP请求类型 GET, POST, PUT, DELETE 加入 xMapping()相当于为RequestMapping指定method。 GetMapping(users) 等价于RequestMapping(value/users,methodRequestMethod.GET) 4. 前后端传值 PathVariable用于获取路径参数RequestParam用于获取查询参数。 请求的 url /klasses/123456/teachers?typeweb 服务获取klassId123456,typeweb GetMapping(/klasses/{klassId}/teachers) public ListTeacher getKlassRelatedTeachers(PathVariable(klassId) Long klassId,RequestParam(value type, required false) String type ) { ... } RequestBody 读取 Request 请求的 body 部分并且Content-Type 为 application/json 格式的数据接收到数据之后会自动将数据绑定到 Java 对象上去。 系统可以自定义会使用HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。 一个请求方法只可以有一个。 PostMapping(/sign-up) public ResponseEntity signUp(RequestBody Valid UserRegisterRequest userRegisterRequest) {userService.save(userRegisterRequest);return ResponseEntity.ok().build(); } 5. 读取配置信息 读取application.yml中的数据。 wuhan2020: 2020年初武汉爆发了新型冠状病毒疫情严重但是我相信一切都会过去武汉加油中国加油 ​ my-profile:name: Guide哥email: koushuangbwcx163.com ​ library:location: 湖北武汉加油中国加油books:- name: 天才基本法description: 二十二岁的林朝夕在父亲确诊阿尔茨海默病这天得知自己暗恋多年的校园男神裴之即将出国深造的消息——对方考取的学校恰是父亲当年为她放弃的那所。- name: 时间的秩序description: 为什么我们记得过去而非未来时间“流逝”意味着什么是我们存在于时间之内还是时间存在于我们之中卡洛·罗韦利用诗意的文字邀请我们思考这一亘古难题——时间的本质。- name: 了不起的我description: 如何养成一个新习惯如何让心智变得更成熟如何拥有高质量的关系 如何走出人生的艰难时刻 ​ Value(${p}) 读取简单的配置 Value(${wuhan2020}) String wuhan2020; ConfigurationProperties(prefix)读取配置信息并与 bean 绑定 Component ConfigurationProperties(prefix library) class LibraryProperties {NotEmptyprivate String location;private ListBook books; ​SetterGetterToStringstatic class Book {String name;String description;}省略getter/setter...... } 6. 参数校验 即使在前端对数据进行校验的情况下我们还是要对传入后端的数据再进行一遍校验避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。 JSR(Java Specification Requests 是一套 JavaBean 参数校验的标准它定义了很多常用的校验注解我们可以直接将这些注解加在我们 JavaBean 的属性上面。引入spring-boot-starter-validation依赖来自javax.validation.constraints包。 1. 常用字段 NotEmpty 被注释的字符串的不能为 null 也不能为空 NotBlank 被注释的字符串非 null并且必须包含一个非空白字符 Null 被注释的元素必须为 null NotNull 被注释的元素必须不为 null AssertTrue 被注释的元素必须为 true AssertFalse 被注释的元素必须为 false Pattern(regex,flag)被注释的元素必须符合指定的正则表达式 Email 被注释的元素必须是 Email 格式。 Min(value)被注释的元素必须是一个数字其值必须大于等于指定的最小值 Max(value)被注释的元素必须是一个数字其值必须小于等于指定的最大值 DecimalMin(value)被注释的元素必须是一个数字其值必须大于等于指定的最小值 DecimalMax(value) 被注释的元素必须是一个数字其值必须小于等于指定的最大值 Size(max, min)被注释的元素的大小必须在指定的范围内 Digits(integer, fraction)被注释的元素必须是一个数字其值必须在可接受的范围内 Past被注释的元素必须是一个过去的日期 Future 被注释的元素必须是一个将来的日期 2. 验证参数 请求体参数前加Valid验证失败它将抛出MethodArgumentNotValidException。 RestController RequestMapping(/api) public class PersonController { ​PostMapping(/person)public ResponseEntityPerson getPerson(RequestBody Valid Person person) {return ResponseEntity.ok().body(person);} } 其他请求参数还要类上加Validated告诉spring去校验。 RestController RequestMapping(/api) Validated public class PersonController { ​GetMapping(/person/{id})public ResponseEntityInteger getPersonByID(Valid PathVariable(id) Max(value 5,message 超过 id 的范围了) Integer id) {return ResponseEntity.ok().body(id);} } 7. 全局异常处理 RestControllerAdvice 全局异常处理类 ( ResponseBody ControllerAdvice) ExceptionHandler 异常处理方法 RestControllerAdvice public class GlobalExceptionHandler { ​/*** 请求参数异常处理*/ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity? handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {......} } 8. JPA 1. 表 Entity声明一个类对应一个数据库实体。 Table 表名 Entity Table(name role) public class Role {... } 2. 主键 Id 主键 GeneratedValue直接使用 JPA 内置提供的四种主键生成策略来指定主键生成策略。 Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; 默认 AUTO 自增长 IDENTITY 3. 字段类型 Column 普通字段 Column(name user_name, nullable false, length32) private String userName; Transient 不持久化不映射数据库字段不存入数据库。 Transient private String secrect; // not persistent because of Transient Lob 大字段 Lob private String content; Enumerated 枚举类型 Enumerated(EnumType.STRING)private Gender gender; ​ ...public enum Gender {MALE(男性),FEMALE(女性); ​private String value;Gender(String str){valuestr;} } ​ 9. 事务 Transactional 类当把Transactional 注解放在类上时表示该类的所有 public 方法都配置相同的事务属性信息。 方法当类配置了Transactional方法也配置了Transactional方法的事务会覆盖类的事务配置信息。 Transactional(rollbackFor Exception.class) public void save() {...... } 10. json数据处理 JsonIgnoreProperties, JsonIgnore 过滤特定字段不返回或不解析 //生成json时将userRoles属性过滤 JsonIgnoreProperties({userRoles}) public class User {private String userName;private String fullName;private String password;//生成json时将userRoles属性过滤JsonIgnoreprivate ListUserRole userRoles new ArrayList(); } JsonFormat 格式化 JsonFormat(shapeJsonFormat.Shape.STRING, patternyyyy-MM-ddTHH:mm:ss.SSSZ, timezoneGMT) private Date date; JsonUnwrapped 扁平化对象 解析出内层json对象到外层。 ... public class Account {// JsonUnwrappedprivate Location location;// JsonUnwrappedprivate PersonInfo personInfo; ​...public static class Location {private String provinceName;private String countyName;}...public static class PersonInfo {private String userName;private String fullName;} } {location: {provinceName: 湖北,countyName: 武汉},personInfo: {userName: coder1234,fullName: shaungkou} } ​ ... ​ {provinceName: 湖北,countyName: 武汉,userName: coder1234,fullName: shaungkou }
http://www.dnsts.com.cn/news/96021.html

相关文章:

  • 服务器租用网站模版网站建设的费是多少
  • 西安网站制作公司官网神鹰网站建设公司
  • 广州做网站海珠新科怎样更换网站模板
  • 青岛市建设监理网站长沙做官方网站
  • ICP备案和实际网站不是一个名字手机网站电话漂浮代码
  • 查网站备案信息网站上怎么做动画广告视频在线观看
  • 个人备案 网站名西安模板网站建站
  • 网站备案审核流程wordpress用ip访问
  • 网站短信验证怎么做建设企业高端网站
  • 做直播网站收费吗wordpress游戏小程序
  • 北京网站开发公司一网天行网站提交入口
  • 甘肃三北防护林建设局网站新公司网站设计
  • 椒江建设局网站wordpress修改主题文件
  • 企业应该如何建设网站全国招聘网最新招聘信息
  • 西安行业网站如何为一个网站做app
  • wap网站代码网站建设的重要性意义与价值
  • 一个公司可以做两个网站推广吗网站建设费用计入管理费用
  • 1150网站建设服务器主板网站开发管理学什么
  • 营销型网站收费电脑版网页
  • a站是啥友链交易平台源码
  • 备案 网站错了企业网站建设商城
  • 成都哪里有做网站的湖州营销网站建设
  • 管理外贸网站模板下载wordpress define
  • 关于设计网站公众号 商城 网站开发
  • 做好公众号 网站建设凤台县美丽乡村建设网站
  • 怎么做网站里的悬浮窗口一键查询个人房产
  • 网站建设怎么样工作动漫设计与制作行业
  • 百度免费网站建设手机网页如何制作
  • 广州网站建设新锐网页设计代表性案例
  • 网站根域名是什么东莞网站seo推广