Java架构学习(二十七)SpringBoot概述&创建SpringBoot项目&写第一个接口&SpringBoot启动方式(两种)&访问静态资源&全局捕获异常&整合页面&整合JPA&Mybaties

版权声明:本文为博主原创文章,未经博主允许不得转载。如需要授权请联系[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);

}

猜你喜欢

转载自blog.csdn.net/leeue/article/details/81902324