SpringBoot学习笔记0.1

SpringBoot学习笔记

Spring Boot简介

一. SpringBoot对比

Spring 框架

Spring框架最核心的特性就是依赖注入DI(Dependency Injecttion)和控制反转IOC(Inversion Of Control)。如果你能够合理的使用DI和IOC,可以开发出松耦合、扩展性好的的应用程序。

Spring MVC

Spring MVC提供了一种友好的方式来开发Web应用程序。 通过使用诸如Dispatcher Servlet,ModelAndView和View Resolver,可以轻松开发Web应用程序。

Spring Boot

Spring 和 Spring MVC最大的弊病在于存在大量的配置,并且这些配置在不同的项目中具有很高的相似性。从而导致重复配置,繁琐而且杂乱!

Spring Boot期望通过结合自动配置starters来解决了这个问题,使Spring和SpringMVC用起来更加简便。 另外,Spring Boot还提供了一些功能,可以更快地构建可用于生产环境的应用程序。

二. Spring Boot优点

  • 使配置变简单
  • 使监控变简单
  • 使部署变简单
  • 使开发变简单

三. Spring Boot比较SpringMVC

  • 敏捷开发(整合框架)
  • 内置Tomcat,java应用程序运行
  • 减少xml配置,配置文件properties

四. Spring Boot主要特性

  • 遵循“约定优于配置”的原则,简化配置
  • 可以完全脱离XML配置文件,采用注解配置和java Config
  • 内嵌Servlet容器,应用可用jar包执行:java -jar
  • 快速完成项目搭建、整合第三方类库,方便易用
  • 提供了starter POM, 能够非常方便的进行包管理, 简化包管理配置
  • 与Spring cloud天然集成,spring boot是目前java体系内实现微服务最佳方案

五. Spring Boot Starter

Spring Boot Starter是一组被依赖第三方类库的集合

如果你要开发一个web应用程序,就通过包管理工具(如maven)引入spring-boot-starter-web就可以了,而不用分别引入许多依赖类库,spring-boot-starter-web一次性帮你引入这些常用类库。

1). spring-boot-starter-parent

所有的Spring Boot项目默认使用spring-boot-starter-parent作为应用程序的父项目。

  <!-- 设置springboot的parent -->
  <parent>
  	<groupId>org.springframework.boot</groupId>
  	<artifactId>spring-boot-starter-parent</artifactId>
  	<version>1.5.6.RELEASE</version>
  </parent>

继承父项目的好处: 统一java版本配置和其他的一些依赖类库的版本。父项目替你管理版本,是经过兼容性测试的。比自己随便引入一个版本兼容性更好。

二.SpringBoot安装

此处使用IDEA快速搭建SpringBoot应用,首先用SpringBoot搭建WEB工程:

image

然后点击Next,如果出现下图,是网络连接问题,可以考虑FQ。

img

成功连接后,如下图

image

然后点击Next生成项目,首次生成可能有点慢,下次创建的时候就会快很多,生成后的目录结构如下:

image

三.运行SpringBoot项目

然后更改下这个启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class SpringbootApplication {
    //运行方法
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

    @RequestMapping(value = "/",produces = "text/plain;charset=UTF-8")
    String index(){

        return "Hello Spring Boot!";

    }
}

然后点击右上角运行

image

运行成功后,在浏览器输入 http://localhost:8080/

1580895826821

也可以创建一个类

img

package com.example.hellow;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

@Controller
public class index {
    @RequestMapping(value = "/index")
    @ResponseBody
    public Map<String,Object> index(){
        Map<String,Object> map = new HashMap<>();

        map.put("貂蝉",new String[]{"法师","刺客"});
        map.put("韩信",new String[]{"战士","刺客"});
        map.put("刘邦",new String[]{"法师","坦克"});
        return map;
    }
}

然后修改下运行方法

package com.example.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication

//查找创建的包
@ComponentScan(basePackages = "com.example.hellow")
@RestController
public class SpringbootApplication {
    //运行方法
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

    @RequestMapping(value = "/",produces = "text/plain;charset=UTF-8")
    String index(){

        return "Hello Spring Boot!";

    }
}

运行如下img

四. 搭建SSM

在上一步的基础上我们需要添加些相关的配置来搭建SSM,如下为结构图:

image

UserController:

@RestController
/**自动返回的是json格式数据***/
public class UserController {
    
    @Autowired
    private UserService userService;

    @RequestMapping("list")
    public List<User> list(){
         //只对紧邻的下一条select语句进行分页查询,对之后的select不起作用
        List<User> list = userService.findAllUser();
        return list;
    }
}

User:

public class User implements Serializable{
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Integer id; 
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    
    
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
    

}

UserMapper:

@Mapper
public interface UserMapper {
    
    public List<User> findAll();

}

UserService:

public interface UserService {
    
    /**
     * 根据接口查询所用的用户
     */
    public List<User> findAllUser();
}

UserServiceImpl:

@Service
public class UserServiceImpl implements UserService {
        @Resource
    private UserMapper userMapper;
        public List<User> findAllUser() {
        List<User> list = userMapper.findAll();
        return list;
    }

}

UserMapper.XML:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.demo.mapper.UserMapper">
    <select id="findAll" resultType="com.demo.bean.User">
        select * from user
    </select>
</mapper>

SqlMapperConfig:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 对在此配置文件下的所有cache进行全局性开/关设置 true|false true -->
        <setting name="cacheEnabled" value="true" />
        <!-- 全局性设置懒加载。如果设为‘关',则所有相关联的都会被初始化加载。 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 当设置为‘开’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 -->
        <setting name="aggressiveLazyLoading" value="true" />
        <!-- 允许和不允许单条语句返回多个数据集(取决于驱动需求) -->
        <setting name="multipleResultSetsEnabled" value="true" />
        <!-- 使用列标签代替列名称。不用的驱动器有不同的作法。 -->
        <setting name="localCacheScope" value="STATEMENT" />
        <!-- 允许JDBC生成主键。需要驱动器支持.如果设为了true,这个设置将强制使用被生成的主键, 有一些驱动器不兼容不过仍然可以执行。 -->
        <setting name="useGeneratedKeys" value="true" />
        <!-- 指定MyBatis是否并且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,NONE没有嵌套的结果。 FULL将自动映射所有复杂的结果。 -->
        <setting name="autoMappingBehavior" value="PARTIAL" />
        <!-- 配置和设定执行器,SIMPLE执行器执行其它语句。REUSE执行器可能重复使用preparedstatements语句,BATCH执行器可以重复执行语句和批量更新。 -->
        <setting name="defaultExecutorType" value="SIMPLE" />
        <!-- 设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时. 正整数 -->
        <setting name="defaultStatementTimeout" value="5000" />
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

</configuration>

application.properties:

#server.port=80

logging.level.org.springframework=DEBUG
#springboot   mybatis
#jiazai mybatis peizhiwenjian
mybatis.mapper-locations = classpath:mapper/*Mapper.xml
mybatis.config-location = classpath:mybatis/sqlMapConfig.xml
#mybatis.type-aliases-package = com.demo.bean

#shujuyuan
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root

Pom.XML:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>springbootdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springbootdemo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!--mybatis与mysql-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--druid依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.25</version>
        </dependency>
        <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>


        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--jasypt加解密-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>1.14</version>
        </dependency>

        <!--zipkin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin</artifactId>
        </dependency>


        <!--eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

项目运行后访问http://localhost:8080/list,可以见到如下结果(这里省略sql表的设计,可以自己根据实体类来建表)
image.png

posted @ 2020-06-01 15:26  随风漂泊的蒲公英  阅读(183)  评论(1编辑  收藏  举报