专栏首页FunTester我的开发日记(四)

我的开发日记(四)

今天有点跟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>

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何使用“dd MM”解析日期

    模式dd MMM还不够;我们需要DateTimeFormatterBuilder为日期解析提供默认年份。

    FunTester
  • 不要在遍历的时候删除

    本人学习使用java和相关自动化工具的过程中,遇到很多问题,大多数问题解决之后发现原来根本就是识文学字常见错误。但是最近公司产品出现了一个bug,经过复盘讨论之...

    FunTester
  • httpclient发送https协议请求以及javax.net.ssl.SSLHandshakeException解决办法

    本人在做接口自动化的过程中,遇到了请求第三方https协议请求,在经过了短暂的知识重新学习之后,写完代码执行起来总是遇到一个异常,在用客户端执行请求的时候抛出来...

    FunTester
  • The consumer group[PushConsumer] has been created before, specify another name please

    MickyInvQ
  • [有人@我]你的免费10G+Java课程还未领取

    java作为最热门的编程语言,它无处不在。目前全球有着数10亿的设备正在运行着java,全球80%的服务器程序都是用它编写,用以处理每天超过5000w+的数据。

    Java团长
  • 【java】超级简单的j运行ava代码【Quicker】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • java9导出运行springboot的精简版jre

    为了分发一个springboot项目,在不考虑目标机器是否有jre的情况下,携带一个jre环境是一个选择。本文就尝试从原生的jdk 9.0.1 精简一个jre供...

    pollyduan
  • 为什么java越来越强势

    ? 目前很多的从业都有这种感觉,突然觉得c/c++就业机会以及升职的空间比java的差距越来越大了,有人就宣称java是目前国内就业最好的语言,说的有点夸张但...

    Java帮帮
  • 【大牛经验】Java爬虫简单实现

    Java爬虫简单实现 最近在学习搜索方面的东西,需要了解网络爬虫方面的知识,虽然有很多开源的强大的爬虫,但本着学习的态度,自己写了一个简单的网络爬虫,以便了解...

    Java帮帮
  • java入门

    一、java的运行机制 高级语言的运行机制主要有编译型和解释型两种。 C/C++属于编译型语言,由专门的编译器针对特定的操作系统平台进行翻译,生成可执行代码,特...

    用户1215536

扫码关注云+社区

领取腾讯云代金券