bzk-005,酒的好坏这样分辨99%却人不知,超级学校霸王2国语
学生教材网的小编为您介绍根据java模型产生QT/CPP模型。可用json初始化,并toString为json.的具体内容:
原创,用于java服务器端和c++客户端跨语言交流。优点:服务器模型修改后,根据服务器模型,产生新的客户端核心代码。提高效率,减轻沟通负担。 标签: <无>
代码片段(1) [全屏查看所有代码]
1. [文件] GenCppModel.java ~ 8KB 下载(0) 跳至 [1] [全屏预览]
package util; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.OutputStreamWriter; import java.io.Writer; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.Type; import java.nio.charset.Charset; import java.util.List; import com.cy.video.common.controller.RequestUrlUtil; import com.cy.video.common.tran.Comment; import scala.actors.threadpool.Arrays; /** * 通过java模型,产生qt c++模型的工具 * @author zzl * */ public class GenCppModel { public static String genCppSvn="E:\\qtproject\\NEWSVN\\trunk\\jiaojin\\DataCenter\\generated"; public static void main(String[] args)throws Exception{ for(Class<?> clazz :GenJson.clazzs){ generateHeaderFile(clazz); generateCppFile(clazz); } Runtime.getRuntime().exec("cmd /k start "+genCppSvn); } public static void generateHeaderFile(Class<?> clazz) throws Exception { String cppFileName = "Data"+clazz.getSimpleName(); File dir = new File(genCppSvn+"\\ws"); dir.mkdirs(); File f = new File(dir,cppFileName+".h"); f.createNewFile(); OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(f), Charset.forName("utf-8")); fw.write("#ifndef "+cppFileName.toUpperCase()+"_H\n"+"#define "+cppFileName.toUpperCase()+"_H\n"+"#include <QString>\n#include <QJsonObject>\n#include <QJsonArray>\n#include<QList>\n#include<QString>\n#include <QJsonDocument>\n"); writeGenericHeaders(fw,clazz); Comment comment = clazz.getAnnotation(Comment.class); if(comment!=null){ fw.write("//"+comment.txt()+"\n"); } fw.write("class "+cppFileName+" \n{\n"); fw.write("public:\n"); fw.write("\t"+cppFileName+"(QJsonObject jsonObj);\n"); for(Field field:clazz.getDeclaredFields()){ if(Modifier.isStatic(field.getModifiers())){ continue; } String name = field.getName(); if(field.getType().equals(String.class)){ fw.write("\tQString m_"+name+"; \n"); }else if(field.getType().equals(Integer.class)||field.getType().equals(int.class)){ fw.write("\tint m_"+name+"; \n"); }else if(field.getType().equals(Long.class)||field.getType().equals(long.class)){ fw.write("\tdouble m_"+name+"; \n"); }else { List<?> asList = Arrays.asList(field.getType().getInterfaces()); if(asList.contains(List.class)||field.getType().equals(List.class)) { fw.write("\tQList<"+"Data"+getGenericTypeName(field)+">"+" m_"+name+"; \n"); }else{ fw.write("\t//TODO "+field.getType()+" m_"+name+"; \n"); } } } fw.write("\tQString toJson();\n"); fw.write("};\n#endif //"+cppFileName.toUpperCase()+"_H\n"); fw.close(); } public static void generateCppFile(Class<?> clazz) throws Exception { String cppFileName = "Data"+clazz.getSimpleName(); File dir = new File(genCppSvn+"\\ws"); dir.mkdirs(); File f = new File(dir,cppFileName+".cpp"); f.createNewFile(); FileWriter fw = new FileWriter(f); fw.write("#include \""+cppFileName+".h\"\n#include <QString>\n#include <QJsonObject>\n#include <QJsonArray>\n"); writeGenericHeaders(fw,clazz); fw.write(cppFileName+"::"+cppFileName+"(QJsonObject jsonObj){\n"); for(Field field:clazz.getDeclaredFields()){ if(Modifier.isStatic(field.getModifiers())){ continue; } String name = field.getName(); fw.write("\t\t if(!jsonObj[\""+name+"\"].isUndefined()){\n"); String m_name = "\t\t\t m_"+name; if(field.getType().equals(String.class)){ fw.write(m_name + "= jsonObj[\"" + name + "\"].toString(); \n"); }else if(field.getType().equals(Integer.class)||field.getType().toString().equals("int")){ fw.write(m_name + "= jsonObj[\"" + name + "\"].toString().toInt(); \n"); }else if(field.getType().equals(Long.class)||field.getType().toString().equals("long")){ fw.write(m_name + "= jsonObj[\"" + name + "\"].toString().toDouble(); \n"); }else { String genericTypeName = getGenericTypeName(field); List<?> asList = Arrays.asList(field.getType().getInterfaces()); if(asList.contains(List.class)||field.getType().equals(List.class)) { String string = "Data"+genericTypeName; fw.write("\t\t\tQJsonArray "+name+"= jsonObj[\""+name+"\"].toArray();\n"); fw.write(" \t\t\tfor(int i=0;i<"+name+".size();i++){\n"); fw.write("\t"+m_name + ".append("+string+"("+name+".at(i).toObject())); \n"); fw.write("\t\t\t}\n"); }else{ fw.write("\t\t\t//TODO "+field.getType()+" m_"+name+"; \n"); } } fw.write("\t\t}\n"); } fw.write("\t}\n"); fw.write("\tQString "+cppFileName+"::"+"toJson(){\n"); fw.write("\t\tQJsonObject json;\n"); for(Field field:clazz.getDeclaredFields()){ if(Modifier.isStatic(field.getModifiers())){ continue; } String name = field.getName(); if(field.getType().equals(String.class)||field.getType().equals(Integer.class)||field.getType().toString().equals("int")||field.getType().equals(Long.class)||field.getType().toString().equals("long")){ fw.write("\t\tjson.insert(\""+name+"\",m_"+name+");\n"); }else { List<?> asList = Arrays.asList(field.getType().getInterfaces()); String genericName = "Data"+getGenericTypeName(field); if(asList.contains(List.class)||field.getType().equals(List.class)) { fw.write("\t\tQJsonArray array;\n"); fw.write("\t\tforeach("+genericName+" obj,m_"+name+"){\n"); fw.write("\t\t\tQString str = obj.toJson();\n"); fw.write("\t\t\tarray.insert(0,str);\n"); fw.write("\t\t}\n"); fw.write("\t\tjson.insert(\""+name+"\",array);\n"); }else{ fw.write("\t\t//TODO json.insert "+field.getType()+" m_"+name+"; \n"); } } } fw.write("\t\tQJsonDocument document;\n"); fw.write("\t\tdocument.setObject(json);\n"); fw.write("\t\tQByteArray byte_array = document.toJson(QJsonDocument::Indented);\n"); fw.write("\t\treturn QString(byte_array);\n"); fw.write("\t}\n"); fw.close(); } private static String getGenericTypeName(Field field){ Type genericType = field.getGenericType(); if(genericType.getClass()!=java.lang.Class.class){ String str = genericType.toString(); return str.substring(str.lastIndexOf('.')+1,str.lastIndexOf('>')); } return null; } private static void writeGenericHeaders(Writer fw, Class<?> clazz) throws Exception {; for(Field field:clazz.getDeclaredFields()){ if(Modifier.isStatic(field.getModifiers())){ continue; } String genericTypeName =getGenericTypeName(field); if(genericTypeName!=null){ fw.write("#include \""+"Data"+genericTypeName+".h\"\n"); } } } private static void genUrlCpp() throws Exception{ File dir = new File(genCppSvn); dir.mkdirs(); String cppFileName = "URLs.h"; final File f = new File(dir,cppFileName); f.createNewFile(); Class<RequestUrlUtil> clazz = RequestUrlUtil.class; OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(f), Charset.forName("utf-8")); fw.write("#ifndef "+cppFileName.toUpperCase()+"_H\n"+"#define "+cppFileName.toUpperCase()+"_H\n"+"#include <QString>\n#include <QJsonObject>\n#include <QJsonArray>\n#include<QList>\n#include<QString>\n#include <QJsonDocument>\n"); fw.write("class "+cppFileName+" \n{\n"); fw.write("public:\n"); RequestUrlUtil obj = clazz.newInstance(); for(Field field:clazz.getDeclaredFields()){ String name = field.getName(); // fw.write("\tQString "+name+" = "+.get+"; \n"); fw.write("};\n#endif //"+cppFileName.toUpperCase()+"_H\n"); //fw.write("#ifndef "+cppFileName.toUpperCase()+"_H\n"+"#define "+cppFileN } } }
以上内容是由学生教材网的小编为您介绍的.
jdbc查询结果集result转换成对应list集合
jdbc查询结果集result转换成对应list集合标签:<无>-->-->-->1.
基于Spring JdbcTemplate的通用dao
之前写过一个常规的通用Dao,请看这里:http://www.oschina.net/code/snippet_997396_33402该通用dao是在使用过程中,针对常规的泛型dao经常遇到的一些不便问题进行了改进。