spring基础

不同版本的文档

# 可以使用pdf或者但单文件版本进行查看
https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/pdf/
https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/htmlsingle

IDE安装

  • IDEA,需要激活

# 下载最新的IDEA
# 下载破解插件: https://github.com/libin9iOak/ja-netfilter-all
# 在D:\ideaIU-2023.1.win\bin\idea64.exe.vmoptions新增:
-javaagent:D:\\ja-netfilter-all-main\\ja-netfilter-all-main\\ja-netfilter.jar=jetbrains
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
# 然后打开idea64.exe启动ide
# 进入https://3.jetbra.in/ 网站,复制一个key出来激活即可
# 热重载,idea还需要配置,auto-make打开
File -> Settings -> Compiler,勾选 Build Project automatically
# idea generator 快捷键
alt+insert

请求接收,通常是生成Ben类实体进行注入接收json2javapojo

/**
  * Copyright 2023 bejson.com
  */
package com.example.myproject.ben;

/**
 * Auto-generated: 2023-04-11 10:10:3
 *
 * @author bejson.com ([email protected])
 * @website http://www.bejson.com/java2pojo/
 */
public class Login {

    private String name;
    private String pass;

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

    public String getName() {
        return name;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getPass() {
        return pass;
    }

}


package com.example.myproject.controller;

import com.example.myproject.ben.Login;

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

@Controller
public class HelloController {

  @RequestMapping("/")
  @ResponseBody
  String index(Login res) {
    return "Hello World!" + res.getName();
  }

  @RequestMapping("/name")
  @ResponseBody
  String name() {
    return "Hello name!";
  }

}
<!--参数校验组件-->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-cdi</artifactId>
    <version>8.0.0.Final</version>
</dependency>

响应

在 Spring 中,你可以在 Controller 类中的方法上使用 @ResponseBody 注解来返回 DTO 对象。Spring 会自动将 DTO 对象转换为 JSON 格式并返回给客户端。例如:

@RequestMapping(value = "/getDTO", method = RequestMethod.GET)
@ResponseBody
public MyDTO getDTO() {
    MyDTO dto = new MyDTO();
    // 设置 DTO 对象的属性
    return dto;
}

在 Spring 中,你可以通过定义一个简单的 Java 类来实现一个 DTO。这个类通常只包含一些属性和相应的 getter 和 setter 方法,用于存储和访问数据。

数据库操作,ORM

  • 使用spring JPA

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
// 带set/get er的实体类,主要是@Entity,@Id
/**
  * Copyright 2023 bejson.com
  */
package com.example.myproject.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class SysUser {
    @Id
    private int id;
    private int age;
    private String email;
    private String name;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

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

    public String getName() {
        return name;
    }

}
// dao接口继承
package com.example.myproject.dao;

import java.util.List;

import com.example.myproject.entity.SysUser;

import org.springframework.data.jpa.repository.JpaRepository;

public interface SysUserRepository extends JpaRepository<SysUser, Long> {
    List<SysUser> findByName(String name);
    SysUser findById(Integer id);
}
// 使用
package com.example.myproject.controller;

import com.example.myproject.dao.SysUserRepository;
import com.example.myproject.entity.SysUser;

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 HelloController {
  @Autowired
  private SysUserRepository userRepository;

  @RequestMapping("/")
  @ResponseBody
  SysUser index() {
    return userRepository.findById(1);
  }

}

其他

  • 命令行启动

mvn spring-boot:run
# 参数
mvn spring-boot:help -D detail=true
#
mvn spring-boot:run -D spring-boot.run.fork=false
# 热更新相关
# spring-boot.run.fork=false是Spring Boot插件的一个选项,它指示应用程序在Spring Boot插件的同一JVM进程中运行,而不是在一个新的进程中运行。当该选项设置为false时,插件会使用“restart”技术在应用程序更改时2重新启动应用程序,从而实现热更新。

# 如果spring-boot.run.fork被设置为true,那么Spring Boot插件将启动一个新的JVM进程来运行应用程序。这意味着即使在应用程序的源代码或配置文件发生更改时,也不会自动重新启动应用程序,因为更改不会直接应用于正在运行的JVM进程。

# 在使用Spring Boot开发应用程序时,通常建议使用spring-boot.run.fork=false选项,因为这样可以使开发过程更加高效,同时也使您更容易观察到应用程序的运行行为,从而更容易诊断和解决问题。

mvn --projects ruoyi-admin spring-boot:run -D spring-boot.run.fork=false

# 多模块启动, 指定web-api文件夹
mvn package
mvn install
mvn spring-boot:run -pl web-api
  • 配置vscode remote ssh 开发spring

# 下载jdk
https://github.com/adoptium/temurin8-binaries/releases
https://github.com/adoptium/temurin17-binaries/releases
# 安装扩展
# 如果使用的是jdk 1.8版本,安装后将redhat.java版本变更为0.64.1
redhat.java
vscjava.vscode-java-dependency
vscjava.vscode-java-debug
vscjava.vscode-spring-initializr
# maven下载
https://maven.apache.org/download.cgi
# 配置国内源并复制到用户目录, 打开项目会下载依赖
cp /home/vagrant/apache-maven-3.9.2/conf/settings.xml ~/.m2


# 配置vscode设置 @ext:redhat.java java.jdt.ls.java.home
"java.jdt.ls.java.home": "/home/vagrant/jdk-17.0.7+7",
"java.autobuild.enabled": false,
"java.configuration.maven.globalSettings": "/home/vagrant/apache-maven-3.9.2/conf/settings.xml"
# 很多跳转到定义的类型会增加很多下滑线,可以去掉: https://github.com/microsoft/vscode/issues/92396
"editor.semanticHighlighting.enabled": false
# 或者使用editor.tokenColorCustomizations进行自定义: https://github.com/Microsoft/vscode/issues/43328
# 去掉提示匹配大小写
"java.completion.matchCase": "off",
# 去掉入参提示
"java.inlayHints.parameterNames.enabled": "none"

# 手动执行,jdk使用8的
export JAVA_HOME=/home/vagrant/jdk8u372-b07
export PATH=/home/vagrant/apache-maven-3.9.2/bin:$JAVA_HOME/bin/:$PATH

# 运行web-api/模块
mvn spring-boot:run -pl web-api/

# vscode清理语言服务器命令
java.clean.workspace