JavaAPI开发⼊门指引
Java开发与前端开发极其类似,Java的通⽤构建⼯具maven对应前端npm;依赖管理l对应package.json;当然也有脚⼿架等等。
Web接⼝操作数据库⼤致经历如下步骤:
graph TB Web--http-->Controller Controller-->Service Service-->DAO Repository-.->DAO Repository--driver--
>DB[(DataBase)]
Controller定义接⼝格式,参数校验
Service做复杂的业务逻辑编写
DAO(Data Aceess Object)数据持久化
Repository是实现操作数据库具体逻辑。
DataBase持久化数据的数据库。
所以要写⼀个接⼝,按如上⽅式编写相应组件即可。在此之前,我们还要再安装Java JDK、构建⼯具maven、数据
库mySql,以及弄⼀个脚⼿架。
1 JDK安装
略
2 MySQL安装
这⾥采⽤Docker镜像的⽅式在服务器上安装MySQL。利⽤容器技术提供的⾮常便捷的装卸操作,快速安装程序。
进⼊前端服务器
ssh root@192.168.**.**
password:******
搜索并下载mysql镜像
#搜
docker search mysql
#下载
dokcer pull mysql
#查下载结果
docker images
#运⾏映射将容器的3306端⼝程序映射到服务器的3306端⼝上,初始化密码
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=****** mysql
#查容器
docker ps -a
#进容器验证安装结果
docker exec -it mysql bash
#创建mysql数据库
mysql -h 127.0.0.1 -u root -p
CREATE DATABASE XX;
use XX;
3 安装maven
3.1 安装
官⽹下载
官⽹下载太慢,我是的⽹盘资源。
链接:pan.baidu/s/1vTzkQEoUKEui0szjeVba3g
提取码:tb80
解压到D盘即可。
3.2 配置环境变量
打开“此电脑”的“属性”,在系统环境变量⾥添加MAVEN_HOME、追加path环境变量。
参考wwwblogs/pengpengdeyuan/p/14217772.html
MAVEN_HOME
D:\apache-maven-3.6.3
Path
%MAVEN_HOME%\bin
结束后⽤命令mvn -version测试是否安装成功。
3.3 配置仓库路径
设置本地依赖仓库路径。默认是c盘,改到D盘。mvn管理依赖是有中央库和本地库概念,类似于npm源与node_modules⼀样。
打开D:\apache-maven-3.6.3\conf的l
修改localRepository标记
<localRepository>D:\Repository</localRepository>
4 下载脚⼿架
弄⼀个脚⼿架。
左侧命名随意,我是java17,所以勾选该依赖,其它都是默认。
右侧添加三个依赖。第⼀个依赖含接⼝开发的各类注解,第⼆个对接数据库的抽象函数包,第三个是数据库驱动依赖。
# 使⽤@Controler等各类注解
Spring Web
# 抽象了很多数据库curd操作函数,免写sql代码
Spring Data JPA
# MySQL依赖包,缺它⽆法对接该数据库
MySQL Driver
Generate下载,得到demo压缩包。
⽤VSCode打开解压后的代码,l为根⽬录,DemoApplication为程序⼊⼝⽂件。
5 开发接⼝
DemoApplication同级创建三个⽬录:controller、service、dao。本例⼦编写创建设备、查设备列表两个接⼝,演⽰接⼝开发过程。
5.1 添加数据库配置
到resources⽬录下的application.properties,写⼊配置。
# 连接MySQL配置
spring.datasource.url=jdbc:mysql://192.168.**.**:3306/XX
spring.datasource.username=root
spring.datasource.password=*****
spring.datasource.sql.jdbc.Driver
# ⾃动同步Object对象到数据库表中,这个配置可以定义Entry类,⾃动去数据库建表
spring.jpa.hibernate.ddl-auto=update
# 控制台打印sql语句
spring.jpa.show-sql=true
5.2 创建DTO实体对象
DTO:data to object,对应数据库表的字段。只要声明变量,可利⽤IDE⾃动⽣成getter、setter。
ample.demo.dao;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
mysql的jar包下载
import javax.persistence.Id;
import javax.persistence.Table;
@Entity /* 标注为DTO实体 */
@Table(name = "T_DEVICE") /* 与数据库对应的表建⽴联系 */
public class Device {
public Device() {
}
@Id /* 标注为primary key */
@GeneratedValue /* ⾃动⽣成,可配置内置的⽣成策略,也可以引⽤⾃定义⽣成策略 */
private Integer id;
private String name;
private String model;
/* getter setter 略 */
}
5.3 创建Repository
这个对象集成JPA,内置了数据库基本操作函数,简单的增删改查完全可以不⽤写任何代码,编译阶段框架会扫描JPA,然后会⾃动补齐操作数据库的细节。
开发者只需要定义接⼝,定义函数即可。
import org.springframework.stereotype.Repository;
@Repository()
public interface DeviceRepository extends JpaRepository<Device, Long>{
List<Device> findAll(); /* 该函数可以不⽤声明,JpaRepository已有*/
}
5.4 Service调⽤数据库
ample.demo.service;
import java.util.List;
ample.demo.dao.Device;
ample.demo.dao.DeviceRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service /* 添加注解,框架编译时会扫描该注解,⾃动装配依赖 */
public class DeviceService {
@Autowired /* 注意,如果没标注@Service|@Component该声明会装配不上实例 */
DeviceRepository deviceRepository;
public List<Device> getDevices() {
return deviceRepository.findAll();
}
public void createDevice(Device device) {
deviceRepository.save(device); /* 简单的增删改查已在JPA声明 */
}
}
5.5 Controller定义接⼝
ller;
import java.util.List;
ample.demo.dao.Device;
ample.demo.service.DeviceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController() /* 标注组件类型,编译阶段⾃动装配依赖的实例 */
@RequestMapping("xx") /* 接⼝前缀 */
public class DeviceController {
@Autowired
DeviceService deviceService;
/* GET请求, /xx/devices路径查所有设备*/
@RequestMapping(value = "devices", method = RequestMethod.GET)
public List<Device> getDevices() {
Devices();
}
/* POST请求, /xx/device路径创建设备 */
@RequestMapping(value = "device", method = RequestMethod.POST)
public ResponseEntity<Device> postDevice(@RequestBody Device device) {
return ResponseEntity.ok(device);
}
}
运⾏DemoApplication.main启动程序,默认端⼝8080。
6 制作镜像
java镜像有多种制作⽅式,⽐如利⽤maven-docker插件,或者利⽤tomcat为基础镜像等。
这⾥使⽤最原始的运⾏jar⽅式制作⼀个镜像包。
原理:java -jar xxx.jar可以执⾏jar⽂件。我们打出jar包,然后将jar命令制作到镜像⾥,创建容器时⾃动执⾏该命令,也就达到了启动该应⽤程序的⽬的。
6.1 打jar包
根⽬录命令⾏执⾏打包命令,得到demo 0.0.1-SNAPSHOT.jar
mvn package
进⼊target⽬录,本地命令⾏执⾏
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8080
访问8080端⼝,看接⼝是否能正常调⽤。
6.2 jar上传到服务器上
传到home⽬录下
scp ./demo-0.0.1-SNAPSHOT.jar root@192.168.**.**:/home
6.3 创建Dockerfile⽂件
制作镜像需要依赖该⽂件,我们的⽂件内只需以java JDK为基础镜像,jar拷贝进镜像⾥就可以运⾏'-jar'了。
我⼯程<java.version>17</java.version>,对应openJDK最新版。
FROM openjdk:latest
ADD demo-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
创建⼀个webapp⽬录,将jar包与Dockerfile⽂件放在⾥⾯,执⾏下列命令,得到镜像
docker build -t javaweb .
查看镜像
docker images
运⾏
docker run -itd --name javaweb -p 8981:8080 javaweb
访问
查
Method:GET
Url:192.168.**.**:8981/xx/devices
增
Method:POST
Url:192.168.**.**:8981/xx/device QueryBody: {name:string, model:string}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论