基于鸿蒙(ArkTS)、Java、MySQL的全栈开发,其核心在于利用ArkTS构建鸿蒙原生应用前端,使用Java开发后端服务,并通过MySQL进行数据持久化。
一、技术栈与职责划分
| 前端 (鸿蒙应用) | ArkTS (基于TypeScript) | 构建鸿蒙原生应用的UI界面与交互逻辑,利用声明式UI开发范式。 |
| 后端 (服务端) | Java (Spring Boot) | 提供RESTful API,处理业务逻辑,连接数据库,是应用的核心服务层。 |
| 数据库 | MySQL 8.0+ | 负责数据的结构化存储、查询与管理,是应用的数据持久化层。 |
| 辅助工具 | DevEco Studio, IntelliJ IDEA, Git | 分别为鸿蒙前端、Java后端开发IDE及版本控制工具。 |
二、核心开发流程与代码示例
1. 数据库设计 (MySQL)
首先,在MySQL中创建数据库和表。例如,为一个简单的“任务”应用设计表结构:
— 创建数据库
CREATE DATABASE IF NOT EXISTS harmony_app DEFAULT CHARACTER SET utf8mb4;
USE harmony_app;
— 创建任务表
CREATE TABLE task (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL COMMENT '任务标题',
description TEXT COMMENT '任务描述',
completed BOOLEAN DEFAULT FALSE COMMENT '是否完成',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB COMMENT='任务表';
— 为查询字段创建索引以优化性能
CREATE INDEX idx_task_completed ON task(completed);
此设计包含了基础字段、注释及索引优化。
2. 后端开发 (Java Spring Boot)
使用Spring Boot快速搭建RESTful API服务。
-
项目依赖 (pom.xml 关键部分):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies> -
实体类 (Entity):
import jakarta.persistence.*;
import java.time.LocalDateTime;@Entity @Table(name = "task")
public class Task {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String description;
private Boolean completed = false;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
// 省略 Getter、Setter 以及 @PrePersist, @PreUpdate 注解方法(用于自动设置时间) } ```
-
数据访问层 (Repository):
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;public interface TaskRepository extends JpaRepository<Task, Integer> {
List<Task> findByCompleted(Boolean completed);
} -
业务控制层 (Controller):
import org.springframework.web.bind.annotation.*;
import java.util.List;@RestController
@RequestMapping("/api/tasks")
public class TaskController {
@Autowired
private TaskRepository taskRepository;@GetMapping public List<Task> getAllTasks(@RequestParam(required = false) Boolean completed) {
if (completed != null) {
return taskRepository.findByCompleted(completed);
}
return taskRepository.findAll();
}@PostMapping public Task createTask(@RequestBody Task task) {
// 在实际项目中,应对传入的task对象进行校验
return taskRepository.save(task);
}
// 其他接口:GET /{id}, PUT /{id}, DELETE /{id} 等 }此部分构建了基础的CRUD API,并通过JPA简化了数据库操作。
-
应用配置 (application.properties):
spring.datasource.url=jdbc:mysql://localhost:3306/harmony_app?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=your_username
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true ```
3. 前端开发 (鸿蒙 ArkTS)
在DevEco Studio中,使用ArkTS开发界面并调用后端API。
- 页面UI与数据模型 (TaskList.ets): // 导入必要的模块 import http from '@ohos.net.http';
import promptAction from '@ohos.promptAction';@Entry @Component struct TaskList {
// 定义任务数据数组
@State taskList: Array<Task> = []
// 定义后端API基础地址(注意:真机调试需配置网络权限并使用实际IP)
private baseUrl: string = 'http://your_backend_ip:8080/api/tasks'// 构建UI build() {
Column({ space: 10 }) {
// 1. 标题
Text('任务列表')
.fontSize(30)
.fontWeight(FontWeight.Bold)// 2. 列表展示
List({ space: 5 }) {
ForEach(this.taskList, (item: Task) => {
ListItem() {
Row({ space: 10 }) {
// 任务完成状态复选框 Checkbox({ name: 'completed', group: 'taskGroup' })
.select(item.completed)
.onChange((value: boolean) => {
this.updateTaskStatus(item.id, value)
})
// 任务标题和描述 Column({ space: 5 }) {
Text(item.title).fontSize(18)
Text(item.description).fontSize(14).fontColor(Color.Gray)
}
}
.padding(10)
.width('100%')
.justifyContent(FlexAlign.Start)
}
})
}
.layoutWeight(1) // 列表占满剩余空间
.width('100%')// 3. “添加任务”按钮
Button('添加新任务')
.onClick(() => {
// 跳转到添加任务页面或弹出对话框
promptAction.showToast({ message: '功能待实现' })
})
.width('90%')
}
.padding(20)
.width('100%')
.height('100%')
.onAppear(() => {
// 页面显示时加载数据
this.loadTasks()
})
}// 加载任务列表的方法 async loadTasks() {
let httpRequest = http.createHttp()
try {
let response = await httpRequest.request(this.baseUrl, {
method: http.RequestMethod.GET,
header: { 'Content-Type': 'application/json' }
})
if (response.responseCode === 200) {
this.taskList = JSON.parse(response.result as string)
} else {
promptAction.showToast({ message: `加载失败: ${response.responseCode}` })
}
} catch (err) {
promptAction.showToast({ message: `网络请求异常: ${err.message}` })
} finally {
httpRequest.destroy()
}
}// 更新任务状态的方法 async updateTaskStatus(taskId: number, completed: boolean) {
let httpRequest = http.createHttp()
try {
let response = await httpRequest.request(`${this.baseUrl}/${taskId}`, {
method: http.RequestMethod.PUT,
header: { 'Content-Type': 'application/json' },
extraData: JSON.stringify({ completed: completed })
})
if (response.responseCode === 200) {
promptAction.showToast({ message: '更新成功' })
this.loadTasks() // 刷新列表 }
} catch (err) {
promptAction.showToast({ message: `更新失败: ${err.message}` })
} finally {
httpRequest.destroy()
}
}
}// 任务数据模型
class Task {
id: number = 0
title: string = ''
description: string = ''
completed: boolean = false }
此代码展示了鸿蒙ArkTS声明式UI的构建、状态管理(@State)以及通过@ohos.net.http模块进行网络请求的关键流程。
三、关键配置与联调要点
参考来源
- 4年多了,为何还有人说华为鸿蒙系统,是安卓套壳?_鸿蒙系统忽悠了多少人
- 鸿蒙系统的崛起之路:开发者如何抓住机遇,迎接挑战?✨
- 什么是全栈?
- 鸿蒙全栈开发实战:ArkTS + Python + MySQL 8.0 构建智能家教应用
- 新手必备!2024年 Web 全栈开发路线图
