• Spring Boot 初探


    Springboot初探

    一、springboot基础

    1. 需要的前置知识:
      1).利用maven构建项目
      2).spring注解
      3).RESTful API
    2. 是spring MVC的升级版,但可以不需要掌握spring mvc
    3. java 和 Maven等版本保持一致

    1.第一个springboot程序

    1. 用idea创建一个springboot web程序
      new --> project --> Spring Initalizr --> next -->填写相关的内容 --> 选择web --> 勾选web -->创建成功
      项目结构:

    2. 启动spring boot项目的方式:
      1).在程序中idea直接run Application.java类,在有mvn环境中
      2).进入到项目所在目录,命令: mvn spring-boot:run
      3).先编译程序 mven install
      然后进入target目录,会生成一个jar(项目名-版本号-SNAPSHOT.jar)文件,然后 java -jar 项目名-版本号-SNAPSHOT.jar

    2.自定义属性配置

    1. 配置文件为src/main/resources/application.properties
      名字不可变,有些情况下可以使用application.yml
    2. 配置端口 server.prot=8080
      配置项目根路径 server.content-path:/项目名
    3. 配置常用变量 变量名=变量值
      在程序中使用时可以用@Value("${变量名}")来申明使用
    4. 可以配置多个配置文件,使用其中一个配置文件,但是主配置文件仍然是application.properties
      如配置了多个配置文件 application-dev.peoperties 和 application-prod.peoperties,在主配置文件中可以用 spring.profiles.active=dev/prod来决定使用哪个配置文件

    总结

    @Value  简单配置的取值
    @Component  为配置类添加为bean组件
    @ConfigurationProperties  为配置类添加配置说明,取得的值是哪一前缀对应的配置值
    

    3.Controller的使用

    1 .Controller即用来接客户端的请求的

    分类 说明
    @Controller 处理http请求
    @RestController Spring4之后新加的注解,用来返回json,简化之前的@Controller+@ResponseBody组合
    @RequestMapping 配置url映射

    2. 说明

    1. 在springboot中使用@RestController即可以做到直接返回json格式
      在使用@Controller需要和@ResponseBody组合才能返回json格式
    2. 直接使用@Controller时,返回的是对项目中某个页面的引用,需要引入模板thymeleaf,并设置响应的html/jsp页面,才能返回页面内容
    3. 可以用@RequestMaping配置每个controller(Controller和RestController)和controller的方法的url
    @RquestMapping(value="/hlleo", method=RequestMethod.GET) //配置单映射
    @RquestMapping(value={"/hlleo","/hi"},method=RequestMethod.GET) //配置多映射  
    其中当不指定method时,get和post方式都可以访问
    

    3. Controller如何处理url中的参数

    分类 说明
    @PathVariable 获取url中的数据
    @RequestParam 获取请求参数的值
    @GetMapping/@PostMapping 组合注解

    实例如下:
    @PathVariable 获取url中的数据

    @RequestMapping(value="/say/{id}", method=RequestMethod.GET)
    public String say(@PathVariable("id") Integer myid){
    	return "id: " + myid;
    }
    访问 url : localhost:8080/say/100
    得到 id: 100
    

    @RequestParam 获取请求参数的值

    @RequestMapping(value="/say", method=RequestMethod.GET)
    public String say(@("id") Integer myid){
    	return "id: " + myid;
    }
    访问 url : localhost:8080/say?id=100
    得到 id: 100
    

    @GetMapping 组合注解

    @GetMapping(value="/say") 相当于 
    @RequestMapping(value="/say", method=RequestMethod.GET)
    @PostMapping(value="/say") 相当于
    @RequestMapping(value="/say", method=RequestMethod.POST)
    

    4.spring-data-jpa

    JAP(java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate,TopLink等。

    5.事务管理

    数据库事务:即一系列的mysql操作的集合
    @Transactional 即是对事务管理方法的注解方式

    二、springboot web

    1.springboot表单验证

    可以验证传入对象的某些属性的值
    可以在对象定义类中对某个属性加对应的注解,如最小值验证

    @Min(value=18, message="错误信息")
    

    然后在使用这个类时,需要在前面加@Valid,即可以做到验证对象属性。

    2.AOP处理请求

    AOP是一种编程范式,与语言无关,一种编程思想

    分类 解释
    AOP Aspect Oriented Programming 面向切面
    OOP Object Oriented Programming 面向对象
    POP Procedure Oriented Programming 面向过程
    springboot应用AOP

    首先需要加入AOP依赖

    <dependency>			
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    

    然后定义一个切面类处理Http请求

    @Aspect   //声明为切面
    @Component   //加入springbean中,自动注入
    public class HttpAspect {
    	//用logger的方式打印日志
        private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
        
    	//声明为公共切面可以省去重复的定义
        @Pointcut("execution(public * com.kk.Controller.GirlController.*(..))")  //拦截这个正则表达式对应的controoler
        public void log(){
        }
        
        @Before("log()")
        public void doBefore(){
            logger.info("before aspect");
        }
        @After("log()")
        public void doAfter(){
            logger.info(" aspect after");
        }
    }
    

    3.异常处理

    出现异常时和成功时返回的对象应该保持一致,即应该完成对数据的封装和格式的统一,否则调用端口时很难处理。
    初步处理异常
    一般做如下处理:
    1.定义一个返回结果类, 一般定义在domain或model包内
    一般包含返回状态码,返回状态描述,返回对象内容,

      public class Result<T> {
        /** 错误码. */
        private Integer code;
        /** 提示信息. */
        private String msg;
        /** 具体的内容. */
        private T data;
       .....
       }
    

    2.返回时应该返回 Result<Object>

    @PostMapping(value="/girls")
        public Result<Girl> girlAdd(@Valid Girl girl, BindingResult bindingResult){
            if(bindingResult.hasErrors()){
                return ResultUtil.error(1,bindingResult.getFieldError().getDefaultMessage());
            }
            girl.setCupSize(girl.getCupSize());
            girl.setAge(girl.getAge());
            return ResultUtil.success(girlRepository.save(girl));
        }
    

    3.优化去除重复代码时应用了一个ResultUtil类

    public class ResultUtil {
        public static Result success(Object object){
            Result result = new Result();
    
            result.setCode(0);
            result.setMsg("成功");
            result.setData(object);
            return result;
        }
    
        public static Result error(Integer code, String msg){
            Result result = new Result();
            result.setCode(code);
            result.setMsg(msg);
            return result;
        }
    }
    

    定义自己的异常类和系统异常区分开

    1.定义一个自己的异常类

    //继承RuntimeException是因为springboot的异常就是这个
    public class GirlException extends RuntimeException {
        private Integer  code;
        public GirlException(Integer code, String message) {
            super(message);
            this.code = code;
        }
        public Integer getCode() {
            return code;
        }
        public void setCode(Integer code) {
            this.code = code;
        }
    }
    

    2.定义一个捕获异常的类

    @ControllerAdvice   //springboot特殊的捕获异常类的注解
    public class ExceptionHandle {
    
        @ExceptionHandler(value=Exception.class)  //捕获的是Exception类型的异常
        @ResponseBody   //为了返回的是json格式
        public Result Handle(Exception e){
            if(e instanceof GirlException){
                GirlException girlException = (GirlException)e;
                return ResultUtil.error(girlException.getCode(),girlException.getMessage());
            }else {
                return ResultUtil.error(-1, "未知错误");
            }
        }
    }
    
  • 相关阅读:
    三层架构
    SQL数据库资料整理(2006年)
    SQL基础:常用SQL语句详解(转)
    什么是SOA?
    DOTNET中的SqlHelper类
    C#精髓(WMI完美秀出CPU编号厂商主频电压等全部信息)
    根据分类,每类随机抽取N个(N对每个分类都不一样,SQL问题)
    C#,你真的入门了吗
    .Net平台开发的技术规范与实践精华总结 (转)
    学习Java需要达到的30个目标
  • 原文地址:https://www.cnblogs.com/phtjzzj/p/7542868.html
Copyright © 2020-2023  润新知