zoukankan      html  css  js  c++  java
  • 我的开发日记(四)

    今天有点跟mysqlmybatis杠上了,解决了两个问题都是这方面的,特别是复杂SQLXML配置文件中的设置有点怀疑人生的感觉。

    从mysql读取map

    想法如下:因为servicehost的对应关系放在库里,读取不方便,我打算存在JVM里面。这个本来总体来说挺简单的,只是一开始不知道数据结构导致我排查了一阵子。里面有个坑:有个字节数据库字段类型数字,但是长度比较长,11位,我用get(service_id).toString()总是报错,后来多了一步:先用一个Object类型接收,然后在toString就解决了这个问题。

    报错内容如下:

    Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
    	at com.okay.family.common.StartRun.lambda$run$0(StartRun.java:34)
    	at com.okay.family.common.StartRun$$Lambda$579/1939282277.apply(Unknown Source)
    	at java.util.stream.Collectors.lambda$toMap$172(Collectors.java:1320)
    	at java.util.stream.Collectors$$Lambda$583/629078509.accept(Unknown Source)
    	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
    	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
    	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
    	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
    	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    	at com.okay.family.common.StartRun.run(StartRun.java:34)
    	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795)
    	... 5 common frames omitted
    

    XML配置

    <select id="findAllHost" resultType="java.util.HashMap">
            SELECT service_id,domain
            FROM
            <include refid="ENV_TABLE"/>
        </select>
    
    • 接收方法List<HashMap<String, String>> findAllHost();

    数据处理方法

     List<HashMap<String, String>> hosts = commonMapper.findAllHost();
            Map<Integer, String> collect = hosts.stream().collect(Collectors.toMap((x -> {
                Object service_id = x.get("service_id");
                return Integer.parseInt(service_id.toString());
            }), (x -> "https://" + x.get("domain"))));
            ServerHost.init(collect);
    

    insert select where

    这个说起来有点复杂。我需要在数据库中创建一条记录,然后部分字段内容我需要从另外的两个表里面查询。在经历过一个小时的查阅、摸索、尝试终于搞完了。

    • 这里有个坑,就是select里面如果想添加变量值作为常量,必需通过一个字段别名实现,不然会把变量值当做字段名去后面的表中查询,导致报错:### Error updating database. Cause: java.sql.SQLSyntaxErrorException: Duplicate column name '1001'

    XML配置

        <insert id="addCase" useGeneratedKeys="true" keyProperty="id"
                parameterType="com.okay.family.common.bean.testcase.request.CaseAttributeBean">
            INSERT INTO
            <include refid="table"/>
    
            (uid,editor,envId,serviceId,moduleId,apiId,name,level,host,path,type,method,headermoco,paramsmoco)
    
            select * from (select
            #{uid} aa,#{uid} bb,#{envId} cc,#{serviceId} dd ,#{moduleId} ee ,#{apiId} ff,#{name} gg,1,CONCAT("https://",domain),api_url,api_action,api_method,header_para,request_par
            FROM
            <include
                    refid="api_info"/>
            a LEFT JOIN
            <include refid="server_env"/>
            s ON a.service = s.service_id WHERE a.id = #{apiId}) t
    
        </insert>
    

    后来想想host其实不用存在数据库的,单还是想把这个SQL记录下面,慰藉我那逝去的一个小时(中间因为拼接错误被坑了半小时左右)。


    • 郑重声明:公众号“FunTester”首发,欢迎关注,禁止第三方转载。更多原创文章:FunTester十八张原创专辑,合作请联系Fhaohaizi@163.com

    热文精选

  • 相关阅读:
    数组常用遍历方法总结
    文本控制行数,超出省略号显示
    数据结构入门
    数论函数补充 公式推导
    几何入门合集 gym101968 problem F. Mirror + gym102082 Problem F Fair Chocolate-Cutting + gym101915 problem B. Ali and Wi-Fi
    COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution
    数论函数
    数论入门
    USACO1.4 1.5 搜索剪枝与数字 洛谷OJ P1214 P1215 P1217 P1218
    USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
  • 原文地址:https://www.cnblogs.com/FunTester/p/13157852.html
Copyright © 2011-2022 走看看