现在用一天时间可以全部想起来,趁还记得住写一下,免得以后忘记。
八股文
新建项目
安装1.8版本的JDK,保证和服务器的祖传版本一样。
使用IDEA中的 Spring Iitialzr,使用Lombok、Spring Web、Spring Data JPA、JDBC、MySQL Driver,我也不知道,反正多钩点肯定没错。
前期准备
进去后Ctrl+Alt+S设置代理
如果是2021以下的祖传IDEA版本,需要在Plugins 内下载lombok插件,不然自动生成的getter和setter会出现Cannot resolve method问题。
数据库设置
在src/main/recources下的application.properties内,设置数据库和端口相关内容。
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/chatroom?useLegacyDatetimeCode=false&serverTimezone=America/New_York
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=false
server.port=8081
回忆
文件夹常识
在Springboot中,一般建立四个文件夹,分别是Controller、Model、Repository和Payload。
Model
Model是数据库内的各个table,把相关数据变成Java内数据类型的Class。
例如,商店需要定义User有在数据库内的int id、str password,而Item有在数据库的int id、str name、float price。
Repository
在这里调用数据库,封装了使用JpaRepository和原始sql语句的各种方法,用于controller调用。
public interface UserRepository extends JpaRepository<User, Integer> { // 最后是表和主键类型
User findById(Integer id);
List<Purchase_history> findByItemIdAndUserId(int itemId, int userId);
@Modifying
@Query("delete from Purchase_history p where p.id = ?1")
void delete(int id);
}
Controller
Controller内是具体路由的行为,通过定义一个函数和路由,调用Repository进行CRUD。
例如,商店需要ItemController添加商品和UserController添加用户。
需要实例化Repository!
@Autowired
private UserRepository userRepository;
@GetMapping("/getuser")
public User getStuedntInfo(@RequestParam("userid") int stuid){ //可以使用payload
User user = userRepository.findById(userid);
return user; //{id:4396;password:6324}
}
Payload
Payload是前端发送的内容在后端的类。
例如,User里有id, intro, username, password。但用户提交表单里只有id和intro。因此Payload如下:
@Getter
@Setter
@NoArgsConstructor
public class UpdateIntroPayload {
private int id;
private String intro;
}
在Controller内如下使用
@PostMapping("/update")
public void updateUserIntro(@RequestBody UpdateInfoPayload userupdate){
User user = userRepository.findById(userupdate.getId ());
user.setIntro(userupdate.getIntro());
userRepository.save(user);
}
动手
首先需要创建实体类
以Record类为例,引入这叫啥?包?模块?
基础框架如下:
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
@Getter
@Setter
@NoArgsConstructor
@Entity
public class Record {}
上面定义了一个由lombok负责创建getter和setter的实体类,里面是空的。
public class Record {
@Id //主键标注
@Column(name = "time_date") //表明是Record表内的id列
@GeneratedValue //可以自动增减吧
private Timestamp timeDate; //这里的变量名需要与下面的findby和数据库内的一样
@Column(name = "name")
private String name;
@Column(name = "message")
private String message;
}
其次需要创建Repository
调用jpa,基础框架如下
package com.dispnt.webapi.repository;
import com.dispnt.webapi.model.Record;
import org.springframework.data.jpa.repository.JpaRepository;
public interface RecordRepository extends JpaRepository<Record, Timestamp> {
Record findByTimeDate(Timestamp TimeDate);
}
上面定义了一个jparepository,后面的Record为上面定义的实体类名,Timestamp为主键类型
最后创建Controller
@RequestMapping("/record")
@CrossOrigin("*")
@RestController
public class RecordController {
@Autowired
private RecordRepository recordRepository;
@GetMapping("/msg")
public Record getMessage(@RequestParam("message") String td){
List<Record> record = recordRepository.findByMessageLike("%"+td+"%");
System.out.println(td);
return record;
}
运行即可。
打包和服务器部署
开发机操作
因为是Gradle项目,使用IDEA右边选项卡内的clean,随后使用jar指令打包jar文件,保存在./build/libs/目录内。
我懒,用Navicat导出了sql和相关创建表的指令。怕我忘记,创建表的指令复制到下面。
CREATE TABLE `record` (
`time_date` datetime NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
服务器端
运行yum install -y java-1.8.0-openjdk-devel.x86_64
安装祖传1.8版本JDK。
基本的导入sql的方法,我怕忘记,所以全部写一遍。
mysql -u root -p
create database record;
use record;
*用上面的指令创建table*;
source *上面导出的sql文件*
使用java -jar api-0.0.1-SNAPSHOT.jar
命令运行,并使用iptables -A INPUT -p tcp --dport 8081 -j ACCEPT
命令打开防火墙。
现在可以通过端口访问服务。