美文网首页
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