
1、数据量大时,分割查询列表,分批查询
List> partition = Lists.partition(venderCodeList, 1_000);
for (List perList : partition) {
//查询 *** 作...
}
2、 FIND_IN_SET函数:单个字段中存储列表数据,以逗号分隔,需要匹配其中某些元素时
//示例:province_codes存储S002,S008,S009,S011
select * from commodity_pool_apply_order where FIND_IN_SET('S002',province_codes);
3、Mybatis批量插入
insert into t_user(user_name, age, sex, telno, email, address)
values
(#{item.userName}, #{item.age}, #{item.sex}, #{item.telno}, #{item.email},
#{item.address})
4、Mybatis查询条件是where (a='xxx' and b='yyy') or (a='xxx1' and b='yyy1')
5、Mybatis查询条件是 code in (...)
and shop_code in
#{item}
6、Mybatis查询条件有特殊字符,把有特殊字符的语句放在 中,尽量缩小 的范围
= #{shipQueryVO.createdTimeStart,jdbcType=TIMESTAMP}
]]>
7、Mybatis insert返回自增主键并设置到实体对象中
insert into base_brand values(.....)
8、jsqlparser解析sql提取表名
com.github.jsqlparser
jsqlparser
4.2
private static Set getTableNames(String sql) {
Statement statement = null;
try {
statement = CCJSqlParserUtil.parse(sql);
} catch (JSQLParserException e) {
throw new ProductCenterQueryException("解析sql语句错误!sql:" + sql);
}
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List tableList = tablesNamesFinder.getTableList(statement);
Set tableNames = new HashSet<>();
for (String tableName : tableList) {
//获取去掉“`”的表名
if (tableName.startsWith("`") && tableName.endsWith("`")) {
tableNames.add(tableName.substring(1, tableName.length() - 1));
} else {
tableNames.add(tableName);
}
}
return tableNames;
}
9、MQ消息幂等处理(redis实现方式)
//MqMessageCacheDataUtil类中定义幂等判断逻辑
public static Boolean putMqMessage(String formInstanceId,String messageId){
if(StringUtils.isBlank(formInstanceId) || StringUtils.isBlank(messageId)){
return true;
}
String key = getKey(formInstanceId);
if(redisUtils.hashKey(key,messageId)){
return false;
}
redisUtils.hashPut(key,messageId,"");
redisUtils.expire(key,EXPIRETIME, TimeUnit.SECONDS);
return true;
}
//幂等校验
if(!MqMessageCacheDataUtil.putMqMessage(vo.getFormInstanceId(),vo.getUuId())){
log.info("重复消息,消息已消费:"+vo.getFormInstanceId()+":"+JSON.toJSONString(vo));
return;
}
//通过幂等校验,执行后续业务逻辑
.....
10、lombok使用
//开启链式编程
@Accessors(chain = true)
//创建一个无参构造函数
@NoArgsConstructor
//创建一个含有所有已声明字段属性参数的构造函数
@AllArgsConstructor
//生成toString()方法的实现,将callSuper设置为true,可以将toString的父类实现的输出包含到输出中
@ToString(callSuper = true)
//生成equals(Object other) 和 hashCode()方法
@EqualsAndHashCode(callSuper = true)
//用于属性,结合类上标注@ToString或@EqualsAndHashCode使用
@ToString.Include(name =“some other name”)
@ToString.Exclude
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)