Mybatis相关
1、动态SQL(灵活拼接)
:适用于动态条件(检索条件存在时则拼接到where) , , : 相当于java的switch没有break :适用于where本身是否包括(没有一个条件时where需要动态去掉) :适用于动态设定值,灵活处理最后的逗号 :遍历,适合拼接元素到in条件,包含open,close,separator元素 :OGNL表达式
参考:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
2、注解
这四个注解分别代表将会被执行的 SQL 语句。它们用字符串数组(或单个字符串)作为参数。
如果传递的是字符串数组,字符串之间先会被填充一个空格再连接成单个完整的字符串。
这有效避免了以 Java 代码构建 SQL 语句时的“丢失空格”的问题。
然而,你也可以提前手动连接好字符串。属性有:value,填入的值是用来组成单个 SQL 语句的字符串数组。
参考:http://www.mybatis.org/mybatis-3/zh/java-api.html
小程序相关
1、this和that的使用
this代表着当前对象,会随着程序的执行过程中的上下文改变,这也是为什么在回调时用this取不到数据的原因,解决办法:
1)可以在回调函数外面复制一份到that中(也就是var that=this),然后回调函数通过操作that来控制,这也是最常用的方法
2)函数声明方式:success: res=> {this.setData({xxx})}
参考:https://blog.csdn.net/mdzzzhangxian/article/details/60966040
2、wxs脚本:主要用于compute/filter,用于转换数字货币等的转换。用在wxml上来构建页面,而不是用在js里
参考:https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxs/
Spring相关(尚未实验)
1、当一次事务提交需要更新两个数据源,如何控制事务的原子性?
考虑用druid的多数据源管理
2、当调用多个微服务的更新DB操作时,如何控制事务?
解决方案
1、XA协议方案:两阶段提交,中间用事务协调器调控 -- 性能问题应用不多
2、TCC方案:对XA的改进,可重试 -- 开发复杂度较高
3、阿里的中间件GTS:收费服务,但还好在2019年阿里开源了社区版seata,足够大部分场景使用
原理:基于XA方案的两步提交,为了减少锁资源的时间,第一次提交时已经提交了事务,而回滚的原理是在提交事务时记录undo日志,回滚时根据undo记录来生成回滚用的SQL
关于seata的更详细了解,请参照系列文章:Seata之研究
参考:https://www.cnblogs.com/lfs2640666960/p/8725315.html
应用示例:https://www.jianshu.com/p/37657d557183
阿里官网:https://help.aliyun.com/product/48444.html
GTS的开源社区版:https://github.com/seata/seata