基於spring-boot的社區社交微信小程序,適合做腳手架、二次開發
1 概述
筆者做的一個后端基於spring-boot的社區社交微信小程序,可以作為開發的腳手架,開發速度快,靈活,前后端分離,很適合二次開發。數據主要存儲在MySQL上,筆者封裝了一個MysqlGenerator.java工具類,結合spring jdbc,做數據庫操作很方便。另外提供了一個文檔系統,后端人員產出接口直接寫出markdown文件就行,和前端溝通很方便。
2 詳細
筆者所在的小區有很多居民,我覺得可以提供一個平台給大家,方便進行信息共享、閑置買賣等,也提供一些常用便民工具,例如電話查詢,交通信息查詢,另外一些商家也可以發布自己的服務讓更多人知曉,例如汽車年審,廢品回收,特產,搬家服務等。
筆者做的這個后端,是基於spring-boot的,主要特點如下:
- 方便開發部署,支持一鍵發布,配置好git之后發送一個http請求,就執行一個腳本,自動拉取最新代碼並發布,腳本都在工程根目錄。
- 自建文檔系統,直接寫markdown文件丟進指定文件夾即可,方便給前端人員查閱(暫未做登錄驗證,請注意保護文檔地址url不泄露)。
- spring jdbc封裝,數據庫操作便捷,會寫sql就能做后端業務,方便修改排查問題,速度快,方便性能調優(工具類MysqlGenerator.java源碼也簡單,可以根據自己業務情況做修改)。
3 配置說明
3-1 環境、物料准備
1.微信小程序賬號
2.騰訊COS平台賬號(我們圖片存在這里,50G免費)
3.Java8,maven 3.5+,Git,MySQL 5.6+,Redis 3.2+
4.微信Web開發者工具(用於調試小程序代碼)-> 微信小程序開發文檔
3-2 工程目錄
4 配置
4-1 賬號配置
4-2 一鍵部署配置
首先要配置好Git,把代碼上傳到你的倉庫,並切換到分支dev,然后請求http接口http://host:port/common/shell/pullrun,會自動運行腳本pullrun.sh,該腳本會拉取最新代碼並重新部署,具體原理請查閱pullrun.sh內容及src/main/java/com/shop/modules/apicommon/controller/CommonController.runScript()方法
5 功能說明
5-1 工具類MysqlGenerator.java的使用
5-1-1 開發前准備
5-1-1-0 建表
在MySQL數據庫中建好表,例如一個cuser表,有id,login_name,nickname字段。
5-1-1-0 編寫2種Java Bean
一種是普通的bean,用於返回結果或其他一般用途,另一種是特殊的bean,用於接收請求參數,配合MysqlGenerator工具類生產sql語句。
特殊bean主要是putter方法特殊,舉例如下
package com.shop.beans.param;
import java.io.Serializable;
import com.shop.beans.basic.MyParams;
public class ParamCUser extends MyParams implements Serializable {
// id,login_name,nickname
private static final long serialVersionUID = 1L;
private int id;
private String login_name;
private String nickname;
//getter
public int getId() {
return id;
}
public String getLogin_name() {
return login_name;
}
public String getNickname() {
return nickname;
}
//setter
public void setId(int id) {
put("id",id);
this.id = id;
}
public void setLogin_name(String login_name) {
put("login_name",login_name);
this.login_name = login_name;
}
public void setNickname(String nickname) {
put("nickname",nickname);
this.nickname = nickname;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", login_name=").append(login_name);
sb.append(", nickname=").append(nickname);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}
這種特殊的bean,可以手寫,也可以使用這個工具,可以根據mysql表直接生成,非常方便,具體請查看開源項目:JavaBeanGenerator
5-1-2 增
有了特殊的bean,從Controller中接收了參數之后,就可以開始開發了,有3種新增的方式,請查閱例子
@Autowired
private UserDao dao;
/**
*
* @param cuser 特殊bean
* @return
*/
public JsonBase addCUser(ParamCUser cuser){
cuser.setCreate_time(DateUtil.getCurrentTimestamp());//特殊bean可以像普通bean那樣set值
cuser.setLast_login_time(DateUtil.getCurrentTimestamp());
// allFieldsInsertSQL,所有字段都會插入
String sql = MysqlGenerator.allFieldsInsertSQL(cuser, TableName.C_USER);
// 除去指定字段插入,第三個參數指定即可,多個字段可以用英文逗號隔開
String sql2 = MysqlGenerator.exceptFieldsInsertSQL(cuser, TableName.C_USER, "id,login_name");
// 指定字段插入,第三個參數指定即可,多個可以用英文逗號隔開
String sql3 = MysqlGenerator.specificFieldsInsertSQL(cuser, TableName.C_USER, "id,login_name,nickname");
Debugger.so(sql);
Debugger.so(sql2);
Debugger.so(sql3);
int reInt = dao.insert(sql, cuser.getParams());
return reInt > 0 ? CM.getReturnInfo("新增成功") : CM.getFailInfo(CS.UNCONFIRM_ERROR, "新增失敗");
}
5-1-3 刪
根據id去刪,不怕把整個表都刪了,支持根據多個字段刪除,具體原理可以直接看源碼,很容易理解。
/**
*
* @param paramPostLike 特殊bean
* @return
*/
public JsonBase remove_like(ParamPostLike paramPostLike) {
String sql = MysqlGenerator.deleteSQL(TableName.POST_LIKE, "openid,post_id");
int ret = dao.delete(sql, paramPostLike.getParams());
return ret > 0 ? CM.getReturnInfo("unlike ok") : CM.getFailInfo(CS.UNCONFIRM_ERROR, "unlike 失敗");
}
5-1-4 改
具體參數和用法可以直接看方法源碼,很容易理解
//所以字段都更新
MysqlGenerator.allFieldsUpdateSQL()
//指定字段更新
MysqlGenerator.specificFieldsUpdateSQL()
//出去某字段,其余都更新
MysqlGenerator.exceptFieldsUpdateSQL()
5-1-5 查
我們查詢主要靠手寫,可以在Navicat或者類似工具上編寫好,復制到代碼里,如果不想寫太多字符串拼接,可以用@Multiline注解,這樣就可以在注釋里使用多行文本了
/**
SELECT cm.*, cu.`nickname`, cu.`avatar`
FROM post_comment AS cm
LEFT JOIN c_user AS cu ON (cu.`openid` = cm.`from_openid`)
WHERE 1=1
AND cm.to_post_id = :to_post_id AND cm.to_comment_id = 0
ORDER BY cm.create_time DESC
*/
@Multiline private String GET_COMMENTS_BY_ID;
編寫好查詢sql之后,直接調用spring-jdbc的方法就可以查詢了。
微信小程序配置
工程名shop-mp,如果需要發布小程序,需要有https證書,就需要配置好服務器域名,登錄小程序賬號之后,在【設置】-【開發設置】下找到。需要配置模板消息的話,還要自己申請一下模塊消息。預覽的話可以直接使用微信的【微信Web開發者工具】打開即可,主要需要配置好請求的地址url,在小程序/shop-mp/config/global_config.js里配置。
// 開發狀態
const isDebug = false;
// const localhost = '127.0.0.1';
const localhost = '192.168.1.161';
module.exports = {
isDebug: isDebug,
//版本號。
VERSION_CODE: 44,
//簽名的字符串
SIGN_KEY: 'foobar',
// A用戶(小區)id,每個小區有一個id
AUSER_ID: 1,
// 小程序碼的鏈接
MPCODE_URL: 'http://wx2.sinaimg.cn/mw690/8f8f5f45gy1fr5xyj7im8j2076076q43.jpg',
// 小程序web-view URL業務域名
BUSINESS_DOMAIN: 'xxx.com',
//這里配置為你的url,本地就localhost
URL_BASE: isDebug ? 'http://' + localhost +':8000' : 'https://xxxxxxxx'
}
5-2 文檔系統的使用
把編寫好的markdown文件丟進apidoc/md里面就行了,工程部署之后可以在http://host:port/apidoc/yourdocname.html查看,支持子文件夾,記得修改文檔的名稱,防止url泄露。有時間也可以做一個驗證。
6 項目展示
6-1 順碧小圈-微信小程序
6-2 文檔模塊效果圖
7 聯系作者

基於spring-boot的社區社交微信小程序,適合做腳手架、二次開發
注:本文著作權歸作者,由demo大師代發,拒絕轉載,轉載需要作者授權




