springboot 笔记(简单整理)

来源:互联网 发布:算法导论第二版答案 编辑:程序博客网 时间:2024/06/05 20:57

springboot 笔记(简单整理)

1、springboot的配置文件

可以使用 .properties的文件来配置,但是相比于 .yml文件,前者的配置相对繁琐。
.yml文件配置如下(配置数据库)

spring:  profiles:    active: dev     datasource:    password: 11111    username: root    url: jdbc:mysql://127.0.0.1:3306/dbgirl?useUnicode=true&characterEncoding=utf8    driver-class-name: com.mysql.jdbc.Driver  jpa:    hibernate:      ddl-auto: update    show-sql: true

.yml文件中也可以配置对象及其属性,可以用@value来调用,或者新建一个配置类

girl:  cupSize: B  age: 18

配置类GirlProperties,若需要使用其中的属性,在需要调用的地方配置@autowired注解,把该类直接注入就行

@ConfigurationProperties(prefix = "girl")@Componentpublic class GirlProperties {    private String cupSize;    private Integer age;    public String getCupSize() {        return cupSize;    }    public void setCupSize(String cupSize) {        this.cupSize = cupSize;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }}

2、数据库的操作

由于数据库的配置中我们使用的是hibernate的配置,因此我们无需自己写sql语句,直接新建一个接口继承JpaRepository接口。JpaRepository接口的泛型中前者是实体类名,后者是主键的类型。用此接口可以调用各种增删改查的方法,但仅限于单表。

public interface GirlRepository extends JpaRepository<Girl,Integer> {}

调用代码如下(以查询所有的数据为例)

public class GirlController {    @Resource    private GirlRepository girlRepository;    @Resource    private GirlService girlService;    @GetMapping(value = "/girls")    public List<Girl> getGirls() {        return girlRepository.findAll();    }}

3、事务管理

springboot的事务采用注解的方式,注解为 @Transactional,在需要用到事务的方法上直接添加注解就行。

4、表单验证

springboot的表单验证功能由注解@Valid 实现。
如需要实现18岁以下的女孩无法添加进数据库的功能,代码实现如下:
a、在实体类年龄的属性前做一个最小值限定@Min(value = 18,message = “未成年少女禁止入内”)。

@Entitypublic class Girl {    @Id    @GeneratedValue    private Integer id;    private String cupSize;    @Min(value = 18,message = "未成年少女禁止入内")    private Integer age;   .........}

b、在controller层接收参数时进行验证

@PostMapping(value = "/add")public Girl addGirl(@Valid Girl girl, BindingResult bindingResult) {    if (bindingResult.hasFieldErrors()) {System.out.println(bindingResult.getFieldError().getDefaultMessage());        return null;    }    girlRepository.save(girl);    return girl;}

5、AOP处理请求

创建切面,注解@Aspect,同时要创建切点 @Pointcut,对于在该切点之前还是之后执行,由通知的注解决定(@Before,@After…)

@Aspect@Componentpublic class HttpAspect {    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);    @Pointcut("execution(public * net.bruce.demo.controller.GirlController.*(..))")    public void log() {        System.out.println(11111);    }    @Before("log()")    public void test1(JoinPoint joinPoint) {        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();        HttpServletRequest request = requestAttributes.getRequest();        //url        logger.info("url={}", request.getRequestURL());        //method        logger.info("method={}", request.getMethod());        //ip        logger.info("ip={}", request.getRemoteAddr());        //param        logger.info("param={}", joinPoint.getArgs());        //类方法        logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());    }    @After("log()")    public void test2() {        logger.info("33333");    }    @AfterReturning(pointcut = "log()",returning = "object")    public void test3(Object object){        logger.info("response={}",object);    }}

5、统一异常处理

a、一般自定义一个异常

public class GirlException extends RuntimeException{    private Integer code;    public GirlException(ResultEnums resultEnums) {        super(resultEnums.getMsg());        this.code = resultEnums.getCode();    }    public Integer getCode() {        return code;    }    public void setCode(Integer code) {        this.code = code;    }}

b、定义一个异常处理器,可处理特定异常,也可以处理全局的其他异常

“`
@ControllerAdvice
public class Handle {

@ExceptionHandler(value = Exception.class)@ResponseBodypublic Result handle(Exception e){    if (e instanceof GirlException){        GirlException girlException= (GirlException) e;        return ResultUtil.error(girlException.getCode(),girlException.getMessage());    }else {        return ResultUtil.error(ResultEnums.UNKNOWN_ERROR.getCode(), ResultEnums.UNKNOWN_ERROR.getMsg());    }}

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 古话说小孩牙齿掉了怎么办 宝宝三岁胆子小怎么办 小宝宝就是不愿意学说话怎么办 2岁宝宝体重偏重怎么办 三岁宝宝体重偏重怎么办 3岁宝宝说话晚怎么办 孩子吃饭总说话吃饭慢怎么办 我的孩子不聪明怎么办 小孩个子长不高怎么办 晚修自己老喜欢讲话怎么办 宝2岁宝脾气大怎么办 宝宝比同龄孩子发育晚怎么办 早教机构业绩不好怎么办 孩子上早教课哭怎么办 两岁宝宝哭闹不止怎么办 7个月宝宝怕生疏怎么办 5个月宝宝怕洗澡怎么办 4个月宝宝认人怎么办 2岁宝宝语言迟缓怎么办 宝宝老是哭闹不睡觉怎么办 7岁儿童说话晚怎么办 一岁多的婴儿说话晚该怎么办 宝宝甲低300多怎么办 两岁半宝宝还不怎么会讲话怎么办 宝宝两岁半了还不讲话怎么办 两岁宝宝怕生人怎么办 四岁宝宝不说话怎么办 1岁宝宝牙齿黄斑怎么办 儿子俩周半了就是不说话怎么办 两岁宝宝牙齿上有黑渍怎么办 两岁宝宝牙齿发黑怎么办 求帮助宝宝刷牙不会漱口怎么办 牙膏不小心吞了怎么办 宝宝误吃了牙膏怎么办 宝宝吃了30g牙膏怎么办 孩子把牙膏吞了怎么办 二岁宝宝有蛀牙怎么办 3岁宝宝有蛀牙了怎么办 三岁宝宝夜惊怎么办 小班孩子跳舞不好好跳怎么办 15个月宝宝拉稀怎么办