问题:有大量类似于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. javax.servlet.jsp.JspException cannot be resolved to a type

    javax.servlet.jsp.PageContext cannot be resolved to a type javax.servlet.jsp.JspException cannot be ...

  2. iphone设置铃声

    iphone同步铃声 1.下载itunes 2.打开itunes.文件->将文件添加到资料库...选择一首歌曲加进去 3.右击新加的歌曲,显示简介->选项.调整结束开始时间.不得超过40秒 ...

  3. 夺命雷公狗---2016-linux---3之目录一般作用

    最好文件还是存放在自己的home目录下 建议:在很多时候如果需要系统备份最好去备份boot和etc这两个目录

  4. libsvm

    代码文件主要针对Matlab进行说明,但个人仍觉得讲解的支持向量机内容非常棒,可以做为理解这一统计方法的辅助资料; LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的一套支持向量 ...

  5. C语言初学者代码中的常见错误与瑕疵(1)

    曾在豆瓣上看到过一个小朋友贴出他自己的代码(http://www.douban.com/group/topic/40293109/),当时随口指点了几句.难得这位小朋友虚心修正.从善如流,不断地改,又 ...

  6. 批处理命令——rem 和 pause

    [1]rem命令简介 注释命令,在C语言中相当于/*----------*/,它并不会被执行,只是起到一个注释的作用,便于别人及自己将来阅读和维护脚本. 为了更具体的理解,请看示例: 新建一个文本文件 ...

  7. 为 Macbook 安装 enca 命令

    enca 是个查看.转换编码的开源软件, 地址: http://dl.cihar.com/enca/ 安装的步骤比安装 wget 简单多了: 1.用 wget 获取最新的enca 的 tar.gz 的 ...

  8. css经典布局学习

    . 布局 布局是css的重头戏,每个系统的布局都有其各自的特点.无好无坏,肯定是各有优缺点,不妨拿出几个比较典型的例子来一起分析一下.例如: 经典三列布局 Bootstrap栅格布局 百度首页布局 微 ...

  9. 【python cookbook】【数据结构与算法】15.根据字段将记录分组

    问题:想根据字典或者对象实例的某个特定的字典(比如日期)来分组迭代数据 解决方案:itertools.groupby()函数在对数据进行分组时特别有用(前提是先以目标字典进行排序) rows = [ ...

  10. JSP直接连接sql2008数据库并显示

    <%@ page contentType="text/html; charset=utf-8" language="java" errorPage=&qu ...