Spring boot注解

MVC RestfulApi
-Model
-View
-Controller
-Service

Controller:
一、 @Controller 与 @RestController 的区别
二、@RequestMapping:放在类上和方法上的区别
HttpServletResponse  HttpServletRequest
参考链接: https://www.iteye.com/news/32657/
1. 处理单个URI
    //处理各种http方法,默认是Get方法
    @RequestMapping(method = RequestMethod.POST)
2. 处理多个URI
    @RequestMapping(value={
        "",
        "/page",
        "page*"  
        })
    String indexMultipleMapping(){return "Hello";}

  @GetMapping //放在方法上:
        @RequestParam(required = false, defaultValue = "1") Integer page //放在参数前
  @GetMapping("{id}") //动态参数
        getMapping(@PathVariable Integer id) //接收动态参数
  @PostMapping:
@Autowired : 自动导入Service的bean
三、@Slf4j: log设置
四、集成swagger-ui
五、@ControllerAdvice:拦截异常并统一处理的全局配置,并且应用到所有的@RestMapping中
  注解了@ControlleAdvicer的类可以使用以下三个注解修饰方法:
  1. @ExceptionHandler
  2. @InitBinder
  3. @ModelAttribute
??它的底层实现原理??
--------------------------------
  Spring boot 默认情况下会映射到/error 进行异常处理,通过自定义异常可以处理继承
  以下,编程全局异常处理类
     /**
     * 405相关异常
     *
     * @param rep {@link HttpServletResponse}
     * @param ex  {@link Exception}
     * @return {@link RestResponse}
     */
    @ExceptionHandler({HttpRequestMethodNotSupportedException.class})
    public RestResponse request405(HttpServletResponse rep, Exception ex) {
        rep.setStatus(ErrorCode.METHOD_BOT_ALLOWED.getCode());
        return RestResponse.fail(ErrorCode.METHOD_BOT_ALLOWED.getCode(), ex.getMessage());
    }  

 /**
     * 全局异常返回
     *
     * @param req {@link HttpServletRequest}
     * @param e   {@link HttpServletResponse}
     * @return {@link Exception}
     */
    @ExceptionHandler(value = Exception.class)
    public RestResponse defaultErrorHandler(HttpServletRequest req, HttpServletResponse rep, Exception e) {
        log.error("---DefaultException Handler---Host {}, invokes url {}, ERROR TYPE: {},  ERROR: {}", req.getRemoteHost(), req.getRequestURL(), e.getClass(), e.getMessage());
        e.printStackTrace();
        return RestResponse.fail(e.getMessage());
    }
  /**
    * 应用到所有的@RequestMapping 注解方法,在其执行之前初始化数据绑定器
    **/
    @InitBinder
    public void initBinder(WebDataBinder binder){
        
    }
    
    /**
     * 
     * 把值绑定到Model中,使全局@RequestMapping可以获取到该值
     * 
     * 通过ModelMap获取 或者通过 @ModelAttribute("SS")
     * **/
    @ModelAttribute
    public void addAttribute(Model model){
        model.addAttribute("SS","s");
    }
--------------------------------
集成Swagger:
依赖导入:
       <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId> //包含前端UI依赖js/css资源
            <version>2.8.0</version>
        </dependency>

第一步:编写配置文件
第二部:   在各各Controller添加注解
第三部:  打开浏览器,访问http://localhost:8080/swagger-ui.html
--------------------------------
参考链接:http://www.cnblogs.com/duanxz/p/3748087.html
Service层

注解

@Slf4j
@Service("ServiceName") =>指定这是一个Service
@Primary => @Primary注解的实例优先于其他实例被注入
@Resource =>按照名称被装配
@Autowired => 默认按类型装配
@Qualifier(“DataDao”) =>当一个接口有多个不同实现,使用@Autowired注解会报错
@Transactional(rollbackFor = Throwable.class) =>每个业务方法执行时,都会开启一个事物,按照相同的管理机制,只能应用到public修饰符上
解决注解不回滚问题 :

  1. 检查方法是不是public
  2. 检查异常是不是unchecked
  3. 如果是checked异常也想回滚到话,注解上写明异常即可

@Async :Spring 3.x之后内置,被标注称之为异步方法
同时也加了@Transactional注解将无法产生事务管理的控制,放到异步方法内部






Model层的注解

常用注解:
lombok的用法

@Data:注解在类上,为类提供读写属性,此外还提供equals()和hashCode()方法
@EqualsAndHashCode(callSuper = false)提供equals()和hashCode()方法
@Builder:注解在类上,为类提供一个内部的Builder
https://blog.csdn.net/u013225178/article/details/80721799
https://blog.csdn.net/qq_16605855/article/details/80611037 lombok原理

@Data
public class BaseEntity {

    @Id
    @Column(name = "Id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
}
//@Column 是属性或方法级别的注解,用于指定持久化属性映射到数据库表的列。如果没有指定列注释,则使用其默认值。
//生成对应表信息,列

有关概念:
参考链接: https://www.cnblogs.com/lyjin/p/6389349.html
Object/Relation Mapping

po(Persistent object):po的每个属性基本上对应数据库表里的某个字段

vo(Value object):通常用于业务之间的数据传递,抽象出的业务对象(比如前后端交互数据),可以和表对应,也可以不用,根据业务需要
表现层对象(View object):封装了对应页面显示的数据对象,用一个vo来封装整个页面展示所需要的对象数据

bo:(Business Object):封装业务逻辑的Java对象,通过调用DAO方法,结合po,vo进行操作
一个业务bo,可能包含多个po

dto(Data Transfer Object)数据传输对象: 是一种设计模式之间传输数据的软件应用系统
是一组需要跨进程或网络边界传输的聚合数据的简单容器,序列化传递
只作为数据的存储,没有任何业务行为
dto中定义的实体类,该文件中包含实体类的属性和对应实体类属性的get、set方法
Dto类似信使
当我们在业务逻辑层或者交互层用到一些数据库中部分的字段而不是所以字段,就需要在Dto类里放这些字段,这些字段的意义相当于一些经处理过的数据库字段,实际意义就是方便数据交互,提高效率
比如一个对象1有20个字段,我们只需要10个字段,就不需要把整个po对象传输到客户端,而是用Dto重新封装
dao层会调用dto层

JavaBean:一种可重用组件。
更多的是一种规范,一组包含set和get方法的java对象
满足三个条件:

  1. 类必须是具体和公共的
  2. 具有无参构造器
  3. 提供一致性设计模式的公共方法将内部域暴露成员属性
    ——Session bean:会话构件,短暂的对象
    ——Entity bean:实体构件,持久对象

——MessageDrivenBean:消息构件

Pojo:(Plain Ordinary Java Object)简单java对象,方便程序员使用数据库中的数据表的增删改查,不涉及业务逻辑
一个Pojo持久化就是PO
直接用它传递,传递过程中就是DTO
直接用来对应表示层就是VO

dao层:数据库访问对象(Data Access Object),一般操作单表,它可以把pojo持久化为Po,用Po组装出来Vo,DTO

domain:用来管理javabean实体对象,考虑业务逻辑,过滤、数据处理为调用dao层做好准备,domain对象有时需序列化,因为需要将对象序列化存储到Redis,如果没有实现就会爆出异常

Do (Domain Object)抽象出来的有形或者无形的实体

mybatis

存储数据模型Model,可以使用mapper做映射,集成mybatis
https://blog.csdn.net/tuxedolinux/article/details/80876087 JPA常用注解
https://blog.csdn.net/yswknight/article/details/79257372 JPA注解
XML + 注解

Mybatis

原理
https://blog.csdn.net/u014745069/article/details/80788127
实际上mybatis的所有配置信息以及运行时的配置参数全部都保存在configuration对象中。
将sql语句的所有信息封装成MappedStatement对象,然后存储在configuration对象
解析该sql对应的class,并把该class放到configuration中的mapperRegistry中
https://blog.csdn.net/lchpersonal521/article/details/84451357 较为详细
jdk的动态代理
四大对象: Executor Interceptor..。
核心类:SqlSessionFactory SqlSession Configuration Executor
缓存:一级缓存 二级缓存

  1. 依赖导入 mybatis,mysql Connector
  2. 接口使用@Mapper注解 或者 入口处@使用@MapperScan(“mapper类包对应类路径”)注解
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
//Articles为model类,一个pojo
public interface ArticlesMapper extends MyMapper<Articles>{
}

常用注解:

@Insert
@Select
@Update
@Delete
@Param
@Results
@Result
HandlerInterceptor
//AOP实现拦截器

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}
//底层为servlet


admin监控 actuator升级版,拉取注册中心数据,把自己也注册进去
https://blog.csdn.net/u010562966/article/details/86636469

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容