欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Cloud学习笔记--Spring Boot初次搭建

程序员文章站 2022-03-13 17:00:47
1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好。所以很久以来我的Spring学习都是出于停滞状态的。 不过这种状态在我接触了Spring Boot之后,就发生了改变。Spring官方 ......

1. spring boot简介

初次接触spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好。所以很久以来我的spring学习都是出于停滞状态的。

不过这种状态在我接触了spring boot之后,就发生了改变。spring官方可能也觉得庞杂的配置是一件很不优雅的事情,虽然加入了包扫描,但是也没有触及灵魂。

spring还有一个问题就是依赖的冲突问题,这个对我这种半道出家的程序员来说更是痛苦至极。

还好,所有的痛苦都被spring boot终结了。

spring boot有三个特点:

  • 自动配置
  • 起步依赖
  • actuator对运行状态的监控

每一个特点都那么的美好。

其实开发人员的本职工作是什么?是完成业务代码的编写,实现业务功能,因此如果消耗大量时间在spring本身的配置和依赖冲突解决上,那么等于是浪费了大量的时间。

spring boot的出现,可以说是对生产力的一次解放。

闲话少叙,看一个需求。

我现在想要写一个工具,连接数据库,实现增删改查功能,恐怕很多程序员会回忆起最初学习java的时候,那堪称ugly的jdbc模板代码了吧。我本身是一个dba,因为公司安排,写过很多jdbc代码,深刻的感觉到这种代码实在浪费时间,后来接触了jpa框架,感觉非常好。下面就用spring boot来实现一个数据库的增删改查功能。

2. spring boot实战jpa

数据库我会使用h2,这种嵌入式的数据库最适合在家学习的时候使用,很小,支持最基本的数据库操作,只要不涉及到太深刻的内容,感觉和mysql差不多。至于如何在本机上启动一个h2 server,就不在这里描述了。

首先呢,打开idea,遵循下面的顺序:
new project ->spring initializr ->填写group、artifact ->钩上web(开启web功能)->点下一步就行了。

Spring Cloud学习笔记--Spring Boot初次搭建

上图是我选择的需要的组件。

既然是jpa,那么我们首先要定义一个entity,我的表叫做demo,那么entity也就是叫做demo:

package com.example.springwithjdbc.entity;


import lombok.data;

import javax.persistence.entity;
import javax.persistence.generatedvalue;
import javax.persistence.id;

@entity
@data
public class demo {
    @id
    @generatedvalue
    private int id;
    
    private string uname;
}

注解解释:

  1. @entity:表示这个类是个entity;
  2. @data:这是lombok提供的功能,这个注解加上之后,就不需要写getter和setter了,也不用写tostring方法,都会自动生成;
  3. @id:表示这个是主键;
  4. @generatedvalue:表示采用自增

接下来,需要经典的dao层出现了:

package com.example.springwithjdbc.dao;

import com.example.springwithjdbc.entity.demo;
import org.springframework.data.jpa.repository.jparepository;

public interface demodao extends jparepository<demo, integer> { }

dao层只是定义了一个interface,没有进行任何实现,其实也不需要进行任何具体的实现,注意继承的jparepository,它帮我们做了很多需要我们原先手动编码的工作。

接下来就是经典的service层了,service即业务层:

package com.example.springwithjdbc.service;

import com.example.springwithjdbc.entity.demo;

import java.util.list;

public interface idemoservice {
    demo add(demo demo);

    demo findbyid(int id);

    list<demo> findall();
}

以上代码是service的接口,接下来编写具体的实现:

package com.example.springwithjdbc.service;

import com.example.springwithjdbc.dao.demodao;
import com.example.springwithjdbc.entity.demo;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;

import java.util.list;

@service
public class demoservice implements idemoservice {
    @autowired
    private demodao demodao;

    @override
    public demo add(demo demo) {
        return demodao.save(demo);
    }

    @override
    public demo findbyid(int id) {
        return demodao.findbyid(id).get();
    }

    @override
    public list<demo> findall() {
        return demodao.findall();
    }
}

注解解释:

  1. @service:表示这是一个service;

  2. @autowired:将demodao注入。

接下来,我们需要一个controller来实现rest接口:

package com.example.springwithjdbc.controller;

import com.example.springwithjdbc.entity.demo;
import com.example.springwithjdbc.service.idemoservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.postmapping;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller;

import java.util.list;

@restcontroller
@requestmapping("/")
public class demorestcontroller {
    @autowired
    idemoservice demoservice;

    @postmapping("/save")
    public string save(@requestparam(name = "name")string name) {
        demo demo = new demo();
        demo.setuname(name);
        return demoservice.add(demo).tostring();
    }

    @getmapping("/find")
    public string findbyid(@requestparam(name = "id")int id) {
        return demoservice.findbyid(id).tostring();
    }

    @getmapping("/list")
    public string findall() {
        list<demo> demolist = demoservice.findall();
        return demolist.tostring();
    }
}

最后,配置application.yml,配置数据源:

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/code/h2/bin/demo
    username: admin
    password: admin
  jpa:
    show-sql: true

启动这个工程即可,接下来就可以用浏览器或者postman进行测试了,这是我用postman进行的测试,首先发送一个post请求,写入一条数据:

Spring Cloud学习笔记--Spring Boot初次搭建

下面我们查询这条数据:

Spring Cloud学习笔记--Spring Boot初次搭建

多写几条数据以后,调用list接口:

Spring Cloud学习笔记--Spring Boot初次搭建

到这里,我们已经成功的编写了一段基于spring boot的jpa代码,实现了简单的新增和查询功能。比我之前写的jdbc代码不知道简单到哪里去了,而且也更加的优雅了,再也没有那么多复杂的让人难以看懂的xml配置了。

spring甚至贴心到做了一个网站专门生成工程骨架。

3. 小结

我最近在学习微服务,要学习微服务绕不开的就是spring cloud,而spring cloud离不开spring boot。因此首先了解spring boot是很有必要的。

这是我的笔记整理出来的第一篇,希望能够帮助到其他和我一样在学习微服务,学习spring cloud,学习spring boot的人。