目录
layui增加一行统计数据:在table render中增加 parseData 方法
配置springboot JdbcTemplate打印sql执行日志
springboot 去掉项目启动时的 CONDITIONS EVALUATION REPORT
java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider
java.lang.ClassNotFoundException: com.netflix.hystrix.metric.HystrixCommandCompletionStream
jedis异常:jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
list排序:根据list对象中的属性大小排序;根据自定义顺序排序。
java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTags
pg数据库报错:current transaction is aborted, commands ignored until end of transaction block
统计百分比,小数点后保留两位数:
DecimalFormat df = new DecimalFormat("##0.00");
Integer partA = 3;
Integer all = 6;
String parAPercent = df.format(Double.valueOf(partA.toString())/all*100)+"%";
-
layui 设置时间插件只选择年月
日期插件地址:https://www.layui.com/laydate/
layui.use(['laypage', 'layer', 'table', 'element', 'laydate','excel'], function(){
var laypage = layui.laypage //分页
,table = layui.table //表格
,laydate = layui.laydate
, excel = layui.excel
, form = layui.form;
。。。。。
。。。。
。。。。。
// 将type设置为 month
laydate.render({
elem: '#startTime',
type: 'month',
max:maxDate(),
done:function(value){
startTime = value;
// if(endTime){
// checkDate();
// }
}
});
-
统计某种类型的数量,默认查询当月的数量
StringBuffer sqlList = new StringBuffer();
sqlList.append(" DATE_FORMAT(r.create_time,'%Y-%m-%d') AS create_times, ");
sqlList.append(" count(*) AS total_count, ");
sqlList.append(
"COALESCE(sum(CASE WHEN r.order_status = 5 THEN 1 END),0) AS invalid_order,");
sqlList.append(
"COALESCE(sum(CASE WHEN r.order_status = 11 THEN 1 END),0) AS success_order ");
StringBuffer sqlFrom = new StringBuffer();
sqlFrom.append(" issue_order r");
return new SQL() {
{
SELECT(sqlList.toString());
FROM(sqlFrom.toString());
WHERE("r.owner_code = " + userVo.getOwnerCode());
if (ValidateUtil.isEmpty(queryVo.getPartnerId()) && ValidateUtil.isEmpty(userVo.getPartnerId())) {
WHERE("r.partner_id = '" + userVo.getPartnerId() + "'");
}
if (ValidateUtil.isNotEmpty(queryVo.getPartnerId())) {
WHERE("r.partner_id = '" + queryVo.getPartnerId() + "'");
}
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
if (ValidateUtil.isNotEmpty(queryVo.getStartTime())) {
WHERE("r.create_time <= '" + queryVo.getStartTime().trim()+"-"+days+"'");
WHERE("r.create_time >= '" + queryVo.getStartTime().trim()+"-01"+"'");
}
String now = DateUtils.format(new Date(),DateUtils.YYYY_MM);
if (ValidateUtil.isEmpty(queryVo.getStartTime())) {
WHERE("r.create_time <= '" + now+"-"+days+"'");
WHERE("r.create_time >= '" + now+"-01"+"'");
}
GROUP_BY("create_times");
}
}.toString();
-
layui增加一行统计数据:在table render中增加 parseData 方法
table.render({
elem: '#order_list'
,width: 'auto'
,height: 'full-70'
,url: '/mgmt/orderStatisticsSummary' //数据接口
,title: '订单查询'
,limit:50
,limits:[10,20,50,100]
,parseData:function(res){//添加一行统计数据
// console.log(res);
return{
'data': res.data.concat({
"activateFailedOrder":res.totalActivateFailedOrder,
"createTimes":"汇总",
"effectiveOrder":res.totalEffectiveOrder,
"failActivationRate":res.failActivationRate,
"failOrder":res.totalFailOrder,
"inactivatedOrder":res.totalInactivatedOrder,
"inactivationRate":res.inactivationRate,
"invalidOrder":res.totalInvalidOrder,
"successActivationRate":res.successActivationRate,
"successOrder":res.totalSuccessOrder,
"successRate":res.successRate,
"totalCount":res.total
}),
'message': res.message,
'code': res.code,
'count': res.count + 1,
'status': res.status,
}
}
,request: {
pageName: 'page' //页码的参数名称,默认:page
, limitName: 'pageSize' //每页数据量的参数名,默认:limit
}
,response: {
statusName: 'code', //数据状态的字段名称,默认:code
statusCode: '1', //成功的状态码,默认:0
msgName: 'message', //状态信息的字段名称,默认:msg
countName: 'count', //数据总数的字段名称,默认:count
dataName: 'data' //数据列表的字段名称,默认:data
}
,page: true //开启分页
,cols: [[ //表头
{type: 'checkbox', fixed: 'left'}
,{field: 'sort', title: '序号',width:50, fixed: 'left', align:'center',type:'numbers'/* , totalRowText: '合计:' */}
,{field: 'createTimes', title: '日期', width: 200, align:'center'}
,{field: 'totalCount', title: '总数', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'invalidOrder', title: '无效订单', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'effectiveOrder', title: '有效订单', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'successOrder', title: '成功', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'failOrder', title: '失败', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'inactivatedOrder', title: '未开始激活', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'activateFailedOrder', title: '激活失败', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'inactivationRate', title: '未激活率', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'failActivationRate', title: '激活失败率', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'successActivationRate', title: '激活成功率', width: 120, align:'center'/* , sort: true, totalRow: true */}
,{field: 'successRate', title: '成功率', width: 120, align:'center'/* , sort: true, totalRow: true */}
]]
,done: function(res) {
//如果是异步请求数据方式,res即为你接口返回的信息。
if (res.status == -1) {
window.location.href = "/route/login";
}
}
});
问题分析:
form 表单的button按钮有自动提交功能,点击按钮后会自动进行后台查询
解决方法:
将button 加上 type="button"
- 点击按钮进入了后台能够正确返回数据,但是ajax就是没执行success : function(result) {},而是执行了error : function(result) {} ,并且执行了form表单的查询。
点击图片,图片旋转,自定义旋转角度
图片旋转演示地址:jquery跨浏览器控制图片旋转插件jQueryRotate.js
引入jar包:已加入百度云盘
<
script
src
=
"path/to/jquery.min.js"
></
script
>
<
script
src
=
"path/to/jQueryRotate.js"
></
script
>
var value = 0;
$("#images").rotate({
bind:
{
click: function(){
value +=90;
$(this).rotate({ animateTo:value})
}
}
});
mybatis 大于、小于、大于等于、小于等于
大于:>
小于:<
大于等于: >=
小于等于:<=
mybatis-plus 配置控制台打印执行sql
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
idea 配置类注释方法注释
1、配置类注释
File-->Settings-->Editor-->File and code templetes 点击
模板:
/**
* @description
* @author: chenping
* @create: ${YEAR}-${MONTH}-${DAY}
**/
2、方法注释
增加template group,取名为method
添加template
设置方法注释模板
模板:
*
* @Description: $description$
* @param: $param$
* @return: $returns$
* @Author: chenping
* @Date: $date$
**/
方法注释模板脚本:
groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++){if(i==0){result = params[i]}else{result+='\\n'+' * @param: ' + params[i] + ((i < params.size() - 1) ? '' : '')}}; return result", methodParameters())
配置springboot JdbcTemplate打印sql执行日志
添加logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--显示日志-->
<logger name="org.springframework.jdbc.core" additivity="false" level="DEBUG" >
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</logger>
</configuration>
接收的数据库时间格式化
注意:pattern 与timezone的前后顺序
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateTime;
springboot 去掉项目启动时的 CONDITIONS EVALUATION REPORT
解决:在application.yml 中配置
logging:
level:
org:
springframework:
boot:
autoconfigure: error
java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider
解决:启动类导入 tkmybatis的mapperscan
import tk.mybatis.spring.annotation.MapperScan;
java.lang.ClassNotFoundException: com.netflix.hystrix.metric.HystrixCommandCompletionStream
错误场景:feign 断路器,调用服务失败报错
解决:引入jar包
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
</dependency>
@Pointcut execution配置
//表示匹配com.cp.server.UserService中所有的公有方法
@Pointcut("execution(public * com.cp.service.UserService.*(..))")
//表示匹配com.cp.controller包及其子包下的所有方法
@Pointcut("execution(* com.cp.controller..*.*(..))")
double转int
double a = 2.30;
int i = new Double(a).intValue();
jedis异常:jedis.exceptions.JedisDataException: ERR Client sent AUTH, but no password is set
解决:密码设置为空
list排序:根据list对象中的属性大小排序;根据自定义顺序排序。
List<Users> list = getList();
1、根据对象中某个属性排序
//java 7 排序
Collections.sort(list, new Comparator<Users>(){
@Override
public int compare(Users map1, Users map2) {
return map2.getAge().compareTo(map1.getAge());//按age字段降序,若是map1在前为升序
}
});
//java 8 排序
Collections.sort(list,(list1,list2) -> list1.getAge().compareTo(list2.getAge()));
2、根据自定义顺序排序
List<Integer> sort= Arrays.asList(6,3,4,8);
Collections.sort(listsort,(a0,a1) -> {
int index1 = sort.indexOf(a0.getAge());
int index2 = sort.indexOf(a1.getAge());
return index1-index2;
});
js 数组删除元素
opitionArr.splice(j,1);//删除索引为j的数据
Comparator 排序报 空指针异常
userList.sort(Comparator.comparing(User::getScore));//因为socre值有null而报错
修改为:
//正序排列
userList.sort(Comparator.comparing(User::getScore, Comparator.nullsLast(Double::compareTo)));
//倒序排列
userList.sort(Comparator.comparing(User::getScore, Comparator.nullsFirst(Double::compareTo)).reversed());
@Accessors(chain=true) 链式访问
链式访问,该注解设置chain=true,生成setter方法返回this(也就是返回的是对象),代替了默认的返回void。
@Data
@Accessors(chain=true)
public class Student {
private Integer id;
private String name;
private Integer age;
public static void main(String[] args) {
//开启 chain=true后可以使用链式的set
Student student = new Student().setAge(31).setName("jack");//返回对象
System.out.println(student);
}
}
sql 判断一个表是否存在
select count(*) from information_schema.tables where table_schema='mydatabase' and table_name ='score';
java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTags
原因:jdk版本与lombok版本不兼容
解决:
1、切换jdk版本
2、修改lombok版本
例如jdk为11,则lombok要修改为v1.18.4及以上版本,具体参考lombok版本文档
https://projectlombok.org/changelog
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> <scope>provided</scope> </dependency>
dbeaver连接informix报错:
informix Code-set conversion function failed due to illegal sequence or invalid value
原因可能是dbeaver的安装路径有中文,修改路径中午为英文即可。
pg数据库报错:current transaction is aborted, commands ignored until end of transaction block
pg系列的数据库 手动提交遇到错误需要把此连接的全部事务回滚,否则此连接之后的所有操作都会报错(current transaction is aborted, commands ignored until end of transaction block)