美文网首页
java常见问题汇总

java常见问题汇总

作者: b470b9fc7145 | 来源:发表于2017-12-06 14:16 被阅读12次
  1. 错误一
    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>
  1. 错误二

枚举类型

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;
        }
        
        
    }

  1. 错误三
    设置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>
  1. 问题四

别名一定要用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')

  1. 问题四

设置时间前后

//设置查询时间
        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());
        }

  1. 问题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

参考链接

https://segmentfault.com/q/1010000003055302

相关文章

网友评论

      本文标题:java常见问题汇总

      本文链接:https://www.haomeiwen.com/subject/qsnkixtx.html