SpringBoot基础
一、SpringBoot概述
Springboot主要核心点:
1、敏捷开发(整合框架) ,弊端:封装太死,但是高版本基本没有这
个弊端了。
2、无需tomcat(java应用程序运行的,实际是一个jar包)
内置Tomcat
3、减少xml配置(没有xml),以配置文件.properties文件配置。
4、SpringCloud+SpringBoot微服务。
5、使用注解。
之后互联网项目,就是面向服务架构(SOA)转变成微服务架构。
SpringBoot安全。
二、创建第一个SpringBoot项目
环境:使用的是jdk1.8环境。
SpringBoot版本:1.3.3
1、创建SpringBoot项目
2、pom.xml依赖引入 原理maven有继承依赖功能
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
三、使用SpringBoot写第一个接口(服务)
服务:就是一个Controller 一个接口等。
注解:
@RestController:标识该接口全部返回json格式。
@EnableAutoConfiguration:这个注解告诉SpringBoot根据添加的jar
来自动配置Spring.
@RequestMapping("/index"):配置访问的url
代码:HelloWorldController.java
package com.leeue.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@EnableAutoConfiguration
@RestController
public class HelloWorldController {
@RequestMapping("/index")
public String index() {
return "success";
}
@RequestMapping("/getMap")
public Map<String, Object> getMap(){
HashMap<String, Object> result = new HashMap<String, Object>();
result.put("errorCode", 200);
result.put("errorMsg", "成功....");
return result;
}
public static void main(String[] args) {
SpringApplication.run(HelloWorldController.class, args);
}
}
在使用SpringBoot的时候就是在写Controller层,接口。
四、SpringBoot第二种启动方式
使用扫包的方式:
@ComponentScan("com.leeue.controller")
package app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan("com.leeue.controller")
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
注意:一个项目只能有一个main函数,否则就会报错。打包的时候。
五、SpringBoot访问静态资源
在我们开发web应用的时候,需要大量的使用js\css\图片等静态资源。
默认配置:
SpringBoot 默认提供位置需符合一下跪着:
/static
/public
/resources
/META-INF/resources
将图片放到static目录下面。访问的url是直接访问的。
六、SpringBoot全局捕获异常
什么是全局捕获异常?
答:就是web开发的时候,异常的时候,不能直接返回错误信息。
只要项目有任何异常,都会进行拦截,然后再返回。
@ControllerAdvice:使用这个注解,全局捕获异常
拦截全局异常:使用@ControllerAdvice
ExceptionHandler(RuntimeException.class)
GlobalExceptionHandler.java
package com.leeue.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
*
* @classDesc: 功能描述:(全局捕获异常类)
* @author:<a href="leeue@foxmail.com">李月</a>
* @Version:v1.0
* @createTime:2018年8月21日 上午11:01:37
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String, Object> resultError(){
Map<String, Object> result = new HashMap<String, Object>();
result.put("errorCode", 500);
result.put("errorMsg", "系统错误....");
return result;
}
}
SpringBoot中的全局捕获异常使用的是AOP编程+异常通知来实现的
SpringBoot中如果返回的是json格式的话,使用的@ResponseBody
返回的是页面的话,使用返回类型是String,就不需要加@ResponseBody.
七、Springboot整合页面Freemarker、JSP
spriingBoot官方推荐使用模版引擎。
什么是模版引擎?
答:动态的html实现。
好处:提高搜索引擎的搜索。
整合Freemarker
导入pom.xml文件.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
index.ftl文件
this is my index freemarker
${name}
<#if sex=="1">
男
<#elseif sex=="2">
女
<#else>
其他
</#if>
<#list userList as user>
${user}
</#list>
SpringBoot整合JSP,建项目的时候要建成war类型。
八、springBoot整合JdbcTemplate
配置文件
application.properties
# 整合mysql
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=12345
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
九、SpringBoot整合SpringJpa
springjpa对hibernate进行封装了。
项目整合jdbc框架、jpa、mybatis是不会有冲突的。
实体类:User.java
package com.leeue.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* @classDesc: 功能描述:(User对象)
* @author:<a href="leeue@foxmail.com">李月</a>
* @Version:v1.0
* @createTime:2018年8月21日 下午2:03:12
*/
@Entity(name="users")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
启动类:App.java
package app
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.orm.jpa.EntityScan
import org.springframework.context.annotation.ComponentScan
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
@ComponentScan(basePackages= {"com.leeue.controller","com.leeue.service"}) //扫包
@EnableJpaRepositories("com.leeue.dao") //jpa扫包范围
@EntityScan("com.leeue.entity") //扫包 实体类
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args)
}
}
十、SpringBoot整合mybatis
使用的注解是扫mapper的注解
@MapperScan("com.leeue.mapper")//扫mybaties的mapper
App.java
package app
import org.mybatis.spring.annotation.MapperScan
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.orm.jpa.EntityScan
import org.springframework.context.annotation.ComponentScan
import org.springframework.data.jpa.repository.config.EnableJpaRepositories
@ComponentScan(basePackages= {"com.leeue.controller","com.leeue.service"}) //扫包
@EnableJpaRepositories("com.leeue.dao") //jpa扫包范围
@EntityScan("com.leeue.entity") //扫包 实体类
@MapperScan("com.leeue.mapper")//扫mybaties的mapper
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args)
}
}
UserMapper.java
package com.leeue.mapper
import org.apache.ibatis.annotations.Insert
import org.apache.ibatis.annotations.Param
import org.apache.ibatis.annotations.Select
import com.leeue.entity.User
public interface UserMapper {
@Select("SELECT * FROM USERS WHERE NAME = #{name}")
User findByName(@Param("name") String name)
@Insert("INSERT INTO USERS(NAME, AGE) VALUES(#{name}, #{age})")
int insert(@Param("name") String name, @Param("age") Integer age)
}