鸿蒙+Java+MySQL全栈开发实战
·
基于鸿蒙(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):
此代码展示了鸿蒙ArkTS声明式UI的构建、状态管理(// 导入必要的模块 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 }@State)以及通过@ohos.net.http模块进行网络请求的关键流程。
三、关键配置与联调要点
- 网络权限与安全:鸿蒙应用需要在
module.json5配置文件中声明网络权限(ohos.permission.INTERNET)。后端Spring Boot应用如需跨域访问,需配置CORS。 - 真机联调网络:当鸿蒙应用在真机上运行时,
baseUrl中的localhost或127.0.0.1需替换为运行后端服务的电脑在局域网中的实际IP地址。 - 数据交互格式:前后端统一使用JSON作为数据交换格式,确保
Content-Type: application/json。 - 进阶特性:在实际项目中,后端应考虑添加JWT认证、API文档(如Swagger)、更完善的错误处理与日志;前端需处理更复杂的UI状态、路由导航及本地数据缓存。
参考来源
- 4年多了,为何还有人说华为鸿蒙系统,是安卓套壳?_鸿蒙系统忽悠了多少人
- 鸿蒙系统的崛起之路:开发者如何抓住机遇,迎接挑战?✨
- 什么是全栈?
- 鸿蒙全栈开发实战:ArkTS + Python + MySQL 8.0 构建智能家教应用
- 新手必备!2024年 Web 全栈开发路线图
更多推荐





所有评论(0)