zoukankan      html  css  js  c++  java
  • 简单的生成实体类的java工具类

    package util;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * @author bin.zhao
     * @description 读取文件中的字段, 生成符合我们使用的对应的实体类,命名规则小驼峰式(nameCode),生成加下划线的@JSONField(name = "name_code"),其他不变
     *              注意data.txt文件的第一行是要生成的class文件的名字,剩下的是文件的字段,目前只支持String类型,后续扩展各种类型
     *              目前默认读取工程目录下的data.txt文件,可根据需要改变读取路径
     *              生成的java文件也在工程目录下,可以根据需要调整
     * @date 2020/4/24
     */
    public class JavaToPoJo {
    
        private static List<String> attres = new ArrayList<>();
        private static StringBuilder sb = new StringBuilder();
    
        public static void main(String[] args) throws IOException {
            //获取字段构成的列表
            getAttrs();
            //创建文件;
            createFile();
            //生成文件
            writerFile();
            System.out.println(attres);
        }
    
        private static void writerFile() throws IOException {
            BufferedWriter bw = new BufferedWriter(new FileWriter(attres.get(0)+".java"));
            bw.write(sb.toString(),0,sb.length());
            bw.flush();
            bw.close();
        }
    
        //创建java实体类
        private static void createFile() {
            //生成头部
            sb.append("import com.alibaba.fastjson.annotation.JSONField;
    import java.io.Serializable;
    
    public class "+ attres.get(0) + " implements Serializable{
    ");
            sb.append("	private static final long serialVersionUID = 1L;
    
    ");
            //生成所有的属性
            createAttributes();
            //生成所有的get/set方法
            createMethods();
            //结尾
            sb.append("}");
        }
    
        //创建set/get方法
        private static void createMethods() {
            for (int i = 1; i < attres.size(); i++) {
                sb.append("	public String get"+toUpFirstLetter(attres.get(i))+"(){
    ");
                sb.append("		return "+attres.get(i)+";
    	}
    
    ");
                sb.append("	public void set"+toUpFirstLetter(attres.get(i))+"(String "+attres.get(i)+"){
    ");
                sb.append("		this."+attres.get(i)+" = "+attres.get(i)+";
    	}
    
    ");
            }
        }
    
        //首字母大写
        private static String toUpFirstLetter(String s) {
            char[] chars = s.toCharArray();
            if (chars[0] >= 'a' && chars[0] <= 'z'){
                chars[0] = (char)(chars[0]-32);
            }
            return new String(chars);
        }
    
        //创建所有的属性
        private static void createAttributes() {
            for (int i = 1; i < attres.size(); i++) {
                sb.append("	@JSONField(name = ""+subAttribute(attres.get(i))+"")
    ");
                sb.append("	private String "+ attres.get(i) + ";
    
    ");
            }
        }
    
        //根据大写首字母对字段进行分割并加下划线处理
        private static String subAttribute(String name){
            //创建一个匹配模式
            Pattern p = Pattern.compile("[A-Z]");
            //创建使用指定的正则模式的匹配器
            Matcher m = p.matcher(name);
            while(m.find()){//如果匹配上了返回true
                //根据匹配上的字符进行替换,加上_并转换为小写
                name = name.replaceFirst(m.group(),"_"+m.group().toLowerCase());
            }
            return name;
        }
    
        //按行读取文件内容,组成一个字段list
        private static void getAttrs() throws IOException {
            BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
            String s = "";
            while(true){
                s = reader.readLine();
                if (s==null) break;
                attres.add(s);
            }
            reader.close();
        }
    }
    

      

  • 相关阅读:
    java并发容器
    五种单例模式的写法
    Java中Volatile关键字
    Future模式实例
    mysql笔记
    亚马逊EC2服务器登录方法
    RSA加密方法java工具类
    Base64Util工具类
    maven命令创建项目
    关于spring事务注解
  • 原文地址:https://www.cnblogs.com/bin-zhao/p/12766734.html
Copyright © 2011-2022 走看看