• 2.MidBook经验之MybatisPlus


    1.创建项目

    1.创建springboot 父工程 (放公共依赖)
    2.创建子工程 点击项目右键module—>maven 起名common
    创建子工程的子工程,删除所有不需要的src目录(和mould平级的删除)
    3.子项目创建springboot启动类

    2.使用gitee版本控制

    1. 创建查看
    2. 复制git链接
    3. idea提交仓库 VCS–>import into —>createGit rep–>选择文件夹(!!!记住是空文件夹,比如commit失败)–>yes
      右键项目 git–>add提交到本地, -->repository–>remotes设置复制的远程地址
      右键项目 git–>commit dir–>加msg–>commit and push提交代码

    3.mp也有service和serviceImpl需要继承,因为mapper继承了,其他方法要调用直接mp帮我们注入

    4.找不到bean mapperScan注解可以写在配置类(@Configuration)上 也可以写在启动类上

    5.删除 delete无法直接删除(测试失败),需要配合swagger测试

    @DeleteMapping("{id}") 
    @Configuration
    @EnableSwagger2
    public class Swagger2Config {
    
        @Bean
        public Docket webApiConfig(){
    
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("webApi")
                    .apiInfo(webApiInfo())
                    .select()
                    //只显示api路径下的页面
                    .paths(Predicates.and(PathSelectors.regex("/api/.*")))
                    .build();
    
        }
    
        @Bean
        public Docket adminApiConfig(){
    
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("adminApi")
                    .apiInfo(adminApiInfo())
                    .select()
                    //只显示admin路径下的页面
                    .paths(Predicates.and(PathSelectors.regex("/admin/.*")))   //我觉得非常必要的功能就是把在这个admin路径下面的接口全部显示出来
                    .build();
    
        }
    
        private ApiInfo webApiInfo(){
    
            return new ApiInfoBuilder()
                    .title("网站-API文档")
                    .description("本文档描述了网站微服务接口定义")
                    .version("1.0")
                    .contact(new Contact("aaa", "http://aaa.com", "9827912158@qq.com"))
                    .build();
        }
    
        private ApiInfo adminApiInfo(){
    
            return new ApiInfoBuilder()
                    .title("后台管理系统-API文档")
                    .description("本文档描述了后台管理系统微服务接口定义")
                    .version("1.0")
                    .contact(new Contact("aaa", "http://aaa.com", "9827912158@qq.com"))
                    .build();
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    6.微服务项目想要不同模块引入swagger 可以扫描相同的包来引入

      @ComponentScan(basePackages="top.jams")
      @Api()
      @ApiOperation()
      @ApiParam
       //ui中发送json数据 swagger有模板直接点击即可
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7.统一返回结果(每个controller都返回相同 Result对象),方便管理

    8.需要完成的任务

    1. 插入生成加密秘钥
      hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis()+“”+random.nextInt(1000)));
    2. 逻辑删除,搭建swagger环境
    3. 实现带条件的分页查询
      如果没有条件需要 !StringUtils.isEmpty() 判空
    4. 添加医院
      1.设置签名秘钥使用MD5加密(时间戳和随机数串)
    5. 根据id获取医院设置
    6. 批量删除医院
      json [1,2]
    7. 医院设置锁定和解锁(就是更新一个状态,是否可以使用医院接口)
    8. 发送签名秘钥
      //TODO 发送短信 代表以后要完善的地方

    9.为了前端方便,当传数据为空的时候我们controller使用

      @PostMapping("")   //没有这个@RequestBody不生效
        配合 @RequestBody(required=false)   User u 前端使用json传过来在参数中使用(可为空)
    
    • 1
    • 2

    10.全局异常处理(前端直接显示500页面对用户很不友好) 直接给json数据提示有异常

       @ControllerAdvice   //controller的过滤 aop
        class xx{
             //返回json数据
             @ExceptionHandler(Exception.class)  //捕获到的异常类型
             @ResponseBody
             public Result error(Exception e){
                     e.print...;
                      return Result.fail();
             }
    @ExceptionHandler(MyException.class)  //捕获自定义的异常类型,需要手动抛出异常
             @ResponseBody
             public Result error(Exception e){
                     e.print...;
                      return Result.fail();
             }
     
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    //自定义异常
    
    • 1
    @Data
    @ApiModel(value = "自定义全局异常类")
    public class HospitalException extends RuntimeException {
    
        @ApiModelProperty(value = "异常状态码")
        private Integer code;
    
        /**
         * 通过状态码和错误消息创建异常对象
         * @param message
         * @param code
         */
        public HospitalException(String message, Integer code) {
            super(message);
            this.code = code;
        }
    
        /**
         * 接收枚举类型对象
         * @param resultCodeEnum
         */
        public HospitalException(ResultCodeEnum resultCodeEnum) {
    
            super(resultCodeEnum.getMessage());
            this.code = resultCodeEnum.getCode();
        }
    
        @Override
        public String toString() {
            return "HospitalException{" +
                    "code=" + code +
                    ", message=" + this.getMessage() +
                    '}';
        }
    }
      			if(1==1){
                    throw new HospitalException("不能为空",500);
                 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    11.!!!统一日志管理(之前linux 每次日志生成在jar包的当前文件夹,或者docker 里面操作生成日志困难)

     //日志等级(高的可以看到低的日志) 低到高  OFF FATAL ERROR WARN INFO DEBUG ALL
    //springboot默认只打印INFO及以上的消息
        //记得注释 logging.level.root=WARN(这个是在控制台调试使用) !!!先创建文件夹
    //怎么把日志输出到硬盘指定位置,springboot默认Logback日志 在resources放xml文件可配置路径
    <property name="log.path" value="D://aa">
     //输出3个文件,!!!直接对日志进行分级
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    12.要修改数据 就先得到数据后修改

    13.可不用指定名字

    @PathVariable long current,
    
    • 1

    14.查询使用多个Vo对象来代表查询条件

     @PostMapping("findPageHospSet/{current}/{limit}")
        public Result findPageHospSet(@PathVariable long current,
                                      @PathVariable long limit,
                                      @RequestBody
    (required = false) HospitalSetQueryVo hospitalSetQueryVo)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    15.分页

    @ApiOperation("分页查询医院设置")
        @PostMapping("findPageHospSet/{current}/{limit}")
        public Result findPageHospSet(@PathVariable long current
                                    , @PathVariable long limit
                                    , @RequestBody (required = false)HospitalSetQueryVo vo){
            Page<HospitalSet> setPage = new Page<HospitalSet>(current,limit);
    
            QueryWrapper<HospitalSet> wrapper = new QueryWrapper<>();
            //得到医院名字
            String hosname = vo.getHosname();
            //得到医院编号
            String hoscode = vo.getHoscode();
            if(!StringUtils.isEmpty(hosname)){ //对必须要查询的搜索框判空
                wrapper.like("hosname",vo.getHosname());
            }
            if(!StringUtils.isEmpty(hoscode)){
                wrapper.like("hoscode",vo.getHoscode());
            }
    
    
            Page<HospitalSet> page = hospitalSetService.page(setPage,wrapper);
    
            return Result.ok(page);
    
    
    
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    大数据培训MR支持的压缩编码
    Java入门第116课——向List中插入和删除元素
    学习JavaEE的日子 Day39 注解,反射
    19.删除链表的倒数第N个节点
    小功率弧焊电流源设计及建模仿真
    IIS6.0 PUT上传漏洞
    AP8851H 宽电压降压恒压DC-DC 电源管理芯片 5V 12V输出 零功耗 快充方案应用
    论文阅读:SERE: Exploring Feature Self-relation for Self-supervised Transformer
    医院绩效考核系统源码 医院绩效考核系统方案
    Tuxera2022Mac系统读写NTFS磁盘工具装机必备
  • 原文地址:https://blog.csdn.net/weixin_47039303/article/details/133866797