根据mysql某一条记录生成对应实体类的初始化

数据记录必须如下格式(且最后一个逗号分隔符的右边不能为空)

OUB_SHIPMENT_HEADER_ID,SHIPMENT_NO,STATUS,STATUS_EXT,PRIORITY

12313412416491,GF1712262040050,100,0

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.test.data_provide.entity.OubShipmentHeader;

public class Sql2Entity {

    List<String> list= new ArrayList<String>();

    List<String> listone= new ArrayList<String>();
    List<String> listtwo= new ArrayList<String>();

    public void toEntity(File rfile,File wfile,Class<?> obj,String entityInstance) throws IOException{
        //读取每一行到list
        List<String> rlist=readTxt(rfile);
        int count=0;
        //循环读取list的值
        for(String l:rlist){
            //"," split掉,有序的
            String[] lArray=l.split(",");

            //再循环处理字符串数组的每个值
            for(int i=0;i<lArray.length;i++){
                StringBuilder sb = new StringBuilder();
                //处理第一行
                if(count==0){
                    //再"_"split掉,有序的
                    String[] tArray= lArray[i].split("_");
                    //再循环处理字符串的每个值,首字母大写,再拼接

                    for(int j=0;j<tArray.length;j++){

                        sb.append(preWordCapital(tArray[j]));
                    }
                    listone.add(sb.toString());
                }
                //处理第二行value值
                if(count==1){
                    listtwo.add(lArray[i]);
                }

            }

        count++;
        }
        //拼接set方法
        writeTxt(wfile,concatList(listone,listtwo,obj,entityInstance));

        //writeTxt(wfile,listone);
        //writeTxt(wfile,listtwo);
    }

    public void writeTxt(File file,List<String> list) throws IOException{

         FileWriter fw = new FileWriter(file,false);
         BufferedWriter bw = new BufferedWriter(fw);

            for(String l:list){
                    bw.write(l);
                    bw.write("\r");
            }
            bw.close();
            fw.close();

    }
    public  static void main(String[] args) throws IOException {
        File rfile = new File("D:/mytest1.txt");
        File wfile = new File("D:/entity.txt");
        Sql2Entity se= new Sql2Entity();
        se.toEntity(rfile, wfile, OubShipmentHeader.class,"oubShipmentHeader");
        /*se.readTxt(rfile);
        List<String> list = new ArrayList<String>();
        list.add("wode");
        list.add("ren");
        se.writeTxt(wfile,list);*/

    }

    public List<String> readTxt(File file){
        List<String> list= new ArrayList<String>();
         StringBuilder result = new StringBuilder();
            try{
                BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
                String s = null;
                while((s = br.readLine())!=null){//使用readLine方法,一次读一行
                    //result.append(System.lineSeparator()+s);
                    //System.out.println(s+"\n");
                    list.add(s);

                }
                br.close();
            }catch(Exception e){
                e.printStackTrace();
            }

        return list;

    }

    public  String preWordCapital(String word){

        String lowerWord = word.toLowerCase();

        return  lowerWord.substring(0, 1).toUpperCase() + lowerWord.substring(1);

    }

    public List<String> concatList(List<String> listone,List<String> listtwo,Class<?> obj,String objInstance){

        Field[] field = obj.getDeclaredFields();
        System.out.println("listone.size() "+listone.size()+"  listtwo.size(): "+listtwo.size());
        if(listone.size()!=listtwo.size()){
            System.err.println("字段与值的个数不对应,请检查是否最后一个,分割符右边为空,必须保证最后一个,分割符右边不为空...");

        }
        for(int i=0;i<listone.size();i++){

            int j=0;
            for (j = 0; j < field.length; j++) {
                field[j].setAccessible(true);
                //System.out.println(field[j].getName());
                if(field[j].getName().toString().equalsIgnoreCase(listone.get(i))){
                    //System.out.println(listone.get(i));
                    //System.out.println(field[j].getName().toString());
                    break;
                }
            }

                // 获取属性的类型
                String type = field[j].getGenericType().toString();
                //String类型拼接
                if(type.equals("class java.lang.String")){
                    list.add(objInstance+".set"+listone.get(i)+"("+"\""+listtwo.get(i)+"\""+")");
                }
                //Int类型拼接
                if(type.equals("class java.lang.Integer")){
                    list.add(objInstance+".set"+listone.get(i)+"("+listtwo.get(i)+")");
                }
                //Long类型拼接
                if(type.equals("class java.lang.Long")){
                    list.add(objInstance+".set"+listone.get(i)+"("+listtwo.get(i)+"l"+")");
                }
                //BigDecimal类型拼接
                if(type.equals("class java.math.BigDecimal")){
                    list.add(objInstance+".set"+listone.get(i)+"("+"parames.getBigDecimalParams("+listtwo.get(i)+")"+")");
                }
                //Data类型拼接
                if(type.equals("class java.util.data")){
                    list.add(objInstance+".set"+listone.get(i)+"("+"parames.getDateParams()"+")");
                }
                //Byte类型拼接
                if(type.equals("class java.lang.Byte")){
                    list.add(objInstance+".set"+listone.get(i)+"("+"parames.getByteParams("+listtwo.get(i)+")"+")");
                }

        }

        return list;

    }

}

原文地址:https://www.cnblogs.com/xianlai-huang/p/8126062.html

时间: 2024-10-16 11:43:13

根据mysql某一条记录生成对应实体类的初始化的相关文章

navicat MySQL 只有1000条记录

/*************************************************************************** * navicat MySQL 只有1000条记录 * 说明: * 早上跑来了,查看一下数据库中数据情况,结果navicat只能看到1000条记录, * 查看mysql数据库结果是有全部的数据,原因是navicat只能显示1000条记录. * * 2016-10-29 深圳 南山平山村 曾剑锋 *************************

mysql 查询一条记录的下一条和上一条记录

如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from table_a where id = (select id from table_a where id < {$id} [and other_conditions] order by id desc limit 1) [and other_conditions]; 查询下一条记录的SQL语句(如果有其他的

mysql 查询随机条记录的sql语句和php计算概率

最近在网上找了下mysql查询随机的几个sql,我把最终的记录下来. SELECT * FROM uchome_mtag AS a JOIN (SELECT MAX(tagid) AS id FROM uchome_mtag) AS b ON (a.tagid>=FLOOR(b.id*RAND())) LIMIT 50 我试验后发现一个问题,当你的表里的总数和想要得到的条数很接近时,可能会不理想,有可能你有10条,你想查出随机的8条时,却只给出了5条的结果. 应该是那个大于等于造成的吧. 还有p

mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入

mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入 直接上代码 BEGIN #定义一个变量来保存该记录是否存在 declare num int; #这条sql,就是查询对应的记录有多少条,注意 into num 这两句话,就是把count(*) 查出的值,赋给到num中 select count(*) into num from t_count_view where TO_DAYS(now())=TO_DAYS(day); #接下来的就是判断了,注意,判断是否等于,只有一

【转】PowerDesigner物理数据表生成C#实体类Model

model实体类是什么: 在三层架构UI,BLL,DAL中,有时用户插入一条记录到数据库中,必然会有不少数据,按正常编程,也必然会一下子调用某个函数传入不少参数.为了减少参数的数量,达到高效简洁的效果,一般会用model实体类作为传输数据的载体. model实体类一般对应着数据库里的字段,一个类实体对应一张表.比如:user数据表 有id,password,name,那么实体类usr也相应id,password,name属性来作为数据载体.但是有时我们在PowerDesigner设计的数据库表太

Maven项目中,使用mybatis,根据数据库自动生成pojo实体类、dao、mapper

一.首先,用eclipse创建一个maven项目. 二.其次,在pom.xml文件下,加入如下插件配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.ap

MyEclipse中hibernate通过数据库逆向生成java实体类

1.点击window->show view->DB Browser,然后出现如下窗口 右键空白处选择New,弹出如下窗口: 先点击Add JARs按钮,选择相应数据库的JDBC driver(因为我用的是MySQL,所以选择的是之前已经下好的JDBC driver),添加完JDBC driver后.然后选择Driver template,Driver name(任意填写),Connection URL.数据库用户名.数据库登录密码,然后点击点击Test Driver(测试一下数据库是否连接成功

在线数据库表(sql语句)生成java实体类工具

相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设计的一定是数据库表结构,而不是实体类.实体类仅仅是对底层数据结构的有损压缩,它仅仅是数据载体,不具备数据归档能力. 因此,很多时候,我们需要将原始的SQL建表语句转换成java实体类,这项工作看似简单,但若人工完成,工作量也是相当可观的,而且难免会出现差错. 到目前为止,笔者还没有发现比较靠谱的此类

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法