【SpringBoot】快速入门

关于配置(application.yml/preperties)

常规配置

server:
  port: 9000
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/引用的数据库名
    username: 
    password: 
  servlet:
    multipart:
      max-file-size: 10MB
#      单个文件最大
      max-request-size: 100MB
#      多个文件最大
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    输出日志到控制台
    map-underscore-to-camel-case: true
#    将"_"命名转为驼峰命名

引用配置的参数

在application.yml中

user:
  info:
    password: 100
    name: Tom
    address: beijing
@Data
@Component
@ConfigurationProperties("user.info")
public class UserConfig {
    private String name;
    private String password;
    private String address;
}

发送请求

// json参数
@RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user) {
        System.out.println(user.toString());
        return "ok";
    }

// 实体参数
@RequestMapping("/hello")
    public String simpleParam(String name, Integer age) {
        System.out.println(name + ":" + age);
        return "OK";
    }

// 日期参数
@RequestMapping("/DATA")
    public String data(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
        System.out.println(updateTime);
        return "OK";
    }

// 路径参数
@RequestMapping("/pathParam/{id}/{name}")
    public String pathParam(@PathVariable Integer id, @PathVariable String name) {
        System.out.println(id + " " + name);
        return "ok";
    }

// 数组参数
@RequestMapping("/array")
    public String li(String[] hobby) {
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }

// 集合参数
@RequestMapping("/lists")
    public String lis(@RequestParam List<String> hobby) {
        System.out.println(hobby);
        return "OK";
    }

// 参数的映射 http://localhost:8080/test?name=hohn
@RequestMapping("/test")
    public String tt(@RequestParam(name="name") String username) {
        System.out.println(username);
        return "ok";
    }

//单个文件的上传
    @PostMapping
    public Result upload(String username, Integer age, MultipartFile image) throws Exception {
        log.info("文件上传{}{}{}", username, age, image);
        empService.saveFiles(username,age,image);
        return Result.success();
    }

事务

在类,方法,接口上加

@Transactional

开启事务
在启动类上加

@EnableTransactionManagement //开启注解方式的事务管理

@Transactional(rollbackFor = Exception.class)
出现所有异常都回滚(默认出现RunTimeException才回滚)

事务传播行为
@Transactional(propagation = Propagation.REQUIRED)

属性值含义
REQUIRED[默认值]需要事务,有则加入,无则创建新事务
REQUIRES_NEW需要新事务,无论有无,总是创建新事务
SUPPORTS支持事务,有则加入,无则在无事务状态中运行
NOT_SUPPORTS不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
MANDATORY必须有事务,否则抛异常
NEVER必须没事务,否则抛异常

AOP

类上添加@Aspect

通知类型

  1. @Around:环绕通知,在通知方法的前后都会被执行
  2. @Before:前置通知,此注解标注的通知方法在目标方法前被执行
  3. @After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
  4. @AfterReturning:返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行
  5. @AfterThrowing :异常后通知,此注解标注的通知方法发生异常后执行
    注:
    除Around特殊外其他不用proceedingJoinPoint.proceed();
@Around("execution(* com.test.*(..))")
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        log.info("before");
        Object result = proceedingJoinPoint.proceed();	//原始方法
        log.info("after");
        return result;
    }

通知顺序

默认安装类名字母排序
@Order(int)加在类上控制:数字越小越先执行通知前方法,越后执行通知后方法

切入点表达式

execution

@Pointcut("execution(方位修饰符 返回值 包名.类名.?方法名(方法参数) throws 异常?")
//"?"前的内容可省略
通配符:

*:单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意类型的一个参数,也可以通配包、类、方法名的一部分


..:多个连续的任意符号,可以通配任意层级的包,或任意类型、任意个数的参数

常用
execution(* com.test.service.())
匹配com.test.service下任意返回值,任意一个方法参数的任意方法(不包括子级类)
execution(* com.test.service…(…))
匹配com.test.service下任意返回值,任意方法参数的任意方法(包括子级类)
提高复用:

    @Pointcut("execution(* com.test.service.*(..))")
    public void pt(){}

    //引用
    @Before("pt()")
    public void test(){
        log.info("test");
    }

annotation

创建注解

@Retention(RetentionPolicy.RUNTIME)//运行时开始
@Target(ElementType.METHOD)//在方法上生效
public @interface MyLog {}

在要用的方法上加上@MyLog
引用:

@Before("@annotation(com.test.aop.MyLog)")
public void tt(){}

注解

@Getter
@Setter
@EqualsAndHashCode
@ToString

@Data
//代替以上注解
@NoArgsConstructor
//无参构造器
@AllArgsConstructor
//有参构造器

@Slf4j
//为类添加log,使用方法:log.info(“hello world!”);

bean,自动注入

Bean的声明

注解说明位置
@Bean声明第三方bean声明第三方bean
@Component声明bean的基础注解不属于以下三类用此注解
@Controller(用@RestController返回json并作为响应发送给客户端)@Component的衍生注解标注在控制器上
@Service@Component的衍生注解标注在业务类上
@Repository(用MyBatis框架@Mapper)@Component的衍生注解标注在数据访问类上上
位置:在类的上边

第三方bean的声明

@Configuration
public class CommonConfig {
    @Bean
    public SAXReader saxReader() {
        return new SAXReader();
    }
}

依赖注入

@Autowired
位置:在对象上

@Autowired
private Person person;

当同类型的bean存在多个:
@Primary // 定义优先级
位置:在Bean的声明上

@Autowired+@Qualifier (“bean的名称”)

@Resource(name=“bean的名称”)

项目结构

controller(表示层):主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
命名:xxxController
service(业务层):主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
命名:xxxService(接口)
命名:impl.xxxServicelmpl(实现类)
mapper(持久层):访问数据
pojo(对象类):放如实体对象
命名:xxxMapper(接口)
utils(工具):常用的工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值