• Springboot入门


    目录

    一、SpringBoot简介

    springBoot是什么

    二、SpringBoot入门

    1、新创项目步骤:

    2、分析SpringBoot的目录结构:

    3、下载properties与yml的文件转换插件

    三、统一响应类及错误编码类

    原始用法

    Eolink的使用:

    响应封装类

    使用响应封装类之后

    结论


    一、SpringBoot简介

    springBoot是什么

    Spring Boot它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。
    也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具,同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),
    Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑

    注1:敏捷式开发

    注2:spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式, 就像maven整合了所有的jar包,spring boot整合了所有的框架

    注3:基于Spring框架的一站式解决方案

    二、SpringBoot入门

    1、新创项目步骤:

    可以换源:
    http://start.aliyun.com  

    优点:速度快

     

     

     

     如果在旧的工作区间老是会报错的话,那就直接去file新new一个project,新建一个工作区间。

     新建一个类

    IndexController :

    1. package com.ycx.springboot01.demo;
    2. import org.springframework.web.bind.annotation.RequestMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. /**
    5. * @author 杨总
    6. * @create 2022-10-28 19:04
    7. *
    8. * RestController等价于@responseBody+@controller
    9. */
    10. @RestController
    11. public class IndexController {
    12. @RequestMapping("/")
    13. public String index(){
    14. System.out.println("come in");
    15. // inde 字符串
    16. return "index";
    17. }
    18. }

     

     注意:在创建项目时,某些组件是不可随意勾选,否则是会有相应的代价,

    例如勾选了mybatis:

    那么,

    解决方案:

    1、添加数据库配置(本期暂时不涉及)

    2、排除DataSource

    即可。

    2、分析SpringBoot的目录结构:

    src

            main

                    java

                    resource

                            static 放静态资源

                            template

                                    1、模板引擎,相当于maven项目中的webapp

                                    2、SpringBoot默认是不支持jsp的

                application.properties 是SpringBoot中的唯二的配置文件:

    1. # 应用名称
    2. spring.application.name=springboot01
    3. # 应用服务 WEB 访问端口
    4. server.port=8080
    5. server.servlet.context-path=/yjy

     

              test

    3、下载properties与yml的文件转换插件

     下载之后一定要重启idea,否则是不生效的。

     

    三、统一响应类及错误编码类

    原始用法

    1. package com.ycx.springboot01.demo;
    2. import jdk.nashorn.internal.objects.annotations.Constructor;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.RestController;
    7. import java.util.Arrays;
    8. import java.util.HashMap;
    9. import java.util.List;
    10. import java.util.Map;
    11. /**
    12. * @author 杨总
    13. * @create 2022-10-28 23:18
    14. */
    15. @RestController
    16. @RequestMapping("/book")
    17. public class BookController {
    18. @RequestMapping("/list")
    19. public Map list(){
    20. // 查询数据库
    21. List<Book> books = Arrays.asList(new Book(1, "西游记"),
    22. new Book(2, "三国演义"),
    23. new Book(3, "水浒传"),
    24. new Book(4, "红楼梦"));
    25. Map map=new HashMap();
    26. map.put("data",books);
    27. map.put("total",122);
    28. map.put("msg","查询成功");
    29. map.put("code",200);
    30. return map;
    31. }
    32. @RequestMapping("/add")
    33. public Map add(){
    34. Map map=new HashMap();
    35. map.put("msg","新增成功");
    36. map.put("code",200);
    37. return map;
    38. }
    39. @RequestMapping("/update")
    40. public Map update(){
    41. Map map=new HashMap();
    42. map.put("msg","修改成功");
    43. map.put("code",200);
    44. return map;
    45. }
    46. @RequestMapping("/del")
    47. public Map del(){
    48. Map map=new HashMap();
    49. map.put("msg","删除成功");
    50. map.put("code",200);
    51. return map;
    52. }
    53. @RequestMapping("/load")
    54. public Map load(){
    55. Map map=new HashMap();
    56. map.put("data",new Book(1,"西游记"));
    57. map.put("msg","查询成功");
    58. map.put("code",200);
    59. return map;
    60. }
    61. }
    62. @AllArgsConstructor
    63. @Data
    64. class Book{
    65. private int id;
    66. private String name;
    67. }

    测试:

            查询

     但是,

    1. package com.ycx.springboot01.demo;
    2. import jdk.nashorn.internal.objects.annotations.Constructor;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import org.springframework.web.bind.annotation.*;
    6. import java.util.Arrays;
    7. import java.util.HashMap;
    8. import java.util.List;
    9. import java.util.Map;
    10. /**
    11. * @author 杨总
    12. * @create 2022-10-28 23:18
    13. */
    14. @RestController
    15. @RequestMapping("/book")
    16. public class BookController {
    17. @GetMapping("/list")
    18. public Map list(){
    19. // 查询数据库
    20. List<Book> books = Arrays.asList(new Book(1, "西游记"),
    21. new Book(2, "三国演义"),
    22. new Book(3, "水浒传"),
    23. new Book(4, "红楼梦"));
    24. Map map=new HashMap();
    25. map.put("data",books);
    26. map.put("total",122);
    27. map.put("msg","查询成功");
    28. map.put("code",200);
    29. return map;
    30. }
    31. @PutMapping("/add")
    32. public Map add(){
    33. Map map=new HashMap();
    34. map.put("msg","新增成功");
    35. map.put("code",200);
    36. return map;
    37. }
    38. @PostMapping("/update")
    39. public Map update(){
    40. Map map=new HashMap();
    41. map.put("msg","修改成功");
    42. map.put("code",200);
    43. return map;
    44. }
    45. @DeleteMapping("/del")
    46. public Map del(){
    47. Map map=new HashMap();
    48. map.put("msg","删除成功");
    49. map.put("code",200);
    50. return map;
    51. }
    52. @RequestMapping("/load")
    53. public Map load(){
    54. Map map=new HashMap();
    55. map.put("data",new Book(1,"西游记"));
    56. map.put("msg","查询成功");
    57. map.put("code",200);
    58. return map;
    59. }
    60. }
    61. @AllArgsConstructor
    62. @Data
    63. class Book{
    64. private int id;
    65. private String name;
    66. }

     

     测试需要借用一个软件Eolink:

    Eolink的使用:

            更细粒度的调测后台数据的接口

     

     

    把地址栏上的请求地址复制到Eolink去进行测试:

     (测试删除)

     再点击发送:

     

    修改:

     

     

     所以要注意它的请求方式:

     

    假如传个参数,

     

    增加:

     

     

     删除:

     

     

    响应封装类

    Result.java

    1. package com.ycx.springboot01.result;
    2. public class Result {
    3. private int code;
    4. private String msg;
    5. //因为返回的数据不知道是什么类型,所以定义一个泛型
    6. private T data;
    7. private long total;
    8. public long getTotal() {
    9. return total;
    10. }
    11. public void setTotal(long total) {
    12. this.total = total;
    13. }
    14. /**
    15. * 成功的时候调用
    16. */
    17. public static Result ok(T data) {
    18. return new Result(data);
    19. }
    20. public static Result ok(int code,String msg) {
    21. return new Result<>(code,msg);
    22. }
    23. public static Result ok(int code,String msg,T data) {
    24. Result success = ok(data);
    25. success.setCode(code);
    26. success.setMsg(msg);
    27. return success;
    28. }
    29. public static Result ok(int code,String msg,T data,long total) {
    30. Result success = ok(code,msg,data);
    31. success.setTotal(total);
    32. return success;
    33. }
    34. /**
    35. * 失败的时候调用
    36. */
    37. public static Result error(CodeMsg codeMsg) {
    38. return new Result(codeMsg);
    39. }
    40. private Result(T data) {
    41. this.data = data;
    42. }
    43. private Result(int code, String msg) {
    44. this.code = code;
    45. this.msg = msg;
    46. }
    47. private Result(CodeMsg codeMsg) {
    48. if (codeMsg != null) {
    49. this.code = codeMsg.getCode();
    50. this.msg = codeMsg.getMsg();
    51. }
    52. }
    53. public int getCode() {
    54. return code;
    55. }
    56. public void setCode(int code) {
    57. this.code = code;
    58. }
    59. public String getMsg() {
    60. return msg;
    61. }
    62. public void setMsg(String msg) {
    63. this.msg = msg;
    64. }
    65. public T getData() {
    66. return data;
    67. }
    68. public void setData(T data) {
    69. this.data = data;
    70. }
    71. }

    CodeMsg.java

    1. package com.ycx.springboot01.result;
    2. public class CodeMsg {
    3. private int code;
    4. private String msg;
    5. //通用的错误码
    6. public static CodeMsg SUCCESS = new CodeMsg(200, "success");
    7. public static CodeMsg SERVER_ERROR = new CodeMsg(500, "服务端异常");
    8. public static CodeMsg BIND_ERROR = new CodeMsg(500101, "参数校验异常:%s");
    9. public static CodeMsg REQUEST_ILLEGAL = new CodeMsg(500102, "请求非法");
    10. public static CodeMsg ACCESS_LIMIT_REACHED = new CodeMsg(500104, "访问太频繁!");
    11. //登录模块5002XX
    12. public static CodeMsg SESSION_ERROR = new CodeMsg(500210, "Session不存在或者已经失效");
    13. public static CodeMsg PASSWORD_EMPTY = new CodeMsg(500211, "登录密码不能为空");
    14. public static CodeMsg MOBILE_EMPTY = new CodeMsg(500212, "手机号不能为空");
    15. public static CodeMsg MOBILE_ERROR = new CodeMsg(500213, "手机号格式错误");
    16. public static CodeMsg MOBILE_NOT_EXIST = new CodeMsg(500214, "手机号不存在");
    17. public static CodeMsg PASSWORD_ERROR = new CodeMsg(500215, "密码错误");
    18. //商品模块5003XX
    19. //订单模块5004XX
    20. public static CodeMsg ORDER_NOT_EXIST = new CodeMsg(500400, "订单不存在");
    21. //秒杀模块5005XX
    22. public static CodeMsg MIAO_SHA_OVER = new CodeMsg(500500, "商品已经秒杀完毕");
    23. public static CodeMsg REPEATE_MIAOSHA = new CodeMsg(500501, "不能重复秒杀");
    24. public static CodeMsg MIAOSHA_FAIL = new CodeMsg(500502, "秒杀失败");
    25. private CodeMsg() {
    26. }
    27. private CodeMsg(int code, String msg) {
    28. this.code = code;
    29. this.msg = msg;
    30. }
    31. public int getCode() {
    32. return code;
    33. }
    34. public void setCode(int code) {
    35. this.code = code;
    36. }
    37. public String getMsg() {
    38. return msg;
    39. }
    40. public void setMsg(String msg) {
    41. this.msg = msg;
    42. }
    43. public CodeMsg fillArgs(Object... args) {
    44. int code = this.code;
    45. String message = String.format(this.msg, args);
    46. return new CodeMsg(code, message);
    47. }
    48. @Override
    49. public String toString() {
    50. return "CodeMsg [code=" + code + ", msg=" + msg + "]";
    51. }
    52. }

    使用响应封装类之后

    1. package com.ycx.springboot01.demo;
    2. import com.ycx.springboot01.result.Result;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import org.springframework.web.bind.annotation.*;
    6. import java.util.Arrays;
    7. import java.util.HashMap;
    8. import java.util.List;
    9. import java.util.Map;
    10. /**
    11. * @author 杨总
    12. * @create 2022-10-28 23:18
    13. */
    14. @RestController
    15. @RequestMapping("/book2")
    16. public class BookController2 {
    17. @GetMapping("/list")
    18. public Result list(){
    19. // 查询数据库
    20. List<Book> books = Arrays.asList(new Book(1, "西游记"),
    21. new Book(2, "三国演义"),
    22. new Book(3, "水浒传"),
    23. new Book(4, "红楼梦"));
    24. return Result.ok(200,"查询成功",books,222);
    25. }
    26. @PutMapping("/add")
    27. public Result add(Book book){
    28. System.out.println(book);
    29. return Result.ok(200,"新增成功");
    30. }
    31. @PostMapping("/update")
    32. public Result update(){
    33. return Result.ok(200,"修改成功");
    34. }
    35. @DeleteMapping("/del")
    36. public Result del(int bid){
    37. return Result.ok(200,"删除成功");
    38. }
    39. @RequestMapping("/load")
    40. public Result load(){
    41. return Result.ok(200,"加载成功",new Book(5,"阿喵正传"));
    42. }
    43. }

     

     假如

     

     

    结论

    http://localhost:8080/xxx/list
    http://localhost:8080/xxx2/list
    两个链接查询结果是一样的,明显使用响应封装类配置后代码更加简介了

    统一的响应封装类以及错误编码类,这个是一种良好的编码习惯!

    今日内容就到这啦,再见咯!

  • 相关阅读:
    java计算机毕业设计航空机票预订系统源码+mysql数据库+系统+LW文档+部署
    C语言打卡第13天,2066:【例2.3】买图书
    [附源码]计算机毕业设计JAVA鑫地酒店酒水库存管理系统论文
    netty自定义channel id
    c++day2
    05.QString字符串处理及中文乱码问题处理
    javaScript 中的宏任务、微任务
    java毕业设计论文题目精品springboot家政服务预订系统
    iOS描述文件(.mobileprovision)一键申请
    Codeforces Round #790 (Div. 4) G. White-Black Balanced Subtrees 感觉很好的树形dp的板子题
  • 原文地址:https://blog.csdn.net/weixin_65808248/article/details/127576457