- 错误一
invalid comparison: java.util.Date and java.lang.String
date类型不能用!=''
来进行比较
<if test="endTime !=null and endTime!=''">
<![CDATA[
and DATE_FORMAT(P.flowTime, '%Y-%m-%d') <= DATE_FORMAT(#{endTime}, '%Y-%m-%d')
]]>
</if>
- 错误二
枚举类型
public enum StaffFlowTypeEnum {
/**
*入职
*/
ENROLL("01"),
/**
* 离职
*/
RESIGN("02");
private String type;
public String getType() {
return type;
}
private StaffFlowTypeEnum(String type) {
this.type = type;
}
public static boolean isMatcher(String status) {
for (StaffFlowTypeEnum staffFlowEnum : StaffFlowTypeEnum.values()) {
if (staffFlowEnum.getType().equals(status)) {
return true;
}
}
return false;
}
}
- 错误三
设置foreach,最好写上数据类型
<!-- 批量插入离职入职数据 -->
<insert id="insertBatch" parameterType="list">
insert into `EP_STAFF_FLOW` (
UID,
USER_NO,
FLOW_TYPE,
REMAK,
CREATED_BY,
CREATED_DATE,
UPDATED_BY,
UPDATED_DATE,
ORGAN_NO,
DERP_NO,
FLOW_TIME
)
VALUES
<foreach collection="list" item="item" index="index"
separator=",">
(
#{item.uid,jdbcType=VARCHAR},
#{item.userNo,jdbcType=VARCHAR},
#{item.flowType,jdbcType=VARCHAR},
#{item.remak,jdbcType=VARCHAR},
#{item.createdBy,jdbcType=VARCHAR},
#{item.createdDate,jdbcType=TIMESTAMP},
#{item.updatedBy,jdbcType=VARCHAR},
#{item.updatedDate,jdbcType=TIMESTAMP},
#{item.organNo,jdbcType=VARCHAR},
#{item.derpNo,jdbcType=VARCHAR},
#{item.flowTime,jdbcType=TIMESTAMP}
)
</foreach>
</insert>
- 问题四
别名一定要用sql中的字段,不能使用自己的字段;例如这里的下划线
P.FLOW_NO而不是p.flowTime
SELECT
UID,
FLOW_NO,
USER_NO,
FLOW_TYPE,
REMAK,
CREATED_BY,
CREATED_DATE,
UPDATED_BY,
UPDATED_DATE,
ORGAN_NO,
DERP_NO,
FLOW_TIME
FROM
EP_STAFF_FLOW P
WHERE 1 = 1
AND P.uid = ?
AND DATE_FORMAT(P.flowTime, '%Y-%m-%d') >= DATE_FORMAT(?, '%Y-%m-%d')
AND DATE_FORMAT(P.flowTime, '%Y-%m-%d') <= DATE_FORMAT(?, '%Y-%m-%d')
- 问题四
设置时间前后
//设置查询时间
if (queryStaffFlowRequest.getStartTime() == null) {
Date date = new Date();// 获取当前时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, -1);// 当前时间减去一年,即一年前的时间
// calendar.add(Calendar.MONTH, -1);//当前时间前去一个月,即一个月前的时间
Date oneYearAgoDate = calendar.getTime();// 获取一年前的时间,或者一个月前的时间
queryStaffFlowRequest.setEndTime(oneYearAgoDate);
}
if (queryStaffFlowRequest.getEndTime() == null) {
queryStaffFlowRequest.setStartTime(new Date());
}
- 问题5
sql 比较时间
1. 使用between and
2.使用date_format
3.直接比较
6.问题6
不同的工作空间有不同的maven仓库,建议建立不同的项目的时候,使用不同的workspace
7.问题7
groupBy 排序一定要select中的对应
SELECT
DATE_FORMAT(FLOW_TIME, '%Y-%m') month_desc,
COUNT(USER_NO) count_desc,
flow_type
FROM
EP_STAFF_FLOW
AND FLOW_TIME >= ?
AND FLOW_TIME <= ?
GROUP BY DATE_FORMAT(FLOW_TIME, '%Y-%m')
8.问题8
groupBy
填充数据,最好用代码来实现;如果用sql数据库也要消耗性
9.问题9
sql的case方法写法,注意''(单引号)
SELECT p.month_desc,p.count_desc,p.flow_type,
(
CASE p.month_desc
WHEN '1' THEN '一'
WHEN '2' THEN '二'
WHEN '3' THEN '三'
WHEN '4' THEN '四'
WHEN '5' THEN '五'
WHEN '6' THEN '六'
WHEN '7' THEN '七'
WHEN '8' THEN '八'
WHEN '9' THEN '九'
WHEN '10' THEN '十'
WHEN '11' THEN '十一'
WHEN '12' THEN '十二'
ELSE 'null'
END
) ttt
FROM (
SELECT
MONTH (FLOW_TIME) month_desc,
COUNT(USER_NO) count_desc,
flow_type
FROM
EP_STAFF_FLOW
WHERE flow_type = '01'
AND flow_time < '2017-12-08'
AND flow_time > '2016-12-08'
GROUP BY MONTH (FLOW_TIME)
) p
网友评论