【开发日记】微信小程序后端(10.24~11.14)

编程入门 行业动态 更新时间:2024-10-08 12:40:56

【开发日记】微信小程序<a href=https://www.elefans.com/category/jswz/34/1771414.html style=后端(10.24~11.14)"/>

【开发日记】微信小程序后端(10.24~11.14)

后端框架采用SpringBoot,MyBatis做数据库连接,数据库为MySQL

一. 获取openid

参考微信开发者文档

  • client接口
@FeignClient(name="mini",url="")
public interface MiniClient {/*** 小程序通过code获取openid接口* @param appid* @param secret* @param js_code* @param grant_type* @return*/@GetMapping("sns/jscode2session")String getOpenId(@RequestParam("appid") String appid,@RequestParam("secret") String secret,@RequestParam("js_code") String js_code,@RequestParam("grant_type") String grant_type);
}
  • service层(CodeMsg是封装好的工具类)
@Service
public class TestServiceImpl implements TestService {Logger logger = LoggerFactory.getLogger(this.getClass());@Autowiredprivate MiniClient miniClient;@Value("${sng.appid}")private String appid;@Value("${sng.appsecret}")private String appsecret;/*** 获取用户openid* @param code* @return*/@Overridepublic Object getTestOpenid(String code) {try {if(!StringUtil.isNullOrEmpty(code)) {String res = miniClient.getOpenId(appid, appsecret, code, "authorization_code");// 处理一段接收的json数据JSONObject r = JSONObject.parseObject(res);// 获取openid的值Object rr = r.get("openid");return CodeMsg.successJson(0, rr);}return CodeMsg.successJson(1, "输入的code为空值");}catch (Exception e){logger.error("获取openid失败:"+e);return CodeMsg.errorJson(1,"获取openid失败:"+e);}}}

二. 多次新增/跟新数据表,加事务

  1. 回滚 @Transactional
    保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。
    加在service层,在return前手动抛出。
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

注意点:(回滚失效原因)
回滚中嵌套的service方法不可以加try catch,嵌套的方法也不可以加@Transactional注解

  1. 加锁 synchronized
    锁变量,class_id一样,依次执行。不需要考虑释放逻辑,考虑效率。
synchronized ( apply_each.getClass_id() ){ ... }

三. 返回嵌套list

在实体类中存放需要嵌套的list,如:在lv表中嵌套Clas

  • domain层
@Data
public class Lv {private String name;private String id;private List<Clas> cls;public Lv() {}
}
  • service层,多层的话就再在外面套一层for循环
List<Lv> lvs = signDao.getLvByCourse(...);
...
for (Lv lv_list : lvs) {List<Clas> cls = signDao.getClass(course_id,lv_id);lv_list.setCls(cls);
}

四. 数据校验

例如判空校验,放在代码最前端,并在单独定义一个方法集中校验(checkApplyData)

		// 1、数据校验JSONObject check_res = this.checkApplyData(bm);if(check_res.getIntValue("code") == 1){return CodeMsg.errorJson(1,check_res.getString("msg"));}
private JSONObject checkApplyData(Bm bm){int code = 0;String msg = "";if(bm.getList().size() == 0){code = 1;msg = "请至少选择一门课程!";} else if (StringUtil.isNullOrEmpty(bm.getStudent_name())) {code = 1;msg = "学生姓名不可为空!";} ...return CodeMsgmonJson(code,null,msg);}

五. 身份证号正则匹配/UUID()

if (!StringUtil.isNullOrEmpty(idcard)) {// 身份证号正则匹配String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +"(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";boolean matches = idcard.matches(regularExpression);//判断第18位校验值if (matches) {//设置学生id为UUID()student.setId(UUID.randomUUID().toString());Integer isAdd = userDao.addStuByIdcard(student);if(isAdd > 0) {return CodeMsg.successJson(0, student);}return CodeMsg.errorJson(1,"插入失败");}}

六. 各种tips

  • CollectionUtils提供了集合相等的判断工具方法isEqualCollection,只要确保两个集合非空可以直接使用该方法来判断集合相等,不用考虑顺序。
List<Integer> list1 = Arrays.asList(1, 2, 3, 3);
List<Integer> list2 = Arrays.asList(3, 1, 3, 2);
//List<String> list=Arrays.asList("2001","2002");
System.out.println(CollectionUtils.isEqualCollection(list1, list2)); //true
  • LinkedHashMap:HashMap和双向链表合二为一,增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。迭代顺序可以是插入顺序,也可以是访问顺序。
List<LinkedHashMap> list= midDao.getBmMessage();
  • try里抛出异常,catch中捕获
throw new Exception("审核失败");
SQL语句:
  1. 在idea中引用字符串:在双引号里包裹单引号
 " where a1.id='2001' " 
  1. union all:对两个结果集进行并集操作,包括重复行,不进行排序
  2. select语句中判断条件
select id,(case when `disable` > 0 then 1 else 0 end) `disable` 
  1. 查询数据库最新一条时间
order by create_time desc
limit 1
git代码上传
git add .
git commit -m '写了哪些代码'
git push
git代码拉取
git pull

总结:一些业务代码写的比较冗余,查询数据库太多,需要后续优化

更多推荐

【开发日记】微信小程序后端(10.24~11.14)

本文发布于:2024-02-07 05:15:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753682.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:后端   程序   日记   微信小

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!