前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 知识点速记

Spring Boot 知识点速记

作者头像
linxinzhe
发布2018-04-10 15:15:09
1.3K0
发布2018-04-10 15:15:09
举报
文章被收录于专栏:林欣哲

本文是学习2小时学会Spring Boot和Spring Boot进阶之Web进阶的SpringBoot常用知识点速记。

SpringBoot前置知识:

项目属性配置

配置项

resources/application.yml

代码语言:javascript
复制
girl:
  cupSize: B
  age: 18

自动注入类中

代码语言:javascript
复制
@Component
@ConfigurationProperties(prefix = "girl")
public 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;
    }
}

也可用 @Value("${content}")

不同环境启动

resources/application.yml

代码语言:javascript
复制
spring:
  profiles:
    active: dev

则启动按 application-dev.yml配置启动, active:prob则按 application-prob.yml启动

Controller的使用

  • @Controller 要配合模版templates使用,不过现在前后端分离,后台都是Rest接口返回JSON数据了。
  • @RestController:等于@Controler + @ResponseBody
  • @RequestMapping
    • @PathVariable("id")
    • @RequestParam("id")

数据库

配置JPA,application.yml

代码语言:javascript
复制
spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: create #每次运行应用重新创建表
      #ddl-auto: update 有必要才更新
    show-sql: true

创建DAO

代码语言:javascript
复制
public interface GirlRepository extends JpaRepository<Girl,Integer> {
    public List<Girl> findByAge(Integer age);
}

使用DAO

代码语言:javascript
复制
@Autowired
    private GirlRepository girlRepository;

    @GetMapping(value = "/girls")
    public List<Girl> girlList() {
        return girlRepository.findAll();
    }

    @PostMapping(value = "/girls")
    public Girl girlAdd(@RequestParam("cupSize") String cupSize,
                        @RequestParam("age") Integer age) {
        Girl girl = new Girl();
        girl.setCupSize(cupSize);
        girl.setAge(age);

        return girlRepository.save(girl);
    }

    @GetMapping(value = "/girls/{id}")
    public Girl girlFindOne(@PathVariable("id") Integer id) {
        return girlRepository.findOne(id);
    }

    @PutMapping(value = "/girls/{id}")
    public Girl girlUpdate(@PathVariable("id") Integer id,
                           @RequestParam("cupSize") String cupSize,
                           @RequestParam("age") Integer age) {
        Girl girl=new Girl();
        girl.setId(id);
        girl.setCupSize(cupSize);
        girl.setAge(age);
        return girlRepository.save(girl);
    }//这里注意PUT的请求参数用x-www-form-urlencoded

    @DeleteMapping(value = "/girls/{id}")
    public String girlDelete(@PathVariable("id") Integer id) {
        girlRepository.delete(id);
        return "Success!";
    }

    @GetMapping(value = "/girls/age")
    public List<Girl> girlListByAge(@PathVariable("age") Integer age){
        return girlRepository.findByAge(age);
    }

事务管理

加一个注解@Transactional

Web进阶

表单验证

现在 @Entiry里的成员变量增加 @Min(value=18,message="未成年禁止入内"),然后在Post请求里, @ValidGirl,BindingResultbindingResult

AOP

切的示例

代码语言:javascript
复制
@Aspect
@Component
public class HttpAspect {

    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class.getName());

    //切的点
    @Pointcut("execution(public * top.linxz.java.controller.GirlController.*(..))")
    public void log() {
    }

    @Before("log()")
    public void doBefore(JoinPoint joinPoint) {
        //url
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        logger.info("url={}", request.getRequestURL());

        //method
        logger.info("method={}", request.getMethod());

        //ip
        logger.info("ip={}", request.getRemoteAddr());

        //类方法
        logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        //参数
        logger.info("args={}", joinPoint.getArgs());
    }

    @After("log()")
    public void doAfter() {
        logger.info("22222222222");
    }

    @AfterReturning(returning = "object", pointcut = "log()")
    public void doAfterReturning(Object object) {
        logger.info("response{}", object);
    }
}

异常

统一处理异常
代码语言:javascript
复制
@ControllerAdvice
public class ExceptionHandle {

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    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, "未知错误");
        }
    }

}
自定义异常

记得Spring里要继承RuntimeException,可以事务回滚。而Exception不会。

代码语言:javascript
复制
public class GirlException extends RuntimeException {
    private Integer code;

    public GirlException(Integer code, String msg) {
        super(msg);
        this.code = code;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}

测试

单元测试

普通单元测试

代码语言:javascript
复制
@RunWith(SpringRunner.class)
@SpringBootTest
public class GirlServiceTest {
    @Autowired
    private GirlService girlService;

    @Test
    public void findOneTest() {
        Girl girl = girlService.findOne(1);
        Assert.assertEquals(new Integer(12), girl.getAge());
    }
}

Mockc测试HTTP

代码语言:javascript
复制
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class GirlControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void girlList() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/girls"))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }
}

代码仓库: https://github.com/linxinzhe/java-springboot-girl

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 林欣哲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目属性配置
    • 配置项
      • 不同环境启动
      • Controller的使用
      • 数据库
        • 事务管理
        • Web进阶
          • 表单验证
            • AOP
              • 异常
                • 统一处理异常
                • 自定义异常
              • 测试
                • 单元测试
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档