错误&解决 总结

java.lang.reflect.InvocationTargetException,然后就是各种mybatis的错误

A:@SelectProvider(type = SqlProvider.class, method = "getAllUnreadMessageCnt")
    public int getAllUnreadMessageCount( @Param("wmPoiIdList") List<Long> wmPoiIdList);
之前以为一个参数就不用加红色部分,这里用到的SelectProvider是为了SQL语句中类似于wm_poi_id in {List}的查询

public static class SqlProvider {
        @SuppressWarnings("unchecked")
        public String getAllUnreadMessage(Map<String, Object> paramMap) {
            String sql_prefix = "select " + KEY + " from wm_message where wm_poi_id in ( ";
            String idList = "";
            List<Long> list = (List<Long>) paramMap.get("wmPoiIdList");
            int offset = (Integer) paramMap.get("offset");
            int limit = (Integer) paramMap.get("limit");

            if (list == null || list.size() < 1) {
                return sql_prefix + idList + ")";
            }
            idList += StringUtils.join(list, ",");
            String sql = sql_prefix + idList + ") and msgtype=0 and status=0 and clean_content!='' order by ctime limit ";
            sql += offset;
            sql += ",";
            sql += limit;
            return sql;
        }
}




IDEA debug模式启动特别慢,几乎等于无法启动。
原因:断点打在了方法上,去掉此断点即可。



org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.sankuai.meituan.waimai.merchant.dao.mapper.WmOrderMapperDao.int

mybatis的xml配置文件中没有配置parameter map,
要么配置parameter map 要么将select,add等属性中的parameter map 改为 parameter type ,或者resultMap改为resultType.


 mysql 拼接
name like concat('%',#{name},'%’)



注意从数据库查询单个值时,因为可能返回空值,所以应该用Integer,Long,Float等封装类型接受返回值。



Button a 等元素可能有自己的提交表单事件,会刷新页面,所以要阻止它本身的事件发生。类似于
     var submitInfo = function (e) {
            e.preventDefault();
            var wmPoiId = cookie.getCookie('wmPoiId');
            var acctId = cookie.getCookie('acctId');
            var token = cookie.getCookie('token');
            var submitBtn = $(this);
            var phone = submitBtn.parents().find(".contact-phone").val();
            var verifycode = submitBtn.parents().find(".verify-code").val();
            if (validateInfo(phone, verifycode)) {
                $.post(i.checkInfo, {
                    wmPoiId: wmPoiId,
                    acctId: acctId,
                    token: token,
                    phone: phone,
                    verifycode: verifycode
                }, function (ret) {
                    if (ret.code == -1) {       //号码属于 BD
                        submitBtn.parents().find(".phone-tip").show();
                        submitBtn.parents().find(".contact-phone").text();
                    };

                });
            };
        };

        $(".J-submit-info").bind('click', submitInfo);
要用e.preventDefault();



在 js里面使用类似
      function historyOrderFilter(orderType) {
            var url = window.location.href;
            var index = url.lastIndexOf('/order/today/processed');
            if (index != -1) {
                url = '/order/today/processed' + '?orderType=' + orderType;
                window.location.href = url;
            }
        }
的方式可以向controller 中传参,达到重新刷新页面的目的(应用场景,根据 radiobutton 的选择更新页面)



如果 Mysql 的表字段名和 Mysql 中的关键字相同,做查询时会报错:
select count(RID) from DHC_RULE where DESC=‘pre'
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC='pre'' at line 1
解决办法,用反撇``把字段名括起来:
select count(RID) from DHC_RULE where UID="zhaohui06" and `DESC`='pre’\G



insert语句如果要返回自动生成的key值,一般会在insert里加入useGeneratedKeys属性

<insert id="insert" parameterType="cn.ac.iscas.pebble.ufe.bean.Subtask"
  useGeneratedKeys="true" keyProperty="sid">
    insert into subtasks (SID, TID, RID,
      START, INTERVALL, SCHEDULE,
      RESULTS, STYLE)
    values (#{sid,jdbcType=INTEGER}, #{tid,jdbcType=INTEGER}, #{rid,jdbcType=INTEGER},
      #{start,jdbcType=TIMESTAMP}, #{interval,jdbcType=INTEGER}, #{schedule,jdbcType=INTEGER},
      #{results,jdbcType=VARCHAR}, #{style,jdbcType=INTEGER})
  </insert>



富文本存入数据库,数据库字段用 blob
前端和后台逻辑都可以原样(JavaScript var,后台 String 接受)
显示时,因为Blob 默认的 typeHandler 返回的是 byte[]接收
所以
        byte[] bytes = wmEMgrMsg.getInfo_content();
        String strContent = "";
        try {
            strContent = new String( bytes, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            LOG.error("WmEMgrMsgService.getMgrMsgById ERROR 字符转换出错");
        }
        wmEMgrMsg.setStrContent(strContent);
所获得的 strContent 是 String 类型的



Freemarker 中显示百分比

<td>${(pub.readCnt/pub.targetCnt)?string("percent")}</td>



如果想让 POST 操作执行完毕以后再执行其他操作,即同步处理,在JavaScript 中加入:
    $.ajaxSetup({
        async: false
    }); 
即可。



如果需要用 Get 请求资源,但是参数又包含&等特殊字符(比如预览 CKEditor 的内容,如果有空格&nbsp;的话就会出错),但是又不能用 POST,可以对 URI 进行处理,如:
url = '/workbench/preview?content=' + encodeURIComponent(content);

可是如果使用 GET 方式,参数长度有限制,实际上是可以使用 POST 方式的。如下:
        var content = editor.getData();
        $.ajax({
            type: "POST",
            url: '/workbench/preview',
            data: {
                'content': content
            },
            async: false,
            success: function (ret) {
                var obj = window.open(“about:blank”);
                obj.document.write(ret);
            }
        })



Linux 普通时间转 unixtimestamp

     date +"%s”



Spring @ResponseBody 中的乱码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值