问题:有大量类似于theProductId这样名字的字符串需要转换成the_product_id这种数据库column名的形式。

思路:见到()大写字母()就插入()一个“_”字符()进去,最后把所有字母都转换为小写。

解决办法:递归,字符串操作——见缝插针。

方法如下:

public static String toDbFormat(String theString, String insertString, int i) {
StringBuilder sb = new StringBuilder(theString);
String result = theString;
if (i < sb.length()) {
if (Character.isUpperCase(sb.charAt(i))) {
sb.insert(i, insertString);
i = i + 2;
} else {
i++;
}
result = toDbFormat(sb.toString(), insertString, i);
}
return result.toLowerCase();
}

实际应用——在接口自动化测试框架中根据model类为mybatis文件夹中的xml文件自动生成result部分:

public static void createXmlOut(Object object) throws IOException{
//生成mybatis文件夹中xml文件的result部分
FileWriter writer= new FileWriter("D:\\xmlOut.txt");
@SuppressWarnings("rawtypes")
Class clz = object.getClass();
for (java.lang.reflect.Field field : clz.getDeclaredFields()) {
String target = "<result property=\""+field.getName()+"\" column=\""+toDbFormat(field.getName(), "_", 0)+"\" />";
writer.append(target+"\r\n");
}
writer.flush();
writer.close();
}

测试方法(这里SomeModel替换为测试框架中实际的model类):

public static void main(String[] args) throws IOException {
SomeModel someModel = new SomeModel();
createXmlOut(someModel);
}

执行测试方法后就可以在你的D盘xmlOut.txt文件中看到生成的结果了。完整测试代码如下:

package com.netease.lede.qa.util;

import java.io.FileWriter;
import java.io.IOException; import com.netease.lede.qa.model.duobao.TbDuobaoCoinDetail; public class CreateResultXMLUtil {
public static String toDbFormat(String theString, String insertString, int i) {
// 将变量名转成数据库列名形式
StringBuilder sb = new StringBuilder(theString);
String result = theString;
if (i < sb.length()) {
if (Character.isUpperCase(sb.charAt(i))) {
sb.insert(i, insertString);
i = i + 2;
} else {
i++;
}
result = toDbFormat(sb.toString(), insertString, i);
}
return result.toLowerCase();
} public static void createXmlOut(Object object) throws IOException {
// 生成mybatis文件夹中xml文件的result部分
FileWriter writer = new FileWriter("D:\\xmlOut.txt");
@SuppressWarnings("rawtypes")
Class clz = object.getClass();
for (java.lang.reflect.Field field : clz.getDeclaredFields()) {
String target = "<result property=\"" + field.getName() + "\" column=\""
+ toDbFormat(field.getName(), "_", 0) + "\" />";
TylanStringUtil.log(target);
writer.append(target + "\r\n");
}
writer.flush();
writer.close();
} public static void main(String[] args) throws IOException {
TbDuobaoCoinDetail tbDuobaoCoinDetail = new TbDuobaoCoinDetail();
createXmlOut(tbDuobaoCoinDetail);
}
}

为测试框架model类自动生成xml结果集的更多相关文章

  1. 让Visual Studio 2013为你自动生成XML反序列化的类

    Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: 1. 在代码编辑界面的右侧滚动条上显示不同颜色的标签,让开发人员可以对所编辑文档的修改.查找.定位情 ...

  2. 自动生成XML反序列化的类

    原文地址:http://www.cnblogs.com/jaxu/p/3632077.html   Visual Sutdio 2013增加了许多新功能,其中很多都直接提高了对代码编辑的便利性.如: ...

  3. Mybatis自动生成xml文件、dao接口、实体类

    Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...

  4. Hibernate由model类自动同步数据库表结构

    在开发中遇到了个问题,每次测试数据库增加表结构的时候,本地pull下最新代码导致启动报错,上网搜了快速解决办法---->hibernate 配置属性中,hibernate.hbm2ddl.aut ...

  5. java 编程基础:注解(Annotation Processing Tool)注解处理器 利用注解解读类属性生成XML文件

    APT的介绍: APT(Annotation Processing Tool)是一种注解处理工具,它对源代码文件进行检测,并找出源文件所包含的注解信息,然后针对注解信息进行额外的处理. 使用APT工具 ...

  6. laravel5.1框架model类查询实现

    laravel框架model类查询实现: User::where(['uid'=8])->get(); User类继承自Model类:Illuminate\Database\Eloquent\M ...

  7. eclipse类自动生成注释

    1.创建新类时自动生成注释 window->preference->java->code     styple->code     template 当你选择到这部的时候就会看 ...

  8. 微信被动回复用户消息-文本消息-springmvc环境下自动生成xml

    微信被动回复用户消息-文本消息-springmvc环境下自动生成xml springmvc - 大牛! private Object subscribeMessage(Scan scan) { Sca ...

  9. 如何由XSD自动生成XML和实体类

    项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据:读取XML数据源的时候,首先用XSD验证XML数据格式,然后 ...

随机推荐

  1. 转:python webdriver API 之层级定位

    在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素 ,现在需要具体定位到其中的一个.由于属性基本相当,所以在定位的时候会有些麻烦,这时候就需要用到层级定位.先定位父元素,然后再通 ...

  2. VCL 如何加载Gif图片和Png图片

    加上头文件#include <Vcl.Imaging.GIFImg.hpp> #include <Vcl.Imaging.pngimage.hpp> Image1->Pi ...

  3. poj: 1004

    简单题 #include <iostream> #include <stdio.h> #include <string.h> #include <stack& ...

  4. 手机端 zepto tap事件穿透

    什么是事件穿透? 点击上面的一层时会触发下面一层的事件 ”google”说原因是“tap事件实际上是在冒泡到body上时才触发”,也就是Zepto的tap事件是绑定在document上的,所以会导致 ...

  5. event对象的属性

    事件类型: bubbles:布尔值,表示事件是否通过DOM以冒泡形式触发. 事件发生时,反应当前环境信息的属性: button: 表示(如果有)鼠标所按下的按钮 ctrlKey: 布尔值,表示Ctrl ...

  6. Oracle11.2新特性之listagg函数 (行列转换)

    SELECT regexp_substr('公司1,贵公司2', '[^,]+', 1, LEVEL, 'i') FROM dualCONNECT BY LEVEL <= length('公司1 ...

  7. [crunch bang]在Crunch Bang安装和设置fcitx(小企鹅输入法)

    试来试去还是喜欢小企鹅多一些 第一步:在终端下 sudo apt−get install fcitx fcitx−sunpinyin  fcitx-ui-classic fcitx-table sud ...

  8. web标准

    仔细看看所有的前端招聘要求,几乎所有的都要求对web标准有深刻的理解. web标准,是一系列标准的集合.对前端来说,因为网页是由结构.表现和行为组成.对应的就有结构化标准语言,主要包括XHTML和XM ...

  9. 天气预报接口api(中国天气网)

    中国天气weather.comhttp://m.weather.com.cn/data/101110101.html(六天预报) http://www.weather.com.cn/data/sk/1 ...

  10. seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码

    seo之google rich-snippets丰富网页摘要结构化数据(微数据)实例代码 网页摘要是搜索引擎搜索结果下的几行字,用户能通过网页摘要迅速了解到网页的大概内容,传统的摘要是纯文字摘要,而结 ...