【微服务实践2】Spring的配置操作,Java注释,spring框架

微服务实践2 -从网站初始化到获取数据库数据

1、从Spring initializer网站下载初始化

网站为:spring initializer

选择初始化条件:

  • Project : Maven

  • Language : Java

  • Spring Boot : 2.7.11

  • Project Metadata:(没写则是默认)

    • Group(组织名) : com.openflag
    • Artifact (name) : client-service
    • Packaging : Jar
    • Java : 11

之后选择GENERATE即可。

2、前置工作

1.IDEA打开项目时,选择的文件夹应该是src上级的文件夹,若选了上上级的文件夹则无法使用。

例:test/test/src,应选择第二个test打开项目。

2.如果文件中Java文件夹未被设置为Source root(蓝色文件夹),则应该右键java ->Marked Directory as -> Source root

3.如果环境未设置为JAVA11,则窗口左上角选择File -> Project Structure ->SDK选择JAVA11.

4.打开终端,输入mvn clean,显示BUILD SUCCESS,即可。

Maven常见操作命令

3、注解理解

  • @RestController (了解)

    • 将函数的返回值直 接填入 HTTP 响应体中

    • 该注解为一个组合注解,@RestController会告诉Spring,控制器中所有的处理器方法的返回值都要直接写入响应体中,而不是将值放到模型中并传递给一个视图以便于渲染。相当于@Controller和@ResponseBody的组合。

      • 响应体是服务器返回给客户端的数据,通常是一个文本或者一个二进制文件,比如HTML页面,图片,视频等。
      • 处理器方法是控制器类中用来处理客户端请求的方法,通常用@RequestMapping注解来映射请求的路径和参数。
      • 将类中所有处理器方法的返回值直接写入响应体中的意思是,不需要经过视图解析器来渲染页面,而是直接把返回值作为响应体发送给客户端,通常用于返回JSON或者XML格式的数据
  • @SpringBootApplication (了解)

    • 申明让spring boot自动给程序进行必要的配置,相当于同时使用了@Configuration,@EnableAutoConfiguration和@ComponentScan三个注解³。
    • @Configuration表示当前类是一个配置类,可以用来定义bean对象并加入到IOC容器中²。
    • @EnableAutoConfiguration表示开启自动配置,根据项目依赖的jar包,自动配置相关的组件²。
    • @ComponentScan表示自动扫描并加载符合条件的组件或者bean定义,一般会扫描@SpringBootApplication标注的类所在的当前包及其子包中的被@Controller,@Service,@Repository,@Component等注解标注的类⁴。
  • 🔴 @Autowired

    • bean对象是:
      一个普通的对象类,必须有一个无参构造函数,并且所有属性必须进行get/set封装(主要)
      一个由Spring IoC容器实例化、组装和管理的对象,可以通过注解或配置文件定义。
      一个可以用来传输数据、封装业务逻辑、实现可视化设计等功能的特殊类。
    • 自动导入对象到类中,自动装配,其作用是为了消除代码里的getter/setter与bean属性中的property。
    • 让spring完成bean自动装配的工作,可以对类成员变量、方法及构造函数进行标注。
    • @Autowired默认是按照类去匹配,配合@Qualifier指定按照名称去装配bean。
    • @Autowired可以省略字段的set方法,也可以用于set方法或构造方法上。
  • 🔴 @GetMapping()

    • @GetMapping注解是一个组合的注解,用于将HTTP GET请求映射到特定的处理器方法上。它相当于@RequestMapping(method = RequestMethod.GET)的简写。
    • @GetMapping注解可以接受一些参数,如value, params, headers等,用于指定请求的路径,参数,头部等条件.
  • 🔴 @PathVariable

    • 在Java中,@PathVariable注释用于将URI模板变量绑定到控制器处理方法的参数。例如,假设我们有一个RESTful Web服务,它允许我们检索用户信息。我们可以使用以下代码来检索用户信息:
    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
    
    • 在这个例子中,@PathVariable注释将URI模板变量{id}绑定到getUserById()方法的id参数上。这意味着当我们访问/users/123时,getUserById()方法将被调用,并且id参数将被设置为。
  • 🔴 @Repository

    • @Repository注释是Spring框架中的一个注释,它用于标记数据访问层组件,例如DAO(数据访问对象)或存储库。使用@Repository注释可以将数据访问层的代码与业务逻辑分离。这样,我们就可以在不影响业务逻辑的情况下更改数据访问层的实现。

    • 例如,假设我们有一个名为UserRepository的接口,它定义了一些用于检索和保存用户信息的方法。我们可以使用以下代码来实现UserRepository:

    @Repository
    public interface UserRepository {
        User findById(Long id);
        List<User> findAll();
        void save(User user);
    }
    
    • 在这个例子中,@Repository注释将UserRepository接口标记为数据访问层组件。这意味着我们可以使用Spring依赖注入来获取UserRepository实例,并使用它来检索和保存用户信息。
  • 🔴 @Entity

    • 实体类是一种用于存储数据并提供对这些数据的访问的数据密集类,通常对应数据库中的一张表,其中的属性对应表中的字段。
    • @Entity注解是Java Persistence API中定义的一种注解,用于标识一个类是一个实体类,可以映射到数据库的一张表。@Entity注解说明这个类使用默认的ORM规则,即类名就是表名,类属性就是字段名。@Entity注解可以接受一个name参数,用于指定映射的表名,如果不指定,默认为类名。
  • @Data

    • @Data注解是一个来自Lombok项目的注解,用于简化Java类的编写,它可以自动为类的所有属性生成getter和setter方法、equals和hashCode方法、toString方法,以及构造方法。@Data注解可以减少重复的代码,提高开发效率和可读性 。

    • 下面是一个@Data注解的示例代码,用于定义一个学生实体类,并使用@Data注解简化了代码:

      import lombok.Data;
      
      @Data
      public class Student {
      
          private Long id;
      
          private String name;
      
          private int age;
      
          // 无需手动编写getter和setter等方法
      }
      
  • @Id

    • 用于标识一个实体类的属性作为主键,可以映射到数据库表的主键列。
  • @Service

    • @Service注解是一种用于标识一个类是一个服务类的注解,它是@Component注解的一种特化,表示该类属于业务逻辑层。
    • @Service注解可以让Spring容器自动扫描并将该类注册为一个Bean,不需要再在配置文件中定义。
    • @Service注解可以接受一个value参数,用于指定Bean的名称,如果不指定,默认为类名首字母小写。

4、Java特性理解(会的不用看,给不熟悉Java的伙伴:))

  • 接口

    • Java中的接口类是一种抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。下面是一个简单的Java接口的例子(一个接口类,两个实现类):

      interface Animal {
         public void eat();
         public void travel();
      }
      
      class MammalInt implements Animal {
      
         public void eat() {
            System.out.println("Mammal eats");
         }
      
         public void travel() {
            System.out.println("Mammal travels");
         } 
      
         public int noOfLegs() {
            return 0;
         }
      
         public static void main(String args[]) {
            MammalInt m = new MammalInt();
            m.eat();
            m.travel();
         }
      }
      
    • 与抽象类的区别:

      • 抽象类可以同时具有抽象和具体方法;而接口只能有抽象方法,它是抽象方法的集合(从Java 8开始,它也可以有默认和静态方法)。
      • 抽象类不支持多重继承,一次只能扩展一个类或一个抽象类;但是一个类可以实现多个接口。
      • 抽象类可以拥有构造器;而接口不能拥有构造器。
      • 抽象类中的成员变量可以是各种类型的;而接口中的成员变量只能是public static final类型的。
  • Optional关键字

    • 它是一个可以为null的容器对象。
    • 如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
    • Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。

5、Spring框架下的类连接(迅捷画图)

在这里插入图片描述

  1. CilentController是控制类,然后让ClientService为其提供getClient的服务,ClientService通过ClientServiceImpl实现,然后返回给控制类getClient方法。

  2. ClientServiceImpl通过ClientRepository访问数据库,获取Client。

  3. ClientRepository通过继承JpaRepository<类型,主键>来实现连接数据库,并且可以自动实现,具体可以右上角选择搜索SimpleJpaRepository,来查看有哪些方法(findById())。

6、数据库实现的细节

  1. 添加依赖于pom.xml

    • <dependency>
          <groupId>org.sprin.framework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
          <scope>runtime</scope>
      </dependency>
      
      
    • 然后右键pom.xml > Maven > Reload project

  2. 选择resources的文件夹,配置application.properties

    • # 修改端口
      server.port=8087
      
      # 使用H2内存数据库,数据库名称为testdb。
      spring.datasource.url=jdbc:h2:mem:testdb
      # 使用H2数据库的驱动程序
      spring.datasource.driverClassName=org.h2.Driver
      # 使用用户名为sa的用户连接到H2数据库
      spring.datasource.username=sa
      # 连接到H2数据库时不需要密码
      spring.datasource.password=
      # 使用Hibernate的H2方言来生成SQL语句。
      spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
      
      # 表示延迟数据源初始化,即在Hibernate初始化之前不会执行数据源初始化。
      spring.jpa.defer-datasource-initialization=true
      # 启用H2控制台
      spring.h2.console.enabled=true
      # H2控制台的路径
      spring.h2.console.path=/h2-console
      # 禁用H2控制台的跟踪功能
      spring.h2.console.settings.trace=false
      # 禁用H2控制台的Web允许其他人功能
      spring.h2.console.settings.web-allow-others=false
      
  3. 在数据类型(Client)中加上@Entity和@Id

  4. 在resources文件中新建data.sql文件,然后在里面写入数据库命令即可,启动时会自动执行

    • 代码如下

      Insert into Client(id, name, asset_value) values
      (1, 'Peter Fisher', 5000),
      (2, 'Jorge Sullivan', 8000),
      (3, 'Eric Woods', 6000),
      (4, 'Norma Fisher', 12000),
      (5, 'Kayla Sullivan', 800),
      (6, 'Elizabeth Woods', 10000);
      

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值