网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
项目简介:采用前后端分离的设计,前端采用Harmony os ArkTs 声明式UI 设计,后端采用Spring-Boot+mongodb(当然感兴趣的也可以试试mysql等其他数据库)
主要能学到什么:
- 对于Harmony os 的新手而言,通过这个项目,能够快速的帮你了解到以下知识点:
- 基础的一些布局以及基础的一些组件使用
- 页面跳转,传递参数
- 网络请求
- 父子组件传值
- 打包安装
- <暂时想不起来了,符号占位先>
- 对于后端的小伙伴们而言
- spring-boot集成mongodb实现数据的增删改查
- mongodb 的一些语句操作
那话不多说,我们马上开始~
后端搭建
数据库设计
- 数据库选择
- 首先数据库的选择方面呢,之前一直用的mysql,这次手头有一个mongodb,想着换换口味,就暂定将mongodb作为后端数据库使用,作为数据的存储。
- 数据结构梳理
- 数据结构方面大概有两种数据需要我们进行存储
- 第一个呢就是题目,作为一个个人的性格测试,当然是要存在题目这一个概念的
- 其次呢就是测评结果对应的说明,这个也是比较重要的
目前想到的也就这两个,不够的话,我们后期再加,或者有其他想法的小伙伴也可以联系我进行一些二次开发🤗🤗
- 数据表设计
- 测试题目表(mbtiTopic)
- | _id | String | mongodb 对应的主键uuid |
| — | — | — |
| name | String | 题干 |
| optionA | String | 选项A |
| optionB | String | 选项B |
| sequence_number | int | 题目序号 |
| valA | String | 选项A所对应的意义 |
| valB | String | 选项B所对应的意义 |
- 结果对照表
- | _id | String | mongodb 对应的主键uuid |
| — | — | — |
| ansCode | String | 性格测试结果字符串 |
| ansDisc | String | 性格测试结果描述 |
| ansName | String | 性格测试结果名称 |
| sequence_number | int | 序号 |
Spring-Boot项目初始化
- 对于后端的搭建,是一个简单的Spring-Boot的项目,首先呢就是初始化一个Spring-Boot项目,经过一步一步的选择,我们便能得到一个什么都没有的Spring-Boot项目
- 不过值得注意的是,如果你的idea在初始化Spring-Boot项目的时候,只能选择java版本为17和21,但是你想使用java8时,请按照如下步骤进行操作
我们只知道IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/
- 创建完成项目之后,需要在pom.xml中进行相关依赖的 引入(按需导入)
后台项目代码编写
任务点分解
那作为一个数据的提供后台,需要完成以下几个功能:
- 对于题目的管理功能(前面想着做一个相关题目的管理界面,就写了这部分接口,但是界面真的不是很想搭建,留给爱学习的小伙伴们或者后面有时间再说)目前没啥用
- 查询题目功能
- 计算性格属性功能
既然目标比较明确了,辣么问题也就好办了起来!
Spring-Boot+mongodb CRUD
以第一点对于题目的管理功能为例子,简单讲述一下Spring-Boot集成mongodb 进行数据的CRUD
- 首先,进行spring-mongo的依赖导入,详情见上文pom.xml的依赖,按需引入即可
- 进行简单的项目目录创建,简单的对于项目目录进行如下梳理
- /conf:存放一些配置文件
- /controller: 存放接口
- /dao:存放对应的实体类
- /service:存放一些service类
- /service/serviceImpl:存放具体的service的逻辑实现类
- /utils:存放通常的工具类
- 进行application.yml的配置
spring:
data:
mongodb:
主机地址
host: 127.0.0.1
数据库
database: MBTI
mongodb端口
port: 27017
main:
allow-circular-references: true
server:
port: 8899
- 题目实体类(Topic)
/***
*性格测试题目类
*/
@Document(“mbtiTopic”) //表名称
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Topic implements Serializable {
@Id //主键
private String id;
@Field
private String name;
@Field
private String optionA;
@Field
private String optionB;
@Indexed(unique = true) //唯一索引
@Field(“sequence_number”)//对应mongo中的字段,如果不对应,需要进行标注
private Integer sequenceNumber;
@Field
private String valA;
@Field
private String valB;
}
- 接口实现
- TopicService
public interface TopicService {
//查找全部
List findAll();
//按照id查询
Topic findById(int sequenceNumber);
//按照id 修改
Topic updateById(Topic topic);
//按照id删除
boolean delById(int sequenceNumber);
//插入
boolean insertOne(Topic topic);
}
- TopicServiceImpl
@Service
public class TopicServiceImpl implements TopicService {
@Autowired
private MongoTemplate mongoTemplate;
//查全部
@Override
public List findAll() {
return mongoTemplate.findAll(Topic.class);
}
//查根据id查询
@Override
public Topic findById(int sequenceNumber) {
Query query = new Query();
query.addCriteria(Criteria.where(“sequence_number”).is(sequenceNumber));
Topic one = mongoTemplate.findOne(query, Topic.class);
return one;
}
//根据id更新
@Override
public Topic updateById(Topic topic) {
Topic save = mongoTemplate.save(topic);
return save;
}
//根据id删除
@Override
public boolean delById(int sequenceNumber) {
Query query = new Query();
query.addCriteria(Criteria.where(“sequence_number”).is(sequenceNumber));
DeleteResult remove = mongoTemplate.remove(query, Topic.class);
if (remove.getDeletedCount() > 0) {
return true;
}
return false;
}
//插入
@Override
public boolean insertOne(Topic topic) {
Topic save = mongoTemplate.save(topic);
if (save != null) {
return true;
}
return false;
}
}
- controller
@RestController
@CrossOrigin
@RequestMapping(“/manage”)
public class manageController {
@Autowired
private TopicService topicService;
JSONObject jsonObject = new JSONObject();
//查询全部
@GetMapping(“/getAll”)
public JSONObject getAll() {
jsonObject.clear();
jsonObject.put(“status”, 200);
jsonObject.put(“data”, topicService.findAll());
return jsonObject;
}
//按照id查询
@GetMapping(“/getById/{id}”)
public JSONObject findById(@PathVariable(“id”) int id) {
jsonObject.clear();
Topic one = topicService.findById(id);
if (one != null) {
jsonObject.put(“status”, 200);
jsonObject.put(“data”, one);
} else {
jsonObject.put(“status”, 200);
jsonObject.put(“data”, null);
}
return jsonObject;
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
天花板技术停滞不前!**
[外链图片转存中…(img-glKdATJS-1715721320344)]
[外链图片转存中…(img-1tKaxWAu-1715721320344)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新