手机软件下载网站wap模板,网站开发后端框架,可以找题目做的网站,vpsputty做网站个人团队的比赛项目#xff0c;仅供学习交流使用 一、项目基本介绍
1. 项目简介
一款基于微信小程序的轻量化笔记工具#xff0c;旨在帮助用户通过记录每日心情和事件#xff0c;更好地管理情绪和生活。用户可以根据日期和心情分类#xff08;如开心、平静、难过等#… 个人团队的比赛项目仅供学习交流使用 一、项目基本介绍
1. 项目简介
一款基于微信小程序的轻量化笔记工具旨在帮助用户通过记录每日心情和事件更好地管理情绪和生活。用户可以根据日期和心情分类如开心、平静、难过等记录笔记并随时查看历史记录。同时项目还包含一个后台运营端小程序用于数据统计、用户行为分析、用户反馈收集与回复为运营决策提供支持。代码已上传至GitHub
2. 技术栈
微信小程序原生开发JS、WXML、WXSS、SpringBoot、MySQL、RESTful API、Postman接口测试、Axure
3. 项目功能
1用户端
微信授权登录 主界面该功能模块主要包括显示日历、显示笔记、删除单条笔记。 显示日历日历供用户选择查看日期当日总体心情为日期小角标用户点击日期即可在页面下方显示该日笔记。 显示笔记底部笔记栏呈现所选日按修改时间进行排序的笔记默认为当日若无笔记出现今日还未写笔记噢!提示。 删除单条笔记右滑笔记出现删除按钮并弹出提示框。
个人中心该功能模块主要包括反馈、分享、我的信箱与退出登录。 反馈用户在反馈渠道提出意见。 分享将小程序转发给微信好友。 我的信箱管理员向用户下发通知用户在我的信箱查看 退出登录退出登录后再次登录需要再次授权。 笔记记录该功能模块主要功能包括心情选择和写笔记。 心情选择用户可在心情图案列表中选择本条笔记记录时的心情若本条笔记为当日第二条及以上自动弹出当日总体心情选择界面在日历上方可以改变总体心情若没有选择总体心情则会出现今日还未选择总体心情哦提示。 写/修改笔记用户可自由进行笔记记录或修改笔记内容及此条笔记心情。
2开发者端
微信授权与密钥登陆 官方通知发布官方通知下发到每一个用户 反馈回执针对不同用户的返回发送回执 二、项目代码分析
1. 项目代码架构
前端小程序项目结构以用户端为例 后端Java项目结构 2.前端代码分析以用户端主页面为例
main.js
const util require(../../utils/util.js)
var app getApp()
Page({data: {avatarUrl: /images/头像.png,nickName: 未登录,date: null,daymood: 今日还未选心情,moodList: new Array(),noteList: new Array(),noteisHave: false,year: 0,month: 0,head: [日, 一, 二, 三, 四, 五, 六],dateArr: [],isToday: 0,pickToday: 0,isTodayWeek: false,todayIndex: 0,nottoday: false,havenote:今日还未写笔记哦},onShow() {let date new Date();let now new Date();let year now.getFullYear();let month now.getMonth() 1;console.log(0)this.dateInit();this.setData({year: year,month: month,isToday: year - month - now.getDate(),avatarUrl: app.globalData.avatarUrl,nickName: app.globalData.nickName,date: util.formatDate(date)})console.log(3)this.daymoodinit(util.formatYearDate(now)[0]);console.log(5)this.noteinit(util.formatYearDate(now)[0]);},noteinit(date) {var that this//请求获取笔记列表wx.request({url: app.globalData.url /getNoteList,data: {uid: wx.getStorageSync(uid),date: date},header: {content-type: application/json},success(res) {console.log(6)//获取后端传入的笔记列表var notelist res.data.noteList//如果笔记列表不为空if (notelist) {//创建微信小程序存储数组值的变量var noteList new Array();//创建构造函数notefunction Note(nid, context, time, mood) {this.nid nid;this.context context;this.time time;this.mood mood;}//遍历后端传来的值将其加到我的数据中for (var i 0; i notelist.length; i) {//对心情处理notelist[i].mood /images/ notelist[i].mood .png;//赋值var note new Note(notelist[i].nid, notelist[i].context..., notelist[i].time, notelist[i].mood)noteList[i] note}//设置值that.setData({//笔记列表noteList: noteList,noteisHave: true})}}})},daymoodinit(date) {var that thiswx.request({//获取某日的总体心情url: app.globalData.url /gDateMood,data: {uid: wx.getStorageSync(uid),date: date},header: {content-type: application/json},success(res) {console.log(4)if (res.data.daymood) {if (date util.formatYearDate(new Date())) {that.setData({daymood: 今日心情 res.data.daymood})} else {that.setData({daymood: 该日心情 res.data.daymood})}} else {if (date util.formatYearDate(new Date())) {that.setData({daymood: 今日还未选心情})} else {that.setData({daymood: 该日未记录心情})}}}//为测试所用,正式直接删掉// fail() {// that.setData({// daymood: 今日心情开心// })// }})},backnow() {var date {date: util.formatYearDate(new Date()).toString()}this.date(date)//自动展示为当前月份的日历页面this.dateInit()this.setData({nottoday: false})},date(e) {//判断是从组件传的值即点击日期还是从函数传的值即点击回到今日if (e.date) {var date e.date} else {var date e.currentTarget.dataset.date}//转换日期var dates date.split(-)var month dates[1]var day dates[2]var thisdate month 月 day 日if(date util.formatYearDate(new Date())){this.setData({noteisHave: false,pickToday: date,date: thisdate,nottoday: false,havenote:今日还未写笔记哦})}else{this.setData({noteisHave: false,pickToday: date,date: thisdate,nottoday: true,havenote:该日还未写笔记哦})}//修改页面总体心情this.daymoodinit(date)//向后端请求日期下的笔记列表this.noteinit(date)},add() {wx.navigateTo({url: /pages/notemood/notemood})},daymood() {wx.showModal({title: 只能修改今日总体心情,content: 确认要修改吗,success(res) {if (res.confirm) {wx.navigateTo({url: /pages/daymood/daymood})}}})},mine() {wx.navigateTo({url: /pages/mine/mine,})},changenote(e) {//需向后端传入标识表示是第一次进入修改笔记页面目的为保证渲染层的正确var note e.currentTarget.dataset.notevar nid note.nidvar time note.timevar mood note.moodwx.redirectTo({url: /pages/note/note?mood mood nid nid time time flag1,})},dateInit: function (setYear, setMonth) {//全部时间的月份都是按0~11基准显示月份才1let dateArr []; //需要遍历的日历数组数据let arrLen 0; //dateArr的数组长度let now setYear ? new Date(setYear, setMonth) : new Date();let year setYear || now.getFullYear();let nextYear 0;let month setMonth || now.getMonth(); //没有1方便后面计算当月总天数let nextMonth (month 1) 11 ? 1 : (month 1);let startWeek new Date(year , (month 1) , 1).getDay(); //目标月1号对应的星期let dayNums new Date(year, nextMonth, 0).getDate(); //获取目标月有多少天let obj {};let num 0;if (month 1 11) {nextYear year 1;dayNums new Date(nextYear, nextMonth, 0).getDate();}var that thisconsole.log(1)//得到当月心情表从后端wx.request({url: app.globalData.url /selectAllMood,data: {uid: wx.getStorageSync(uid),year: year,month: month 1},header: {content-type: application/json},success(res) {console.log(2)if (!res.data) {wx.showToast({title: 日期超出可用范围咯,icon: none,duration: 2000 //持续的时间})} else {that.setData({moodList: res.data.moodList,year: year,month: month 1})arrLen startWeek dayNums;for (let i 0; i arrLen; i) {if (i startWeek) {num i - startWeek 1;obj {isToday: year - (month 1) - num,dateNum: num,weight: 5,mood: /images/ that.data.moodList[num - 1] 色.png}} else {obj {};}dateArr[i] obj;}that.setData({dateArr: dateArr})let nowDate new Date();let nowYear nowDate.getFullYear();let nowMonth nowDate.getMonth() 1;let nowWeek nowDate.getDay();let getYear setYear || nowYear;let getMonth setMonth 0 ? (setMonth 1) : nowMonth;if (nowYear getYear nowMonth getMonth) {that.setData({isTodayWeek: true,todayIndex: nowWeek})} else {that.setData({isTodayWeek: false,todayIndex: -1})}}}//为测试所用正式直接删掉// fail() {// arrLen startWeek dayNums;// for (let i 0; i arrLen; i) {// if (i startWeek) {// num i - startWeek 1;// obj {// isToday: year - (month 1) - num,// dateNum: num,// weight: 5,// mood: /images/ that.data.moodList[num - 1] 色.png// }// } else {// obj {};// }// dateArr[i] obj;// }// that.setData({// dateArr: dateArr// })// let nowDate new Date();// let nowYear nowDate.getFullYear();// let nowMonth nowDate.getMonth() 1;// let nowWeek nowDate.getDay();// let getYear setYear || nowYear;// let getMonth setMonth 0 ? (setMonth 1) : nowMonth;// if (nowYear getYear nowMonth getMonth) {// that.setData({// isTodayWeek: true,// todayIndex: nowWeek// })// } else {// that.setData({// isTodayWeek: false,// todayIndex: -1// })// }// }})},lastMonth: function () {//全部时间的月份都是按0~11基准显示月份才1let year this.data.month - 2 0 ? this.data.year - 1 : this.data.year;let month this.data.month - 2 0 ? 11 : this.data.month - 2;this.dateInit(year, month);},nextMonth: function () {//全部时间的月份都是按0~11基准显示月份才1let year this.data.month 11 ? this.data.year 1 : this.data.year;let month this.data.month 11 ? 0 : this.data.month;this.dateInit(year, month);},/*** 设置movable-view位移*/setXmove: function (productIndex, xmove) {let noteList this.data.noteListnoteList[productIndex].xmove xmovethis.setData({noteList: noteList})},/*** 处理movable-view移动事件*/handleMovableChange: function (e) {if (e.detail.source friction) {if (e.detail.x -30) {this.showDeleteButton(e)} else {this.hideDeleteButton(e)}} else if (e.detail.source out-of-bounds e.detail.x 0) {this.hideDeleteButton(e)}},/*** 显示删除按钮*/showDeleteButton: function (e) {let productIndex e.currentTarget.dataset.productindexthis.setXmove(productIndex, -65)},/*** 隐藏删除按钮*/hideDeleteButton: function (e) {let productIndex e.currentTarget.dataset.productindexthis.setXmove(productIndex, 0)},/*** 处理touchstart事件*/handleTouchStart(e) {this.startX e.touches[0].pageX},/*** 处理touchend事件*/handleTouchEnd(e) {if (e.changedTouches[0].pageX this.startX e.changedTouches[0].pageX - this.startX -30) {this.showDeleteButton(e)} else if (e.changedTouches[0].pageX this.startX e.changedTouches[0].pageX - this.startX 30) {this.showDeleteButton(e)} else {this.hideDeleteButton(e)}},/*** 删除产品*/handleDeleteProduct: function ({currentTarget: {dataset: {nid}}}) {var that thiswx.showModal({title: 删除该条笔记,content: 确认要删除吗,success(res) {if (res.confirm) {wx.request({//传入nid请求删除url: app.globalData.url /deleteNote,data: {nid: nid},header: {content-type: application/json},success() {let noteList that.data.noteListlet productIndex noteList.findIndex(item item.nid nid)noteList.splice(productIndex, 1)that.setData({noteList})if (noteList[productIndex]) {that.setXmove(productIndex, 0)}if(!that.data.noteList[0]){that.setData({noteisHave: false,})}},fail() {wx.showToast({title: 删除失败,icon: none,duration: 2000 //持续的时间})}})}}})},
})data是初始化
onshow是登录后要展示的要对当日心情进行初始化要对当日笔记进行初始化
noteinit要根据用户的uid和date访问后端app.globalData.url这个是后端服务器地址获取到笔记信息后渲染到页面上也就是重设data里面的值
daymoodinit也是一样
backnow是什么里面要对当月的日历进行展示还要在日历上展示当日的总体心情角标
里面要dateInit也是从后端获取数据
后续的方法也是点击主页上的一个按钮需要进行的操作有点到某一日、修改总体心情、修改笔记等比如修改笔记就用wx.redirectTo进行了页面跳转需要页面间传递的数据也要在跳转的时候传递比如修改总体心情使用的则是navigateTo这是为啥还有showModal就是在上层创建新窗口吗比如date就是点击某一日获得该日的笔记信息和总体心情于是要noteinit和daymoodinit后续还有滑动删除笔记事件
数据初始化data
在data中我们定义了页面初始化时需要使用的各种变量。这些变量包括用户的头像、昵称、日期、心情、笔记列表等。这些数据将在页面加载时被初始化并在用户与页面交互时动态更新。
avatarUrl用户的头像URL默认值为/images/头像.png。nickName用户的昵称默认值为未登录。date当前日期初始值为null。daymood当日的心情状态默认值为今日还未选心情。moodList心情列表用于存储用户在不同日期的总体心情。noteList笔记列表用于存储用户在不同日期的笔记内容。noteisHave标识当前日期是否有笔记初始值为false。year和month当前年份和月份用于日历展示。head日历表头的星期几标识。dateArr日历数组用于展示当前月份的日期和心情角标。isToday标识当前日期是否为今天。pickToday用户选择的日期。isTodayWeek标识当前日期是否在本周。todayIndex今天在日历中的索引。nottoday标识用户选择的日期是否为今天。havenote提示用户当前日期是否有笔记。
页面展示逻辑onShow
onShow是微信小程序的生命周期函数当页面显示时触发。在这个函数中我们主要做了以下几件事
获取当前日期通过new Date()获取当前日期并提取年份和月份。初始化日历调用dateInit函数初始化当前月份的日历数据。设置页面数据将当前日期、用户头像、昵称等信息设置到页面的data中。初始化当日心情和笔记调用daymoodinit和noteinit函数分别获取并展示当日的心情和笔记。
笔记初始化noteinit
noteinit函数用于根据用户的uid和date从后端获取笔记列表并将获取到的笔记数据渲染到页面上。
请求笔记列表通过wx.request向后端发送请求获取指定日期的笔记列表。处理笔记数据如果笔记列表不为空遍历列表并将每条笔记的数据存储到noteList中。更新页面数据将处理后的笔记列表设置到页面的data中并更新noteisHave状态。
当日心情初始化daymoodinit
daymoodinit函数用于获取并展示用户当日的总体心情。
请求当日心情通过wx.request向后端发送请求获取指定日期的总体心情。更新页面数据根据获取到的心情数据更新页面中的daymood状态。
返回今日backnow
backnow函数用于将页面重置为当前日期的状态。
重置日期将页面日期重置为当前日期。初始化日历调用dateInit函数重新初始化当前月份的日历数据。更新页面数据将nottoday状态设置为false表示当前日期为今天。
选择日期date
date函数用于处理用户选择日期的操作。
获取选择的日期根据用户点击的日期或从函数传入的日期获取用户选择的日期。更新页面数据将选择的日期设置到页面的data中并更新noteisHave和nottoday状态。初始化心情和笔记调用daymoodinit和noteinit函数获取并展示选择日期的心情和笔记。
添加笔记add
add函数用于跳转到添加笔记页面。
页面跳转使用wx.navigateTo跳转到/pages/notemood/notemood页面。
修改总体心情daymood
daymood函数用于处理用户修改总体心情的操作。
弹出确认框使用wx.showModal弹出确认框询问用户是否确认修改总体心情。页面跳转如果用户确认使用wx.navigateTo跳转到/pages/daymood/daymood页面。
个人中心mine
mine函数用于跳转到个人中心页面。
页面跳转使用wx.navigateTo跳转到/pages/mine/mine页面。
修改笔记changenote
changenote函数用于处理用户修改笔记的操作。
获取笔记信息从用户点击的笔记中获取笔记的nid、time和mood信息。页面跳转使用wx.redirectTo跳转到/pages/note/note页面并传递笔记的相关信息。
日历初始化dateInit
dateInit函数用于初始化当前月份的日历数据。
获取当前月份的天数和起始星期通过new Date()获取当前月份的天数和1号对应的星期。请求当月心情数据通过wx.request向后端发送请求获取当前月份的心情数据。更新页面数据将获取到的心情数据设置到页面的data中并生成日历数组dateArr。
滑动删除笔记
滑动删除笔记功能通过handleMovableChange、handleTouchStart、handleTouchEnd等函数实现。
显示删除按钮当用户向左滑动笔记时显示删除按钮。隐藏删除按钮当用户向右滑动或滑动距离不足时隐藏删除按钮。删除笔记当用户点击删除按钮时弹出确认框确认后通过wx.request向后端发送删除请求并更新页面数据。
main.wxml
view classdataview classcircle bindtapmineimage src{{avatarUrl}} classhead/image/viewview classdate-moodtext classdate{{date}}/texttext classmood bindtapdaymood{{daymood}}/text/viewview classbacknowimage src/images/今日.png classbacknowimg bindtapbacknow wx:if{{nottoday}}/image
/viewimage src/images/添加.png classadd bindtapadd/image
/view
view classcalendarview classwrapviewview classdate-showview classlt-arrow bindtaplastMonthimage src/images/左箭头.png modeaspectFit/image/view{{year}}年{{month}}月view classrt-arrow bindtapnextMonthimage src/images/右箭头.png modeaspectFit/image/view/view/viewview classheaderview wx:for{{head}} class{{(index todayIndex) isTodayWeek ? weekMark : }}{{item}}view/view/view/viewview classdate-boxview wx:for{{dateArr}}class{{isToday item.isToday ? nowDay : (pickToday item.isToday ? pickDay : )}}data-date{{item.isToday}} bindtapdateview classsortview classminimoodviewimage src{{item.mood}} classminimood/image/viewview classdate-headview{{item.dateNum}}/view/view/view/view/view/view
/view
view classnonote wx:if{{!noteisHave}}image src/images/铃铛.png classbell/imageview classempty{{havenote}}/view
/view
view wx:elseview classproduct-listview classproduct-item wx:for{{noteList}} wx:for-indexindex wx:key{{item.nid}}movable-area data-note{{item}} bindtapchangenotemovable-view out-of-boundstrue directionhorizontal x{{item.xmove}} inertiatruedata-productIndex{{index}} bindtouchstarthandleTouchStart bindtouchendhandleTouchEndbindchangehandleMovableChangeview classproduct-item-wrapview classexpressionimage src{{item.mood}} classexpressionimg/image/viewview classproduct-movable-itemview classproduct-movable-item-name{{item.time}}/viewview classproduct-movable-item-code{{item.context}}/view/view/viewview classblank/view/movable-view/movable-areaview classdelete-btn data-nid{{item.nid}} bindtaphandleDeleteProductimage src/images/删除.png classdelete/image/view/view/view
/view顶部用户信息与操作区域
用户头像通过image组件展示用户头像点击头像触发mine函数跳转到个人中心页面。日期与心情显示当前日期和当日心情点击心情文本触发daymood函数允许用户修改当日心情。返回今日按钮如果用户选择的日期不是今天显示“返回今日”图标点击触发backnow函数重置为当前日期。添加笔记按钮点击“添加”图标触发add函数跳转到添加笔记页面。
日历区域
日历头部显示当前年份和月份左右箭头分别触发lastMonth和nextMonth函数用于切换月份。星期表头显示星期几当前星期会高亮显示。日期展示展示当前月份的日期每个日期块显示日期数字和对应的心情图标。点击日期块触发date函数加载该日期的笔记和心情。
笔记展示区域
无笔记提示如果当前日期没有笔记显示提示信息如“今日还未写笔记哦”和一个铃铛图标。笔记列表如果有笔记展示笔记列表。每条笔记包含心情图标、时间和内容。笔记支持左右滑动滑动后显示删除按钮。 滑动删除通过movable-view实现滑动功能滑动到一定距离后显示删除按钮点击删除按钮触发handleDeleteProduct函数删除对应笔记。点击笔记点击笔记内容触发changenote函数跳转到修改笔记页面。
3. 后端代码分析
以主页逻辑业务为例
UserDateController.java
package st.nuc.edu.cn.mood_note.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import st.nuc.edu.cn.mood_note.entity.UserDate;
import st.nuc.edu.cn.mood_note.service.UserDateService;RestController
public class UserDateController {AutowiredUserDateService userDateService;RequestMapping(/gDateMood)public Object gDateMood(String uid, String date) {return userDateService.gDateMood(uid, date);}RequestMapping(/mixOperate)public void mixOperate(UserDate userDate) {userDateService.mixOperate(userDate);}RequestMapping(/selectAllMood)public Object selectAllMood(String uid, String year, String month) {return userDateService.selectAllMood(uid, year, month);}}
UserDateController是处理主页相关请求的控制器主要包含以下接口
gDateMood根据用户ID和日期获取某日的总体心情。mixOperate处理用户心情的插入或更新操作。selectAllMood根据用户ID、年份和月份获取该月的所有心情数据。
这些接口通过调用UserDateService中的方法完成具体的业务逻辑。
UserDateServiceImpl.java
package st.nuc.edu.cn.mood_note.service.impl;import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import st.nuc.edu.cn.mood_note.entity.UserDate;
import st.nuc.edu.cn.mood_note.mapper.UserDateMapper;
import st.nuc.edu.cn.mood_note.service.UserDateService;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;Component
public class UserDateServiceImpl implements UserDateService {AutowiredUserDateMapper userDateMapper;Overridepublic Object gDateMood(String uid, String date) {UserDate userDate userDateMapper.gDateMood(uid, date);if (userDate ! null) {JSONObject object new JSONObject();object.put(daymood,userDate.getDateMood());return object;} else {return null;}}Overridepublic boolean mixOperate(UserDate userDate) {UserDate userDate1 userDateMapper.gDateMood(userDate.getUid(), userDate.getDate());if (userDate1 null) {return userDateMapper.insert(userDate);} else {return userDateMapper.update(userDate);}}Overridepublic Object selectAllMood(String uid, String year, String month) {int month1 Integer.parseInt(month);String s null;if ((month10)(month110)) {s 0 month1;} else {s month;}ListUserDate userDateList userDateMapper.gAllDateMood(uid, year, s);if(!userDateList.isEmpty()) {ListString moodList new ArrayList();JSONObject object new JSONObject();for (UserDate userDate : userDateList) {if (userDate.getDateMood() null) {moodList.add(null);} else {moodList.add(userDate.getDateMood());}}object.put(moodList, moodList);return object;}return null;}
}
UserDateServiceImpl是UserDateService接口的实现类主要功能如下
gDateMood通过UserDateMapper查询某日的心情数据如果存在则返回心情信息否则返回null。mixOperate根据用户ID和日期判断是插入新心情数据还是更新已有数据。selectAllMood查询某月的所有心情数据并将其封装为JSON格式返回。如果某日没有心情数据则对应位置为null。
UserDateMapper.java
package st.nuc.edu.cn.mood_note.mapper;import org.apache.ibatis.annotations.*;
import st.nuc.edu.cn.mood_note.entity.UserDate;import java.util.List;Mapper
public interface UserDateMapper {Select(select * from user_date where uid #{uid} and date #{date})UserDate gDateMood(Param(uid)String uid, Param(date)String date);ListUserDate gAllDateMood(Param(uid)String uid, Param(year)String year, Param(month)String month);Insert(insert into user_date (uid,date,date_mood) values (#{uid},#{date},#{dateMood}))boolean insert(UserDate userDate);Update(update user_date set date_mood#{dateMood} where uid #{uid} and date #{date})boolean update(UserDate userDate);}UserDateMapper是MyBatis的Mapper接口定义了与数据库交互的方法
gDateMood根据用户ID和日期查询某日的心情数据。gAllDateMood根据用户ID、年份和月份查询该月的所有心情数据。insert插入新的心情数据。update更新已有的心情数据。
UserDateMapper.xml
?xml version1.0 encodingutf-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacest.nuc.edu.cn.mood_note.mapper.UserDateMapperselect idgAllDateMood resultTypeuserDateSELECT a.uid,date.date,a.date_mood FROM date LEFT JOIN (SELECT * FROM user_date WHERE uid #{uid}) a ON date.datea.date where date.date LIKE ${year}_${month}%;/select/mapperUserDateMapper.xml是MyBatis的映射文件定义了gAllDateMood方法的SQL查询逻辑。通过左连接查询date表和user_date表获取某月的所有心情数据。
application.yaml
mybatis:type-aliases-package: st.nuc.edu.cn.mood_note.entitymapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImplspring:datasource:url: jdbc:mysql://localhost:3306/mood_note?useUnicodetruecharacterEncodingutf8useSSLfalseusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverserver:port:8080application.yaml是Spring Boot的配置文件主要配置了
MyBatis指定实体类包路径、Mapper文件路径、日志实现等。数据源配置MySQL数据库的连接信息包括URL、用户名、密码等。服务器端口设置服务端口为8080。
三、数据库设计
1. 表结构 1.用户表用户
uid用户ID主键类型为varchar(50)。opend用户开放ID类型为varchar(255)。
2.用户日期表用户日期
uid用户ID外键关联用户表类型为varchar(50)。date日期外键关联日期表类型为date。date_mod用户在该日期的总体心情类型为varchar(10)。
3.登记表登记
uid用户ID主键类型为int。uid用户ID外键关联用户表类型为varchar(50)。date日期外键关联日期表类型为date。ncontext笔记内容类型为varchar(8000)。ntine笔记时间类型为time。mod笔记心情类型为varchar(5)。
4.反馈表反馈
fid反馈ID主键类型为int。uid用户ID外键关联用户表类型为varchar(50)。context反馈内容类型为varchar(500)。lz_read是否已读类型为varchar(10)。rcontext回复内容类型为varchar(500)。rdate回复日期类型为date。date反馈日期外键关联日期表类型为date。
5.日期表日期
date日期主键类型为date。
6.管理员表管理员
aid管理员ID主键类型为int。opend管理员开放ID类型为varchar(255)。password管理员密码类型为varchar(255)。
7.官方通知表官方通知
aid管理员ID主键类型为int。date通知日期类型为date。context通知内容类型为varchar(500)。lz_read是否已读类型为varchar(10)。