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