SpringBoot学习

SpringBoot

2020年4月30日

17:06

目录

SpringBoot简介:

SpringBoot优点:

SpringBoot和SpringMVC的关系:

SpringBoot和SpringCloud的关系:

快速入门

编写第一个SpringBoot应用程序

Web静态资源访问

渲染Web页面

整合MyBatis

整合JDBCTemplate

整合事务管理

整合日志管理

其他内容


SpringBoot简介:

  • 是一个快速开发的框架,能够快速整合第三方框架,全部采用注解形式,简化开发,内置web容器,SpringBoot的Web组件默认集成SpringMVC

SpringBoot优点:

  • 快速入门,快速开发,
  • 没有冗余代码生成,没有XML配置的要求,全部采用注解形式
  • 开箱即食,提供各种默认配置简化项目配置
  • 内置Web服务器,如:tomcat

SpringBoot和SpringMVC的关系:

  • SpringBoot的Web组件集成了SpringMVC框架

SpringBoot和SpringCloud的关系:

  • SpringCloud是一套完整的微服务框架,SpringCloud依赖于SpringBoot

快速入门

  • 第一步导入jar包
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  • spring-boot-start-parent依赖管理,再声明其他SpringBootjar包就不用version了
  • spring-boot-starter-web:SpringWeb的核心组件

编写第一个SpringBoot应用程序

  • 第一种启动方式:
@RestController
@EnableAutoConfiguration
public class HelloController {
    @RequestMapping("/hello")
    public String index() {
       return "Hello World";
    }
}   

public static void main(String[] args) {
    SpringApplication.run(HelloController.class, args);
}
  • @RestController相当于@Controller注解+@ResponseBody注解,表示所有的方法返回JSON格式
  • @EnableAutoConfigurationSpringBoot根据你所声明的依赖,对Spring框架进行自动装配
  • SpringApplication.run表示启动程序的入口,启动程序
  • 第二种启动方式:
@ComponentScan(basePackages = "com.wb.controller")
@EnableAutoConfiguration
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
  • @ComponentScan(basePackages = "com.wb.controller")扫包
  • 第三种启动方式:
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
  • @SpringBootApplication:被@EnableAutoConfiguration+@ComponentScan+@Configuration注解修饰,相当于这三个注解的作用
  • 扫包范围:加上@SpringBootApplication注解的类,当前包下和子包下

Web静态资源访问

  • 我们开发Web应用时,需要引用大量的JSP,CSS,图片等静态资源
  • SpringBoot默认提供静态资源目录需至于classpath下目录名须符合/static、/public、/resources、/META-INF/resources
  • 举例:在src/main/resources目录下新建static,放置一个图片
    • 启动程序后直接访问:http://localhost:8080/ab.jpg。如能显示图片,配置成功。

渲染Web页面

  • 在之前的例子中,我们都是使用@RestController注解来处理请求,返回的内容为JSON对象,如果我们要渲染HTML页面的时候该如何实现?
  • 模板引擎
    • SpringBoot提供了多种模板引擎默认配置支持:
    • 1、Thymeleaf  2、FreeMarker  3、Velocity  4、Groovy 等
    • SpringBoot建议使用以上模板,避免使用JSP,会无法实现SpringBoot的多种特性
    • 默认模板配置路径:src/main/resources/templates
  • 使用FreeMarker模板引擎渲染web视图
    • 引入jar包
<!--SpringBoot整合FreeMarker-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  • 在src/main/resources/templates文件夹下新建index.ftl文件

编写代码

@RequestMapping("/index")
public String index(Map<String, Object> map) {
    map.put("name","张三");
    return "index";
}

启动项目:http://localhost:8080/index

  • FreeMarker配置

新建application.properties文件

spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved

整合MyBatis

  • 引入jar包
<!--SpringBoot整合mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

<!--mySql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>
  • 在application.properties中添加
###数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/test?useSSL=FALSE&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=ba*123456
  • Mapper代码
public interface UserMapper {
    @Insert("INSERT INTO USERS(NAME, AGE) VALUES(#{name}, #{age})")
    int insert(@Param("name") String name, @Param("age") Integer age);
}

//启动方式,注意扫包@MapperScan(basePackages = "com.wb.mapper")
@MapperScan(basePackages = "com.wb.mapper")
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

整合JDBCTemplate

  • 导入jar包
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  • 配置和上面相同
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public void createUser(String name, Integer age) {
        jdbcTemplate.update("insert into user values(null,?,?);", name, age);
    }
}

整合事务管理

  • SpringBoot默认集成事务只需要在方法上加上@Transactional注解即可

整合日志管理

  • 导入jar包和log4j.properties文件
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
    <version>1.3.8.RELEASE</version>
</dependency>
  • 使用AOP同一管理Web请求日志
@Aspect
@Component
public class WebLogAspect { 
    private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);

    @Pointcut("execution(public * com.wb.controller.*.*(..))")
    public void webLog() {
    }

    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes)                        
                                             RequestContextHolder.getRequestAttributes();

        HttpServletRequest request = attributes.getRequest();
        // 记录下请求信息
        logger.info("URL : " + request.getRequestURL().toString());
        logger.info("HTTP_METHOD : " + request.getMethod());
        logger.info("IP : " + request.getRemoteAddr());
        Enumeration<String> enu = request.getParameterNames();
        while (enu.hasMoreElements()) {
            String name = (String) enu.nextElement();
            logger.info("name:{},value:{}", name, request.getParameter(name));
        }
    }

    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
        // 处理完请求,返回内容
        logger.info("RESPONSE : " + ret);
    }

}

其他内容

  • 使用@Async实现异步调用
    • 启动项加上@EnableAsync,需要执行的异步方法加上@Async,底层使用多线程技术
  • 自定义参数

@Value("${name}")

private String name;

  • 使用@Value注解

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值