spring boot基础应用

上面我们介绍了一些基本的springboot的基础知识,教了如何创建springboot的项目,这里我们将把项目进行完善,这里我会把每个代码进行仔细分析,认真的分析,尽量做到每个地方都能看得懂,大家可以和我交流哦.

基础介绍

1、什么是SpringBoot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

2、特点

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置

3、SpringBoot项目结构

如果从一个用户访问一个网站的情况来看,对应着项目代码结构来分析,可以贯穿整个代码分层

v2-6721c7926c41534d491d964a8183338a_1440w _1_.jpeg

对应代码目录的流转逻辑就是:

v2-27a981bc39cf861e5333b87f1dea4495_1440w _1_.jpeg
4、SpringBoot分层
1.Dao层

Dao层主要做数据持久层的工作, 负责与数据库进行联络的一些任务都封装在此。 Dao层的设计:首先 是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可以再模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,dao层的数据源配置,以及有关数据库连接参数都在Spring配置文件中进行配置。

2.Service层

Service层主要负责业务模块的应用逻辑应用设计。 Service层的设计:同样是首先设计接口,再设计其实现类,接着再Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用service接口来进行业务处理。service层的业务实, 具体要调用已经定义的dao层接口 ,封装service层业务逻辑有利于通用的业务逻辑的独立性和重复利用性。程序显得非常简洁。

3.Controller层

Controller层,负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里进行,针对具体的业务流程,会有不同的控制器。我们具体的设计过程可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块。这样不仅使程序结构变得清晰,也大大减少了代码量。

4.view层

view层与控制层结合比较紧密,需要二者结合起来协同开发。view层主要负责前台jsp页面的显示。

5.Entity层

Entity层是实体层,也就是所谓的model,也称为pojo层,是数据库在项目中的类,该文件包含实体类的属性和对应属性的set、get方法;

6.它们之间的关系

Service层是建立在Dao层之上的,建立了Dao层后才可以建立Service层,而Service层又是在Controller层之下的,因而 Service层应该既调用Dao层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。 每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。

7.总结:

Controller层叫做控制层,负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。即用于接口暴露。

Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务。即sevice层用于逻辑处理,sevice层专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。

Dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。

View层叫做表示层,此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示。

​ 表示层(View\Web) 调用 控制层(Controller),控制层(Controller)调用业务层(Service),业务层(Service)调用数据访问层(Dao)Dao面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出Dao层,然后根据具体的业务逻辑进一步封装Dao层成一个Service层,对外提供成一个服务。
在这里插入图片描述

代码完善

这里我们将继续深入的学习springboot,将代码进行完善和讲解。

连接mysql

创造环境(可选)
前面已经建立好了springboot的project项目,这里开始配置mysql,由于安装了springboot
的插件,或者使用了专业版的idea,所以这里不需要写maven下载包文件,如果有问题的可以,可
以创建maven项目,这里我也把需要的maven放在这里。

如果是导包或者专业版的idea这一步可以省略不写

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>


 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>


      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
开始配置

这里来配置连接mysql
如果是通过我的方法创建springboot的项目,那么这里会自动的生成application.properties文件,如果没有这个文件,可以在对应的文件夹下面创建一个file文件,文件名一致即可
在这里插入图片描述
这里就是对应的配置文件
不要直接的就复制粘贴进去,下面我加上引号的就是需要更改的内容。

#对mysql连接进行配置
# 应用名称
spring.application.name=spingbootdemo
# 应用服务 WEB 访问端口
server.port=8080
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/“kayleigh”?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8
# 数据库用户名&密码:
spring.datasource.username=”root“
spring.datasource.password=12345678

项目入口

我们在main问价下的java文件中创建一个com.kayleigh文件夹,(这里文件夹名字可以任意更换),然后创建一个class文件,名字为SpringBootApplicationDemo的class文件,这里面主要是项目的入口

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//这个注解表示这是作为spingboot的应用
@SpringBootApplication
public class SpringBootApplicationDemo {
    public static void main(String[] args) {
        //这是启动Spring的应用
        SpringApplication.run(SpringBootApplicationDemo.class,args);
    }
}
创建完成以后就可以直接运行试试代码有没有问题,没有问题的话下面就接着做

创建数据库和表

由于前面创建一个Kayleigh的database,这里我们在这个下面创建一个Student的表,由于我们后面需要用name进行搜索,所以,这里还需要创建一个索引,我直接把代码付下:
use kayleigh;
CREATE TABLE Student(
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL DEFAULT 0,
    gender VARCHAR(255),
    clazz VARCHAR(255),
    sum_score INT
);


--对那么做索引,需要按name做查询
CREATE INDEX stu_name_index ON Student(name);


OK,准备工作做完了,这里我们继续开始编写代码吧

前端显示

**创建几个如下的文件夹,这里创建问价夹是为了方便后面的维护和管理,为了统一代码的规范性。
** 在这里插入图片描述

Entity层
这里我们在Entity文件夹下面创建一个Student类,其实这里的代码很简单,就是将创建表的时
候的字段设置成private,由于private不能直接获取所以添加其get/set方法。
package com.kayleigh.Entity;


import javax.persistence.*;

@Entity
@Table(name = "Student")
public class Student {

    //定义一张表的时候需要指定主键,一般主键是通过下面的方式进行指定
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//描述ID自增
    private Integer id;
    private String name;
    private Integer age;
    private String gender;
    private String clazz;
    //属性名一般同数据库中的表的列名保持一致,不至于时候,可以用@Column注解
    private Integer sum_score;


    //由于这里的变量值都是private的不能直接赋值也不能直接获取,所以我们需要添加get/set方法


    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;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getClazz() {
        return clazz;
    }

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    public Integer getSum_score() {
        return sum_score;
    }

    public void setSum_score(Integer sum_score) {
        this.sum_score = sum_score;
    }
}

Dao层
叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于
某个表、某个实体的增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。
这一层主要是写一些接口,继承JpaRepository,由于JpaRepository里就有很多的方法,所以这个接口暂时可以不写方法,后续有需求在写
import com.kayleigh.Entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

/*
数据的持久化层,这里定义一个接口。这里命名Repository的原因就是需要继承一个JpaRepository
 */
//这里的Student就是刚刚定义的Entity,后面添加的就是主键的字段类型
//这个就写完了,这是一个接口,父类有很多的方法
@Repository
public interface StudentRepository extends JpaRepository<Student,Integer> {

}
common

这里主要是放请求成功和请求失败返回的数据

package com.kayleigh.common;

public class Result<T> {
    private String code;
    private String msg;
    private T data;

    public Result() {

    }

    public Result(T data) {
        this.data = data;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    //请求成功不返回数据
    public static <T> Result<T> success(){
        Result rs = new Result<>();
        rs.setCode("200");
        rs.setMsg("ok");
        return rs;
    }
    //请求成功返回数据
    public static <T> Result<T> success(T data){
        Result<T> rs = new Result<T>(data);
        rs.setCode("200");
        rs.setMsg("ok");
        return rs;
    }

    //请求失败
    public static <T> Result<T> error(String code,String msg){
        Result rs = new Result<>();
        rs.setCode("code");
        rs.setMsg("msg");
        return rs;
    }
}

Controller层

叫做控制层,负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。即用于接口暴露。

package com.kayleigh.Controller;

import com.kayleigh.Entity.Student;
import com.kayleigh.Service.StudentService;
import com.kayleigh.common.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController  //将数据以json格式返回
@RequestMapping("/stu")
public class StudentController {

    @Resource
    private StudentService studentService;

    @RequestMapping("all")
    public Result<List<Student>> findAll(){

        List<Student> list = studentService.findAll();
        return Result.success(list);
    }

    @RequestMapping("all2")
    public Result<List<Student>> findAll2(){

        List<Student> list = studentService.findAll();
        return Result.success(list);
    }
}

Service层

服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务。即sevice层用于逻辑处理,sevice层专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现

package com.kayleigh.Service;

import com.kayleigh.Dao.StudentRepository;
import com.kayleigh.Entity.Student;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/*
具体的业务逻辑
 */
//加上注解
@Service
public class StudentService {
    @Resource
    private StudentRepository studentrepository;


    public List<Student> findAll(){
        return studentrepository.findAll();

    }
}

测试运行

这几步都弄完了,可以测试连接,测试之前记得开启mysql,如果出现下面的样子就说明已经成功了。

  • 访问形式:http://localhost:8080/stu/all
  • 访问样式:
    在这里插入图片描述

美化并且在前端显示数据

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

创作者mateo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值