GVKun编程网logo

将SQL表转换为java bean类(sql转dsl java)

20

本篇文章给大家谈谈将SQL表转换为javabean类,以及sql转dsljava的知识点,同时本文还将给你拓展android-如何使用RxJava将双精度值的嵌套列表转换为Java类?、Excel数据

本篇文章给大家谈谈将SQL表转换为java bean类,以及sql转dsl java的知识点,同时本文还将给你拓展android-如何使用RxJava将双精度值的嵌套列表转换为Java类?、Excel数据转换为JavaBean对象、HashMap对象转换为JavaBean对象、java - 如何使用嵌套集模型将平面列表转换为Java中的嵌套树?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

将SQL表转换为java bean类(sql转dsl java)

将SQL表转换为java bean类(sql转dsl java)

关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。


想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。

2年前关闭。

改善这个问题

我正在使用大量SQL表在Web应用程序中工作。我需要为每个表创建一个Java bean类。我正在寻找一种可以将SQL表转换为Java
Bean类的工具。这将有助于节省时间。

这是一个例子:

studentTable(studentId,名字,姓氏,年份)

-->

public class Student {
    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int studentId;
    @Column
    private String firstname;
    @Column
    private String lastname;
    @Column
    private int yearLevel;

    public Student(){}
    public Student(int studentId,String firstname,String lastname,int yearLevel) {
        super();
        this.studentId = studentId;
        this.firstname = firstname;
        this.lastname = lastname;
        this.yearLevel = yearLevel;
    }
    public int getStudentId() {
        return studentId;
    }
    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }
    public String getFirstname() {
        return firstname;
    }
    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }
    public String getLastname() {
        return lastname;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public int getYearLevel() {
        return yearLevel;
    }
    public void setYearLevel(int yearLevel) {
        this.yearLevel = yearLevel;
    }
}

您对这种工具有任何想法吗?

android-如何使用RxJava将双精度值的嵌套列表转换为Java类?

android-如何使用RxJava将双精度值的嵌套列表转换为Java类?

在我的Android客户端中,我从后端收到此JSON数据:

[
    [
        1427378400000,
        553
    ],
    [
        1427382000000,
        553
    ]
]

这是实际加载数据的例程.我在这里使用RxAndroid和Retrofit.

private void getProductLevels() {
    Observable<List<List<Double>>> responSEObservable =
        mProductService.readProductLevels();
    AppObservable.bindFragment(this, responSEObservable)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        // Todo: Transform List<List<Double>> into List<ProductLevel>
        .subscribe(new Subscriber<List<List<Double>>>() {
            @Override
            public void onCompleted() {}

            @Override
            public void one rror(Throwable e) {}

            @Override
            public void onNext(List<List<Double>> response) {}
        });

}

如何映射内部List< Double>使用RxJava运算符转换到特定的java类(例如ProductLevel)?

public class ProductLevel {

    public Double mTimeStamp;
    public Double mLevel;

    public ProductLevel(Double timeStamp, Double level) {
        mTimeStamp = timeStamp;
        mLevel = level;
    }

}

最后,我想收到以下信息:List< ProductLevel>.

解决方法:

根据您的数据,您会收到一个配对列表(时间戳,级别).该对由仅包含2个值的列表表示.

因此,您要发出每对,并将每对转换为ProductLevel.

为此,您必须flatMap配对列表以发出每个配对.然后将每对映射到ProductLevel.最后,只需构建一个包含所有发射项目的列表.

(java8样式)

AppObservable.bindFragment(this, responSEObservable)
             .subscribeOn(Schedulers.io())
             .observeOn(AndroidSchedulers.mainThread())
             .flatMapIterable(listofList -> listofList) // or flatMap(l -> Observable.from(l))
             .map(pair -> new ProductLevel(pair.get(0),pair.get(1))) // build ProductLevel for each pair
             .toList() // build a list with all ProductLevel
             .subscribe(listofProductLevel -> /** ... **/);

Excel数据转换为JavaBean对象

Excel数据转换为JavaBean对象

package com.eigpay.framework.util.ExcelUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
 * <p>Title: ExcelUtil</p>
 * <p>Description: Excel数据转换为JavaBean对象</p>
 * 支持:Excel Date、Integer、Double、Float、Boolean类型
 * 支持:Excel2003-2007,再高版本未做测试
 * <p>Email: yuyue_qty@163.com</p>
 * @author 晴天雨
 * @date 2016年3月26日下午5:31:54
 * @version 1.0
 */
public class ExcelUtil<T> {
    
    private static final Logger logger = Logger.getLogger(ExcelUtil.class);
    
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
    /**
     * Excel数据转换为对象
     * <p>Description: </p>
     * @param file
     * @param t
     * @return
     * @throws Exception
     * @date 2016年3月26日下午4:18:20
     */
    public List<T> excel2OJavaBean(File file, Class<T> t) throws Exception{
        if(!file.exists()){
            throw new FileNotFoundException();
        }
        
        List<T> result = new ArrayList<T>();
        int beginRowNum = 1;
        String[][] data = getData(file, beginRowNum);
        int rowNum = data.length;
        if(rowNum < 2){
            throw new RuntimeException("Excel is not data.");
        }
        int cellNum = data[beginRowNum].length-1;
        if(rowNum < 1){
            throw new RuntimeException("Excel is not data.");
        }
        
        Field[] fields = t.getDeclaredFields();
        int propertyNum = fields.length;
        
        if(propertyNum < cellNum){
            logger.info("cellNum=" + cellNum + "  propertyNum=" + propertyNum);
            throw new RuntimeException("Excel column number is greater than the number of object properties.");
        }
        
        for(int x=0; x<rowNum; x++){
            T obj = t.newInstance();
            for(int y=0; y<cellNum; y++){
                Field field = fields[y];
                String fieldType = field.getGenericType().toString();
                Object value = data[x][y];
                if(fieldType.equals("class java.util.Date")){
                    value = strToDate(value);
                }else if(fieldType.equals("class java.lang.Integer")){
                    value = Integer.parseInt(value.toString());
                }else if(fieldType.equals("class java.lang.Double")){
                    value = Double.parseDouble(value.toString());
                }else if(fieldType.equals("class java.lang.Float")){
                    value = Float.parseFloat(value.toString());
                }else if(fieldType.equals("class java.lang.Boolean")){
                    value = Boolean.parseBoolean(value.toString());
                }
                field.setAccessible(true);
                field.set(obj, value);
                field.setAccessible(false);
            }
            result.add(obj);
        }
        return result;
    }
    
    public static String[][] getData(File file, int ignoreRows) {
        int rowSize = 0;
        List<String[]> result = new ArrayList<String[]>();
        InputStream in = null;
        try {
            in = new FileInputStream(file);
            Workbook wb = WorkbookFactory.create(in);
            if (wb instanceof XSSFWorkbook) {
                result = getXSSFResult(wb, ignoreRows);
            } else if (wb instanceof HSSFWorkbook) {
                result = getHSSFResult(wb, ignoreRows);
            }
            String[][] returnArray = new String[result.size()][rowSize];
            for (int i = 0; i < returnArray.length; i++) {
                returnArray[i] = (String[]) result.get(i);
            }
            return returnArray;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null)
                    in.close();
            } catch (Exception ex) {
            }
        }
        return new String[0][0];
    }
    public static List<String[]> getXSSFResult(Workbook wb, int ignoreRows) {
        List<String[]> result = new ArrayList<String[]>();
        XSSFCell cell = null;
        int rowSize = 0;
        for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
            XSSFSheet st = (XSSFSheet) wb.getSheetAt(sheetIndex);
            for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 第一行为标题,不取
                XSSFRow row = st.getRow(rowIndex);
                if (row == null) {
                    continue;
                }
                int tempRowSize = row.getLastCellNum() + 1;
                if (tempRowSize > rowSize) {
                    rowSize = tempRowSize;
                }
                String[] values = new String[rowSize];
                Arrays.fill(values, "");
                boolean hasValue = false;
                for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
                    String value = "";
                    cell = row.getCell(columnIndex);
                    if (cell != null) {
                        // cell.setEncoding(HSSFCell.ENCODING_UTF_16);//
                        // 注意:一定要设成这个,否则可能会出现乱码
                        switch (cell.getCellType()) {
                        case XSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue();
                            break;
                        case XSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值
                            if (!cell.getStringCellValue().equals("")) {
                                value = cell.getStringCellValue();
                            } else {
                                value = cell.getNumericCellValue() + "";
                            }
                            break;
                        case XSSFCell.CELL_TYPE_NUMERIC:
                            if (DateUtil.isCellDateFormatted(cell)) {
                                Date date = cell.getDateCellValue();
                                if (date != null) {
                                    value = sdf.format(date);
                                } else {
                                    value = "";
                                }
                            } else {
                                value = new DecimalFormat("0.00").format(cell
                                        .getNumericCellValue());
                                if (value.endsWith(".00")) {
                                    value = value.substring(0,
                                            value.length() - 3);
                                }
                            }
                            break;
                        case XSSFCell.CELL_TYPE_BLANK:
                            break;
                        case XSSFCell.CELL_TYPE_ERROR:
                            value = "";
                            break;
                        case XSSFCell.CELL_TYPE_BOOLEAN:
                            value = (cell.getBooleanCellValue() == true ? "Y"
                                    : "N");
                            break;
                        default:
                            value = "";
                        }
                    }
                    if (columnIndex == 0 && value.trim().equals("")) {
                        break;
                    }
                    values[columnIndex] = rightTrim(value);
                    hasValue = true;
                }
                if (hasValue) {
                    result.add(values);
                }
            }
        }
        return result;
    }
    @SuppressWarnings("deprecation")
    public static List<String[]> getHSSFResult(Workbook wb, int ignoreRows) {
        List<String[]> result = new ArrayList<String[]>();
        HSSFCell cell = null;
        int rowSize = 0;
        for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
            HSSFSheet st = (HSSFSheet) wb.getSheetAt(sheetIndex);
            for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 第一行为标题,不取
                HSSFRow row = st.getRow(rowIndex);
                if (row == null) {
                    continue;
                }
                int tempRowSize = row.getLastCellNum() + 1;
                if (tempRowSize > rowSize) {
                    rowSize = tempRowSize;
                }
                String[] values = new String[rowSize];
                Arrays.fill(values, "");
                boolean hasValue = false;
                for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
                    String value = "";
                    cell = row.getCell(columnIndex);
                    if (cell != null) {
                        // cell.setEncoding(HSSFCell.ENCODING_UTF_16);//注意:一定要设成这个,否则可能会出现乱码
                        switch (cell.getCellType()) {
                        case HSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                Date date = cell.getDateCellValue();
                                if (date != null) {
                                    value = sdf.format(date);
                                } else {
                                    value = "";
                                }
                            } else {
                                value = new DecimalFormat("0.00").format(cell.getNumericCellValue());
                                if (value.endsWith(".00")) {
                                    value = value.substring(0,value.length() - 3);
                                }
                            }
                            break;
                        case HSSFCell.CELL_TYPE_FORMULA:// 导入时如果为公式生成的数据则无值
                            if (!cell.getStringCellValue().equals("")) {
                                value = cell.getStringCellValue();
                            } else {
                                value = cell.getNumericCellValue() + "";
                            }
                            break;
                        case HSSFCell.CELL_TYPE_BLANK:
                            break;
                        case HSSFCell.CELL_TYPE_ERROR:
                            value = "";
                            break;
                        case HSSFCell.CELL_TYPE_BOOLEAN:
                            value = (cell.getBooleanCellValue() == true ? "Y"
                                    : "N");
                            break;
                        default:
                            value = "";
                        }
                    }
                    if (columnIndex == 0 && value.trim().equals("")) {
                        break;
                    }
                    values[columnIndex] = rightTrim(value);
                    hasValue = true;
                }
                if (hasValue) {
                    result.add(values);
                }
            }
        }
        return result;
    }
    /**
     * 去掉字符串右边的空格
     * 
     * @param str要处理的字符串
     * @return 处理后的字符串
     */
    public static String rightTrim(String str) {
        if (str == null) {
            return "";
        }
        int length = str.length();
        for (int i = length - 1; i >= 0; i--) {
            if (str.charAt(i) != 0x20) {
                break;
            }
            length--;
        }
        return str.substring(0, length);
    }
    /**
     * 字符串转Date
     * 字符串格式为:2016/03/26
     * <p>Description: </p>
     * @param str
     * @return
     * @date 2016年3月26日下午4:20:46
     */
    public static Date strToDate(Object str) {
        Date date = null;
        try {
            date = sdf.parse(str != null ? str
                  .toString().replaceAll("/", "-") : null);
        } catch (ParseException e) {
            logger.error(e.getMessage(), e);
        }
        return date;
    }
}

调用方法:

File file = new File("F:/upload/a.xlsx");
ExcelUtil<Payable> excelUtil = new ExcelUtil<Payable>();
List<Payable> payables = excelUtil.excel2OJavaBean(file, Payable.class);
for(Payable payable : payables){
    System.out.println(JSON.toJSON(payable));
}

打印结果:

{"acceptDate":1454085600000,"amount":55555,"buyerMsg":"aaaaaaa","buyerPayableId":"AAAAAAAAAA","isOK":false,"payableDate":1453737600000,"supplierMsg":"ddddddddd","supplierName":"A供应商","terraceProductId":"001"}
{"acceptDate":1454086200000,"amount":66666,"buyerMsg":"bbbbbbb","buyerPayableId":"BBBBBBBBBB","isOK":true,"payableDate":1453737600000,"supplierMsg":"ddddddddd","supplierName":"B供应商","terraceProductId":"001"}
{"acceptDate":1454084400000,"amount":77777,"buyerMsg":"ccccccc","buyerPayableId":"CCCCCCCCCC","isOK":false,"payableDate":1453737600000,"supplierMsg":"ddddddddd","supplierName":"C供应商","terraceProductId":"001"}

技术点:

使用到POI读取Excel文件,利用反射技术将Excel文件列数据赋给对象属性(要求Excel列字段顺序与对象属性顺序一致),将对象封装成List<T>返回。

Excel支持2003和2007,其他版本未测试,支持 Date、Integer、Double、Float、Boolean类型

HashMap对象转换为JavaBean对象

HashMap对象转换为JavaBean对象

问题:

  在日常代码中,使用 spring包中的 BeanUtils.copyProperties(source,target),可以将A对象的属性复制到B对象中,但是有个问题

无法将HashMap中的属性复制到JavaBan对象中

解决方法:

    引入 commons-beanutils依赖

<dependency>
      <groupId>commons-beanutils</groupId>
       <artifactId>commons-beanutils</artifactId>
        <version>1.9.3</version>
</dependency>

  使用 BeanUtils.populate(custVisitViewVO, map);可以将map复制到JavaBean中,注意第一个参数为target,第二个参数为source,与spring包中的BeanUtils正好相反

java - 如何使用嵌套集模型将平面列表转换为Java中的嵌套树?

java - 如何使用嵌套集模型将平面列表转换为Java中的嵌套树?

如何解决java - 如何使用嵌套集模型将平面列表转换为Java中的嵌套树??

我正在使用 nested set model 在我的 postgres 数据库中存储类别层次结构。我能够查询给定类别 ID 的树,并查看其所有子项及其所在的深度。该查询的响应如下所示:

[
    {
        "id": "07e0b6c2-49cd-440b-a900-0f3d7ab88022","categoryId": "80d15a99-9e42-4b72-b44b-0b222ca5173e","name": "Root","lft": 1,"rgt": 18,"depth": 0
    },{
        "id": "ae53be00-c312-4cd5-a6b2-6baeaf760577","categoryId": "9b8bca09-2447-494c-be0d-0b3af7d30671","name": "Cat A","lft": 2,"rgt": 9,"depth": 1
    },{
        "id": "0a5d4b90-29b9-4c50-a436-d129dc6983ea","categoryId": "d06a143b-523e-4136-8a17-1049abbf76f4","name": "Cat B","lft": 3,"rgt": 4,"depth": 2
    },{
        "id": "11421455-abc0-464c-8bd0-e2d79302c270","categoryId": "5af63d5b-f480-4620-8393-f4b93f7972e0","name": "Cat D","lft": 5,"rgt": 6,{
        "id": "4463dbce-a2bf-42fe-a864-59309ba54d22","categoryId": "21191930-a5b9-4868-883f-3798f29d70a3","name": "Cat E","lft": 7,"rgt": 8,{
        "id": "0f40e7a0-e6eb-44a4-a9bd-b61512daa236","categoryId": "34b127e8-7a8f-40b3-9b7e-63c8d507cc7b","name": "Cat F","lft": 10,"rgt": 11,{
        "id": "87e9991e-085c-47a5-8357-79c0e467b8ec","categoryId": "dfbbaac7-dda3-4f34-a787-183803f8e6fa","name": "Cat G","lft": 12,"rgt": 17,{
        "id": "8a95b0ab-cf74-4083-9d17-40e70468350a","categoryId": "f7f04485-d089-4a5d-98cd-20b0abeba8fc","name": "Cat H","lft": 13,"rgt": 14,{
        "id": "dccee476-af73-4eb6-a595-f862984d4af6","categoryId": "0eb165ec-0347-4336-8fc2-35c124bf26f2","name": "Cat I","lft": 15,"rgt": 16,"depth": 2
    }
]

您会注意到树已经变平了。我试图将上述结构放入一个嵌套的树结构中,我可以将其作为 JSON 返回到我的 UI。理想情况下看起来像这样(为简洁起见省略了数据):

[
    {
        "name": "Cat A","children": [
            {
                "name": "Cat B","children": [
                    {
                        "name": "Cat C"
                    },{
                        "name": "Cat D"
                    }
                ]
            },{
                "name": "Cat E","children": [
                    {
                        "name": "Cat F"
                    }
                ]
            }
        ]
    }
]

我尝试了很多选项,最近的一个是将原始列表流式传输到地图中,然后根据每个节点所在的深度收集其值。这并不能完全满足我的要求,因为它对处于同一级别但不一定属于同一树的节点进行分组。

List<List<CategoryTree>> listofLists = new ArrayList<>(
                categoryTreeList.stream()
                        .collect(Collectors.groupingBy(CategoryTree::getDepth))
                        .values());

似乎我应该尝试关闭 lftrgt 值,以确定给定列表中的节点是否有任何子节点,这些子节点将通过大于值 1。

我该如何解决这个问题?

解决方法

我建议您创建一个类来保存您的结构数据,而不是尝试使用原始地图。

class Node {
    private final String id;
    private final String category;
    private Node left = null;
    private Node right = null;

    public Node(String id,String category) {
        this.id = id;
        this.category = category;
    }

    // left and right setters
}

您需要分 2 次构建结构。

首先是创建节点并将它们添加到列表中,以便可以使用它们的索引。

List<Node> nodes = new ArrayList<>();
for (row: queryResult) {
    nodes.add(new Node(row.id(),row.category()));
}

在第二遍中构建结构:

int i = 0;
for (row: queryResult) {
    Node node = nodes.get(i++);
    if (row.lft())
        node.setLeft(nodes.get(row.lft()));
    if (row.rgt())
        node.setRight(nodes.get(row.rgt()));
}

有一些方法可以一次性完成,然后解析前向引用,但我真的怀疑这是否值得。

如果不能保证您的根节点是列表中的第一个节点,那么您需要查看列表,找到一个不是任何其他节点的子节点的节点。

真的没有必要存储或使用深度,除非您特别需要它来做其他事情。即便如此,除非保证结构是静态的,否则最好派生它(通过维护 parent 字段并沿层次结构向上走)。

转换为 json 最好使用一个库,例如 gson,然后使用递归转换整个结构的类的自定义转换器。

关于将SQL表转换为java bean类sql转dsl java的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android-如何使用RxJava将双精度值的嵌套列表转换为Java类?、Excel数据转换为JavaBean对象、HashMap对象转换为JavaBean对象、java - 如何使用嵌套集模型将平面列表转换为Java中的嵌套树?等相关知识的信息别忘了在本站进行查找喔。

本文标签: