IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 动力节点springboot笔记 -> 正文阅读

[Java知识库]动力节点springboot笔记

1、入门

1.1、springboot的特性

  • 能够快速创建基于spring的应用程序
  • 能够直接使用java main方法启动内嵌的tomcat服务器运行springboot程序,不需要部署war包文件
  • 提供约定的starter POM来简化Maven配置,让Maven的配置变的简单
  • 自动化配置,根据项目的Maven依赖配置,springboot自动配置Spring,Spring mvc等
  • 提供了程序的健康检查等功能
  • 基本可以完全不使用XML配置文件,采用注解配置

1.2、springboot四大核心

  • 自动配置
  • 起步依赖
  • Actuator
  • 命令行界面

2.集成springmvc

创建好springboot项目就代表了已经创建好了springmvc项目,因为springboot框架已经帮助我们自动配置了springmvc,之后按照springmvc的代码书写规范就可以进行书写了

注:创建包的时候一定要创建在application类的同级包下

IndexController类

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

@Controller
public class IndexController {

    @RequestMapping(value = "/springboot/say")
    //加上这个注解相当于就是不走视图解析器 直接返回一个json格式的对象
    @ResponseBody
    public String say(){
        return "hello springboot";
    }
}

启动项目的方式就是直接运行applicaiton中的main方法

3、核心配置文件

注:核心配置文件在一个项目中只能有一个

3.1、application.properties配置文件

#设置端口号
server.port=8081
#设置项目地址根 必须以斜杠开头 此时所有的请求前都要加上springboot
server.servlet.context-path=/springboot

3.2、yml和yaml配置文件

使用springboot核心配置文件application.yml或者application.yaml

server:
  # 注意后面要加空额
  port: 8081
  servlet:
    context-path: /

两种配置文件本质上是一样的,写法也是一模一样的只是后缀不同

3.3、核心配置文件同时存在的情况

配置文件优先级顺序 properties > yml > yaml

3.4、多环境下的核心配置文件

工作中的环境:开发环境,测试环境,生产环境,准生产环境

首先我们在resources目录中创建多个配置文件表示不同的生产环境

application-dev.properties表示开发环境

#开发环境配置文件
server.port=8080
server.servlet.context-path=/dev

application-test.properties表示测试环境

#测试环境
server.port=8081
server.servlet.context-path=/test

application-ready.properties表示准生产环境

#准生产环境
server.port=8082
server.servlet.context-path=/ready

application-product.properties表示生产环境

#生产环境
server.port=9090
server.servlet.context-path=/product

我们需要在主配置文件中选择当前激活哪一个配置文件

#注核心配置文件
#激活使用的配置文件 填写的是-后面的名字
spring.profiles.active=test

如果我们使用yml或者yaml配置文件来配置多环境,写法与properties的关键字一样,写法就是yml的写法

3.5、自定义配置

首先我们在application.properties中自定义几个属性

#设置端口号
server.port=8080
#设置地址前缀
server.servlet.context-path=/

#自定义属性
school.name=hty
websit=http://www.autunomy.top

在controller程序中我们使用@Value注解来提取

package com.hty.controller;

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

@Controller
public class IndexController {
    //使用value注解可以读取自定义属性
    @Value("${school.name}")
    private String schoolName;

    @Value("${websit}")
    private String websit;

    @RequestMapping(value="/say")
    @ResponseBody
    public String say(){
        return "hello:"+schoolName+":"+websit;
    }
}

3.6、自定义配置映射为对象

首先我们在application.properties中创建一些自定义配置

server.port=8080
server.servlet.context-path=/


school.name=hty
school.websit=http://www.autunomy.top


abc.name=abc
abc.websit=http://www.abc.com

之后我们创建一个配置类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component//将该类交给spring容器进行管理
@ConfigurationProperties(prefix = "school")//必须有前缀,前缀就是自定义配置的前缀
public class School {
    private String name;
    private String websit;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWebsit() {
        return websit;
    }

    public void setWebsit(String websit) {
        this.websit = websit;
    }
}

使用这两个注解就可以让sprin容器进行管理

然后我们进行测试

package com.hty.controller;

import com.hty.config.School;
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 {
	
    //由于已经交给spring容器进行管理,所以我们可以使用自动装配
    @Autowired
    private School school;

    @RequestMapping("/say")
    @ResponseBody
    public String say(){
        return "学校名称"+school.getName()+" "+"学校网站"+school.getWebsit();
    }
}

当我们写完配置类的时候,会出现警告,解决方法就是添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

4、springboot集成jsp

环境搭建:首先创建一个springboot的项目,然后在main下面创建一个webapp文件夹,之后点开项目结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sesNdDx8-1658323470536)(springboot%E7%AC%94%E8%AE%B0.assets/image-20220228165517141.png)]

将webapp目录添加进去,然后点击create artifacts 然后点击apply然后ok

还需要添加依赖

<!--引入springboot内嵌tomcat对jsp的解析包-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

还需要在pom文件中的build标签下进行配置

<!--
    springboot项目默认推荐使用的前端引擎是thymeleaf,现在我们要使用springboot集成jsp
    手动指定jsp最后编译的路径,而且springboot集成jsp编译jsp的路径是springboot规定好的位置
    META-INF/resources
-->
<resources>
    <resource>
        <!--源文件夹-->
        <directory>src/main/webapp</directory>
        <!--指定编译到META-INF/resources-->
        <targetPath>META-INF/resources</targetPath>
        <!--指定源文件夹中的那些资源要编译进去-->
        <includes>
            <!--表示所有内容-->
            <include>*.*</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
            <include>**/*.dtd</include>
        </includes>
        <filtering>false</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.xml</include>
            <include>**/*.properties</include>
        </includes>
        <filtering>false</filtering>
    </resource>
</resources>

最后一步就是在application.properties中配置视图解析器

#配置视图解析器
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

现在开始编写controller然后创建jsp之后测试,步骤就和springmvc中的步骤一模一样

5、springboot集成mybatis

首先添加依赖

<!--mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis整合springboot框架的起步依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

5.1mybatis逆向工程

使用mybatis提供的逆向工程生成实体bean,映射文件,DAO接口

首先搭建数据库

drop table if exists t_student;
create table t_student
(
   id                   int(10)                        not null auto_increment,
   name                 varchar(20)                    null,
   age                  int(10)                        null,
   constraint PK_T_STUDENT primary key clustered (id)
);

insert into t_student(name,age) values("zhangsan",25);
insert into t_student(name,age) values("lisi",28);
insert into t_student(name,age) values("wangwu",23);
insert into t_student(name,age) values("Tom",21);
insert into t_student(name,age) values("Jck",55);
insert into t_student(name,age) values("Lucy",27);
insert into t_student(name,age) values("zhaoliu",75);

创建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="E:\编程\jar包\mysql连接java\mysql-connector-java-8.0.12\mysql-connector-java-8.0.12.jar"/>

    <!-- 配置 table 表信息内容体,targetRuntime 指定采用 MyBatis3 的版本 -->
    <context id="tables" targetRuntime="MyBatis3">
        <!-- 抑制生成注释,由于生成的注释都是英文的,可以不让它生成 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>


        <!-- 配置数据库连接信息 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/springboot?serverTimezone=Asia/Shanghai"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- 生成 pojo 类,targetPackage 指定 pojo 类的包名, targetProject 指定
        生成的 pojo 放在 idea 的哪个工程下面-->
        <javaModelGenerator targetPackage="com.hty.pojo"
                            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="com.hty.mapper"
                         targetProject="src/main/java">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 生成 MyBatis 的 Mapper 接口类文件,targetPackage 指定 Mapper 接口类的包
        名, targetProject 指定生成的 Mapper 接口放在 eclipse 的哪个工程下面 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.hty.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>

导入插件

<!--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>

完成配置之后我们打开maven管理、点击plugins,点击

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9NoARTMr-1658323470537)(springboot%E7%AC%94%E8%AE%B0.assets/image-20220228203258175.png)]

然后就可以自动生成了

5.2、mapper.xml

首先观察了mapper接口,我们会发现总共会有6个方法但是其中插入和更新是有两个方法,再根据mapper.xml文件中sql语句的样式来看,其中的一个插入和更新的方法是使用动态sql来进行更改数据库的,就是我们可以不传递完全部的数据库字段,只需要传递一部分就可以实现这个功能,另一个插入和更新就是普通的方法,需要传递所有的参数

注:mybatis的逆向工程只会针对单表操作

5.3、集成mybatis

由于dao层已经由mybatis逆向工程生成了,所以我们主需要写service层和controller层,但是由于service层需要调用dao层,但是spring容器中并没有mapper的实例,所以我们需要在mapper文件中加入一个注解

package com.hty.mapper;

import com.hty.pojo.Student;
import org.apache.ibatis.annotations.Mapper;

@Mapper//扫描DAO接口到spring容器中
public interface StudentMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Student record);

    int insertSelective(Student record);

    Student selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Student record);

    int updateByPrimaryKey(Student record);
}

这个注解用来扫描DAO中的接口,spring容器就会管理这些接口

之后由于controller层需要调用service层,所以也需要让spring容器去管理service层的文件

注:service注解需要加在实现类上,因为spring只能管理类,不能管理接口

package com.hty.service;

import com.hty.mapper.StudentMapper;
import com.hty.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class StudentServiceImpl implements StudentService{
    @Autowired
    private StudentMapper studentMapper;
    public void setStudentMapper(StudentMapper studentMapper) {
        this.studentMapper = studentMapper;
    }

    @Override
    public Student queryStudentById(Integer id) {
        return studentMapper.selectByPrimaryKey(id);
    }
}

之后我们还需要在application.properties中配置数据库连接的相关属性

#配置连接数据库的配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

之后启动项目就可以访问了

5.4、MapperScan注解的位置

由于我们的mapper文件会有多个,每一个都要加上@Mapper很麻烦,所以我们可以在application启动入口类上加上@MapperScan,mapper类就不需要加@Mapper注解

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "com.hty.mapper")//指定要扫描的包
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

5.5、mapper.xml文件的位置

我们还有一个地方可以存放mapper.xml文件,就是在resources路径下的mapper目录,在这里存放mapper文件那就需要在application.properties中进行配置

mybatis.mapper-locations=classpath:mapper/*.xml

6、springboot的事务

在需要添加事务的方法上加@Transactional注解

import com.hty.mapper.StudentMapper;
import com.hty.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class StudentServiceImpl implements StudentService{
    @Autowired
    private StudentMapper studentMapper;

    @Transactional
    @Override
    public int updateStudentById(Student student) {
        return studentMapper.updateByPrimaryKey(student);
    }
}

我们也可以在启动类上加一个注解表示开启事务,但是springboot默认是开启事务的,所以加不加都行

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@MapperScan(basePackages = "com.hty.mapper")
@EnableTransactionManagement
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

7、集成springmvc

springboot中已经自动继承了springmvc,springmvc中的所有配置都不需要自己配置

@RestController注解

这个注解是在控制层的类上声明的,添加这个注解之后,代表了这个类的所有方法都不会被视图解析器所解析,返回值都是一个json格式的字符串,写了这个注解之后,方法上就不需要添加@ResponseBody注解

8、springboot中RESTFul风格

使用方法

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

但是当我们还有一个方法为

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

此时由于程序无法区分这两个方法,所以就会报错,解决的方法就是更换注解,用不同的访问方式来进行区分,例如

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

另外用@DeleteMapping

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

9、集成Redis

添加依赖

<!--springboot继承redis的起步依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456

案例

import com.hty.service.StudentService;
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 StudentController {

    @Autowired
    private StudentService studentService;
	
    //添加值
    @RequestMapping(value = "/put")
    @ResponseBody
    public Object put(String key,String value){

        studentService.put(key,value);

        return "值已成功添加";
    }
	
    //取值
    @RequestMapping(value = "/get")
    @ResponseBody
    public String get(){

        String value = studentService.get("zhangsan");

        return "数据count为:"+value;
    }

}

service层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class StudentServiceImpl implements StudentService{
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;

    @Override
    public void put(String key, String value) {
        //opsForValue就相当于是redis中的String
        redisTemplate.opsForValue().set(key,value);
    }

    @Override
    public String get(String key) {
        return (String)redisTemplate.opsForValue().get(key);
    }
}

10、springboot创建非web工程

创建步骤与创建web项目不同的地方在于,不需要添加springweb依赖,直接创建就行

10.2、方法一

使用ConfigurableApplicationContext对象获取bean

首先创建service包,并创建StudentService以及其实现类

public interface StudentService {
    String sayHello();
}
import org.springframework.stereotype.Service;

//使用这个注解可以把这个类交给spring进行管理
@Service
public class StudentServiceImpl implements StudentService{
    @Override
    public String sayHello() {
        return "say Hello";
    }
}

调用这个类的步骤

import com.hty.service.StudentService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

//主启动类
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        /*
        * springboot程序启动后,返回值是ConfigurableApplicationContext
        * 它也是Spring的一个容器,它其实相当于原来spring容器中启动容器ClassPathXmlApplicationContext
        * */
        //获取springboot容器
        ConfigurableApplicationContext run = SpringApplication.run(Application.class, args);

        //从spring容器中获取指定bean对象
        StudentService studentService = (StudentService)run.getBean("studentServiceImpl");

        //调用方法
        System.out.println(studentService.sayHello());
    }

}

最后就会输出 say Hello

10.2、方法二

实现CommandLineRunner接口,重写run方法

service类和前一个例子一样

import com.hty.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements CommandLineRunner {

    //3.注入这个类
    @Autowired
    private StudentService studentService;

    public static void main(String[] args) {
        //1.Springboot启动程序会初始化Spring的容器
        SpringApplication.run(Application.class, args);
    }

    //2.重写CommandLineRunner类中的run方法
    @Override
    public void run(String... args) throws Exception {
        //4.调用业务方法
        System.out.println(studentService.sayHello("world"));
    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:22:54  更:2022-07-21 21:24:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:22:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码