基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发

代码地址如下:
http://www.demodashi.com/demo/13867.html

1 概述

笔者做的一个后端基于spring-boot的社区社交微信小程序,可以作为开发的脚手架,开发速度快,灵活,前后端分离,很适合二次开发。数据主要存储在MySQL上,笔者封装了一个MysqlGenerator.java工具类,结合spring jdbc,做数据库操作很方便。另外提供了一个文档系统,后端人员产出接口直接写出markdown文件就行,和前端沟通很方便。

2 详细

笔者所在的小区有很多居民,我觉得可以提供一个平台给大家,方便进行信息共享、闲置买卖等,也提供一些常用便民工具,例如电话查询,交通信息查询,另外一些商家也可以发布自己的服务让更多人知晓,例如汽车年审,废品回收,特产,搬家服务等。

笔者做的这个后端,是基于spring-boot的,主要特点如下:

  1. 方便开发部署,支持一键发布,配置好git之后发送一个http请求,就执行一个脚本,自动拉取最新代码并发布,脚本都在工程根目录。
  2. 自建文档系统,直接写markdown文件丢进指定文件夹即可,方便给前端人员查阅(暂未做登录验证,请注意保护文档地址url不泄露)。
  3. 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的社区社交微信小程序,适合做脚手架、二次开发

代码地址如下:
http://www.demodashi.com/demo/13867.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发的更多相关文章

  1. Spring Boot后端+Vue前端+微信小程序,完整的开源解决方案!

    项目简介 一个小商场系统,包括: 后端:Spring Boot 管理员前端:Vue 用户前端:微信小程序 功能介绍 1.小商城 首页 专题列表.专题详情 分类列表.分类详情 品牌列表.品牌详情 新品首 ...

  2. 微信小程序《沈航二手书》

    微信小程序<沈航二手书> 0x01. 利益相关者  利益相关者:是指与客户有一定利益关系的个人或组织群体,可能是客户内部的(如雇员),也可能是客户外部的(如供应商或压力群体). 根据相关利 ...

  3. 微信小程序动态生成保存二维码

    起源:最近小程序需要涉及到一些推广方面的功能,所以要写一个动态生成二维码用户进行下载分享,写完之后受益良多,特此来分享一下: 一.微信小程序动态生成保存二维码 wxml: <view class ...

  4. 微信小程序把玩(十二)text组件

    原文:微信小程序把玩(十二)text组件 通常文本设置要不在wxml中设置,再要不就是通过weml绑定在js中设置文字. wxml <view > <text>我是文本组件&l ...

  5. 行星万象表白墙微信小程序、社交微信小程序,后台完整,支持多区域运营,扫码体验。

    简介 中国目前大概有5000个表白墙,累计用户近3000万,是一个庞大的群体,但现在大都以微信朋友圈为基础进行信息中转,但是这种模式经营者和用户都不友好,尤其是经营者无法变现,用户无法公开评论,这些种 ...

  6. 基于olami开放语义平台的微信小程序遥知之源码实现

    概述 实现一个智能生活信息查询的小秘书功能,支持查天气.新闻.日历.汇率.笑话.故事.百科.诗词.邮编.区号.菜谱.股票.节目预告,还支持闲聊.算24点.数学计算.单位换算.购物.搜索等功能. 使用方 ...

  7. 微信小程序实例教程(二)

    第五章:微信小程序名片夹详情页开发 今天加了新干货!除了开发日志本身,还回答了一些朋友的问题. 闲话不多说,先看下「名片盒」详情页的效果图: 备注下大致需求:顶部背后是轮播图,二维码按钮弹出模态框信息 ...

  8. 微信小程序学习笔记(二)--框架-全局及页面配置

    描述和功能 框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 响应的数 ...

  9. 重磅消息:微信小程序支持长按二维码进入

    之前微信小程序一般通过以下入口进入: 而用户经常使用“长按二维码”识别应用的功能一直未开放,据酷客多了解,微信安卓6.5.6内测版已经支持长按二维码识别和进入小程序,意味着把小程序二维码分享给朋友,或 ...

随机推荐

  1. 洛谷P1462 通往奥格瑞玛的道路

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  2. PHP生成短网地址

    思路: 1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3 ...

  3. Linux下ip route、ip rule、iptables的关系(转)

    1.基础知识 1.1 路由 (Routing) 1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目 ...

  4. 使用CefSharp在.Net程序中嵌入Chrome浏览器(二)——参数设置

    在实现了.Net程序中嵌入Chrome浏览器后,下一步的个性化操作就是加入一些设置了,在前面的文章中,我们可以看到在使用Chrome控件前,有如下一个操作: var setting = new Cef ...

  5. MOSFET pair makes simple SPDT switch

    With an n- and p-channel MOSFET, you can easily implement a single-pole double-throw (SPDT) switch t ...

  6. Circuit translates I2C voltages

    This Design Idea explores level-shifting an I2C bus from 5V/ground (positive domain) to ground/–5V ( ...

  7. JSP入门详解

    一.基础知识详解 1.JSP中使用html注释<!-- -->客户端可见,使用jsp注释<%-- --%>客户端不可见(查看源文件只看到空行),单行和多行注释也看不到(//或者 ...

  8. JavaScript学习10:动态载入脚本和样式

    我们在写Web页面的时候,须要引入非常多的JavaScript脚本文件和CSS样式文件,尤其是在站点需求量非常大的时候,脚本的需求量也随之变大,这样一来,站点的性能就会大打折扣.因此就出现了动态载入的 ...

  9. ArcGIS for Android 点击选择

    public void onSingleTap(float arg0, float arg1) { //selFeatureLayer.selectFeature(5); Point p = mMap ...

  10. 【mysql】mysql查询 A表B表 1对多 统计A表对应B表中如果有对应,则返回true否则false作为A表查询结果返回

    A表:goods_type B表:brand_config A:B = 1:N 一种商品类型 对应多条 品牌配置 ======================================== 需求 ...