版权声明:本文为博主原创文章,未经博主允许不得转载。如需要授权请联系[email protected] https://blog.csdn.net/leeue/article/details/81902324
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有继承依赖功能
<!--1.引入springBoot父类依赖,只要引入这个就会把常用的包都引入进来了 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<!--2.引入 springboot-web组件 因为springBoot默认是一个SpringMVC所以只有引入这个就默认把
springMVC等依赖都引入进来了。不用写版本,springboot解决了jar包的冲突了。
-->
<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) {
//主函数,运行springboot项目 一个springboot项目主入口
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="[email protected]">李月</a>
* @Version:v1.0
* @createTime:2018年8月21日 上午11:01:37
*/
//全局捕获异常类要加这个注解。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)// 拦截这样的异常
@ResponseBody //以json格式返回
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文件.
<!-- 引入freeMarker的依赖包. -->
<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="[email protected]">李月</a>
* @Version:v1.0
* @createTime:2018年8月21日 下午2:03:12
*/
@Entity(name="users") //引用javax里面的 容易错
public class User {
@Id//引用javax里面的 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);
}