SpringBoot基础知识入门总结(持续更新中......)

SpringBoot基础知识总结

一、Spring Boot框架核心配置文件——application.properties

  application.properties可用于设置内嵌tomcat端口、设置上下文根(访问路径)、自定义参数、配置数据库连接信息、声明mapper文件路径等。

# 一、用于设置内嵌tomcat端口
server.port=8081

# 二、用于设置上下文根(访问路径)
server.servlet.context-path=/springboot

# 三、自定义参数
name=lisi

school.name=zzuli
school.website=www.zzuli.edu.cn

student.name=zhangsan
student.age=20

# 四、配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user_test
spring.datasource.name=root
spring.datasource.password=123456

# 五、声明mapper文件路径(mapper文件与接口分开时)
mybatis.mapper-locations=classpath:mapper/*.xml

二、yml与yaml文件

  yml与yaml文件,其功能与.properties文件功能相同,但是书写格式有所相同。

  当.properties文件与.yml或.yaml文件同时出现时,Spring Boot会以.properties文件的优先级最高进行引用。

# 设置tomcat端口及上下文根路径
server:
  port: 8081
  servlet:
    context-path: /yml

# 四、配置数据库连接信息
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhsot:3306/user_test
    name: root
    password: 123456

# 五、声明mapper文件路径(mapper文件与接口分开时)
mybatis:
  mapper-locations: classpath:mapper/*.xml

三、自定义配置映射

  在application.properties文件中声明的参数,对于单个参数来说可以通过@Value注解的方式赋给指定变量,对于包含前缀的参数而言,需要使用Java对象,通过@Autowired注解进行变量的赋值。

package cn.krain.springboot.web;

import cn.krain.springboot.config.School;
import cn.krain.springboot.config.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class IndexController {

    @Value("${name}")
    private String name;
    
    @Autowired
    private School school;

    @Autowired
    private Student student;

    @RequestMapping("/say")
    @ResponseBody
    public String say(){
        return "school.name="+school.getName()+"  school.website="+school.getWebsite()+"-----student.name="+student.getName()+"  student.age="+student.getAge();
    }

}

四、多环境下核心配置文件application.properties的使用

  在企业进行项目开发时,在开发阶段、测试阶段、正式发布阶段都会有对应的.properties文件,每个阶段的核心配置文件需要有严格的命名规则:application-dev.properties、application-test.properties、application-product.properties;然后在主配置文件中指定即可。

# 等号后面的值为application-后的字符串product/dev/test;使用测试版时如下:
spring.profiles.active=test

五、Spring Boot集成JSP

  1. 在pom文件中引入JSP依赖:
<!--引入Springboot内嵌tomcat对jsp的解析依赖-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
  1. 在main目录下创建webapp文件夹,并在Project Structure下指定该文件夹为web资源目录。

在这里插入图片描述
3. 点击OK,当webapp出现如下图标即成功。
在这里插入图片描述
4. 在application.properties文件中声明视图解析器

spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

六、Spring Boot集成Mybatis(Mybatis逆向工程)

  1. pom文件中加入mysql和mybatis-springboot依赖。
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>
  1. 配置反向工程配置文件GeneratorMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>

    <!-- 指定连接数据库的 JDBC 驱动包所在位置,指定到你本机的完整路径 -->
    <classPathEntry location="D:\Program Files (x86)\maven_work\maven_repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar"/>

    <!-- 配置 table 表信息内容体,targetRuntime 指定采用 MyBatis3 的版本 -->
    <context id="tables" targetRuntime="MyBatis3">

        <!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 配置数据库连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/user_test"
                        userId="root" password="123456"></jdbcConnection>

        <!-- 生成 model 类,targetPackage 指定 model 类的包名,需要修改为自己的包目录, targetProject 指定 生成的 model 放在 eclipse 的哪个工程下面-->
        <javaModelGenerator targetPackage="cn.krain.springboot.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="false"/>
        </javaModelGenerator>

        <!-- 生成 MyBatis 的 Mapper.xml 文件,targetPackage 指定 mapper.xml 文件的 包名,需要修改为自己的包目录, targetProject 指定生成的 mapper.xml 放在 eclipse 的哪个工程下面 -->
        <sqlMapGenerator targetPackage="cn.krain.springboot.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 生成 MyBatis 的 Mapper 接口类文件,targetPackage 指定 Mapper 接口类的包 名,需要修改为自己的包目录, targetProject 指定生成的 Mapper 接口放在 eclipse 的哪个工程下面 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cn.krain.springboot.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 数据库表名及对应的 Java 模型类名 -->
        <table tableName="t_student" domainObjectName="Student"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"/>
    </context>

</generatorConfiguration>
  1. 在application.properties中配置数据库连接信息
#配置数据库连接信息
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user_test
spring.datasource.name=root
spring.datasource.password=123456
  1. 在pom文件中加入Mybatis逆向工程插件
<build>
    <!--指定编译时包含.xml文件-->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>

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

        <!--Mybatis逆向工程-->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.6</version>
            <configuration>
                <!--配置文件的位置-->
                <configurationFile>GeneratorMapper.xml</configurationFile>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
        </plugin>
    </plugins>
</build>
  1. 如果mapper文件位于resources目录下时,需要在application.properties文件下加入路径
#声明mapper文件路径
mybatis.mapper-locations=classpath:mapper/*.xml

七、注解式事务

  在springboot中,无需使用xml文件进行事务的配置,直接的指定方法上方加入@Transactional注解即可。

@Transactional		//事务注解
@Override
public int editStudentById(Student student) {

    int i = studentMapper.updateByPrimaryKeySelective(student);

    return i;
}

八、SpringBoot下SpringMVC的相关注解

  • Controller

  • RestController

  • RequestMapping

  • GetMapping

  • PostMapping

  • DeleteMapping

  • PutMapping

  • 各自用法如下:

package cn.krain.springboot.web;

import cn.krain.springboot.model.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

//@Controller
@RestController         //相当于:控制层类上加@Controller + 方法上加@ResponseBody
                        //意味着当前控制层类中所有方法返还的都是json对象
public class StudentController {

    @RequestMapping(value = "/student")
    //@ResponseBody
    public Object getStudent(){
        Student student = new Student();
        student.setId(1001);
        student.setName("zhangsan");
        student.setAge(20);
        return student;
    }

    //该方法支持post和get请求方式
    @RequestMapping(value = "/studentDetail", method = {RequestMethod.GET,RequestMethod.POST})
    public Object getStudentDetail(){
        Student student = new Student();
        student.setId(1002);
        student.setName("lisi");
        student.setAge(26);
        return student;
    }

    //@RequestMapping(value = "/queryStudent", method = RequestMethod.GET)
    @GetMapping(value = "queryStudent")     //该注解功能相当于上一行代码,如果请求方式不对会报405错误
    //该注解在查询数据的时候使用 ——> 查询
    public Object queryStudent(){
        return "查询成功";
    }

    //@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
    @PostMapping(value = "addStudent")     //该注解功能相当于上一行代码,如果请求方式不对会报405错误
    //该注解在新增数据的时候使用 ——> 新增
    public Object addStudent(){
        return "添加成功";
    }

    //@RequestMapping(value = "/delStudent", method = RequestMethod.DELETE)
    @DeleteMapping(value = "delStudent")     //该注解功能相当于上一行代码,如果请求方式不对会报405错误
    //该注解在删除数据的时候使用 ——> 删除
    public Object delStudent(){
        return "删除成功";
    }

    //@RequestMapping(value = "/updateStudent", method = RequestMethod.PUT)
    @PutMapping(value = "updateStudent")     //该注解功能相当于上一行代码,如果请求方式不对会报405错误
    //该注解在更新数据的时候使用 ——> 更新
    public Object updateStudent(){
        return "更新成功";
    }
}

九、SpringBoot下实现Restful

  1. restful

  REST(英文:Representational State Transfer,简称 REST)

  一种互联网软件架构设计的风格,但它并不是标准,它只是提出了一组客户端和服务器交互时的架构理念和设计原则,基于这种理念和原则设计的接口可以更简洁,更有层次,REST这个词,是 Roy Thomas Fielding 在他 2000 年的博士论文中提出的。

  任何的技术都可以实现这种理念,如果一个架构符合 REST 原则,就称它为 RESTFul 架构。

  比如我们要访问一个 http 接口:http://localhost:8080/boot/order?id=1021&status=1

  采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1

  1. 代码实现

  在student1与student2两个方法中,都是从请求路径中获取id与name两个参数,但请求路不同。

package cn.krian.springboot.web;

import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;

@RestController
public class Controller {

    @RequestMapping(value = "/student/detail")
    public Object student1(Integer id, String name){
        Map<Object, Object> map = new HashMap<>();
        map.put("title","student");
        map.put("id",id);
        map.put("name",name);
        return map;
    }

    @RequestMapping(value = "/student/detail/{id}/{name}")
    public Object student2(@PathVariable("id") Integer id,
                           @PathVariable("name") String name){
        HashMap<Object, Object> map = new HashMap<>();
        map.put("title","student1");
        map.put("id",id);
        map.put("name",name);
        return map;
    }
}
  1. 解决路径冲入问题

  使用restful时,如果有某两个请求的参数个数相同,就会导致请求路径相同,此时需要加以区分。

  • 方法一:

  比如下面两个请求,虽然参数不同,但是个数相同,如果都将参数放到最后面,SpringMVC会无法区分,可通过调换参数位置加以区分。

@RequestMapping(value = "/student/detail/{id}/{name}")
public Object student1(@PathVariable("id") Integer id,
                       @PathVariable("name") String name){
    HashMap<Object, Object> map = new HashMap<>();
    map.put("title","student1");
    map.put("id",id);
    map.put("name",name);
    return map;
}

//@RequestMapping(value = "/student/detail/{id}/{state}")
@RequestMapping(value = "/student/{id}/detail/{state}")
public Object student2(@PathVariable("id") Integer id,
                       @PathVariable("state") String state){
    HashMap<Object, Object> map = new HashMap<>();
    map.put("title","student2");
    map.put("id",id);
    map.put("state",state);
    return map;
}
  • 方法二:

  通过restful与增删改查注解相结合,来解决路径冲突的问题,如下代码所示。

@GetMapping(value = "/student/detail/{id}/{age}")
public Object student3(@PathVariable("id") Integer id,
                       @PathVariable("age") String age){
    HashMap<Object, Object> map = new HashMap<>();
    map.put("title","student3");
    map.put("id",id);
    map.put("age",age);
    return map;
}

@DeleteMapping(value = "/student/detail/{id}/{status}")
public Object student4(@PathVariable("id") Integer id,
                       @PathVariable("status") String status){
    HashMap<Object, Object> map = new HashMap<>();
    map.put("title","student4");
    map.put("id",id);
    map.put("status",status);
    return map;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

krain.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值