zoukankan      html  css  js  c++  java
  • 数据库表到java类转换工具

    //该工具类可以实现:给定一个指定的数据库表名,即可自动生成对应的java实体类
    package com.iamzken.utils;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.net.URL;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.Vector;
    
    public class DB2JavaConvertor {
    	private Connection connection;
    	private PreparedStatement UserQuery;
    	/*mysql url的连接字符串*/
    	private static String url = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true";
    	//账号
    	private static String user = "root";
    	//密码
    	private static String password = "";
    	private Vector<String> vector = new Vector<String>();
    	//mysql jdbc的java包驱动字符串
    	private String driverClassName = "com.mysql.jdbc.Driver";
    	//数据库中的表名
    	String table = "teacher";
    	//数据库的列名称
    	private String[] colnames; // 列名数组
    	//列名类型数组  
    	private String[] colTypes;
    	public DB2JavaConvertor(){
    		try {//驱动注册
    			Class.forName(driverClassName);
    			if (connection == null || connection.isClosed())
    				//获得链接
    				connection = DriverManager.getConnection(url, user, password);
    		} catch (ClassNotFoundException ex) {
    				ex.printStackTrace();
    				System.out.println("Oh,not");
    			} catch (SQLException e) {
    				e.printStackTrace();
    				System.out.println("Oh,not");
    			}
    	}
    	
    	public Connection getConnection() {
    		return connection;
    	}
    	public void setConnection(Connection connection) {
    		this.connection = connection;
    	}
    
    	public void doAction(){
    		String sql = "select * from "+table;
    		try {
    			PreparedStatement statement = connection.prepareStatement(sql);
    			//获取数据库的元数据 
    			ResultSetMetaData metadata = statement.getMetaData();
    			//数据库的字段个数
    			int len = metadata.getColumnCount();
    			//字段名称
    			colnames = new String[len+1];
    			//字段类型 --->已经转化为java中的类名称了
    			colTypes = new String[len+1];
    			for(int i= 1;i<=len;i++){
    				//System.out.println(metadata.getColumnName(i)+":"+metadata.getColumnTypeName(i)+":"+sqlType2JavaType(metadata.getColumnTypeName(i).toLowerCase())+":"+metadata.getColumnDisplaySize(i));
    				//metadata.getColumnDisplaySize(i);
    				colnames[i] = metadata.getColumnName(i); //获取字段名称
    				colTypes[i] = sqlType2JavaType(metadata.getColumnTypeName(i)); //获取字段类型		
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    	/*
    	 * mysql的字段类型转化为java的类型*/
    	private String sqlType2JavaType(String sqlType) {  
            
            if(sqlType.equalsIgnoreCase("bit")){  
                return "boolean";  
            }else if(sqlType.equalsIgnoreCase("tinyint")){  
                return "byte";  
            }else if(sqlType.equalsIgnoreCase("smallint")){  
                return "short";  
            }else if(sqlType.equalsIgnoreCase("INTEGER")){  
                return "int";  
            }else if(sqlType.equalsIgnoreCase("bigint")){  
                return "long";  
            }else if(sqlType.equalsIgnoreCase("float")){  
                return "float";  
            }else if(sqlType.equalsIgnoreCase("decimal") || sqlType.equalsIgnoreCase("numeric")   
                    || sqlType.equalsIgnoreCase("real") || sqlType.equalsIgnoreCase("money")   
                    || sqlType.equalsIgnoreCase("smallmoney")){  
                return "double";  
            }else if(sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")   
                    || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")   
                    || sqlType.equalsIgnoreCase("text")){  
                return "String";  
            }else if(sqlType.equalsIgnoreCase("datetime") ||sqlType.equalsIgnoreCase("date")){  
                return "java.util.Date";  
            }else if(sqlType.equalsIgnoreCase("image")){  
                return "Blod";  
            }  
              
            return null;  
        }
    	/*获取整个类的字符串并且输出为java文件
    	 * */
    	public  StringBuffer getClassStr(){
    		String className = table.substring(0,1).toUpperCase()+table.substring(1);
    		//输出的类字符串
    		StringBuffer str = new StringBuffer("");
    		//获取表类型和表名的字段名
    		this.doAction();
    		//校验
    		if(null == colnames && null == colTypes) return null;
    		
    		str.append(this.getClass().getPackage()+";
    
    ");
    		//拼接
    		str.append("public class "+className+" {
    ");
    		//拼接属性
    		for(int index=1; index < colnames.length ; index++){
    			str.append(getAttrbuteString(colnames[index],colTypes[index]));
    		}
    		//拼接get,Set方法		
    		for(int index=1; index < colnames.length ; index++){
    			str.append(getGetMethodString(colnames[index],colTypes[index]));
    			str.append(getSetMethodString(colnames[index],colTypes[index]));
    		}
    		str.append("}
    ");
    		//输出到文件中
    		String s1 = DB2JavaConvertor.class.getPackage().getName().replace(".", "\");
    		String s2 = "src"+File.separator+"main"+File.separator+"java"+File.separator+s1;
    		String s3 =   System.getProperty("user.dir")+File.separator+s2;  
    		File file = new File(s3);
    		if(!file.exists()){
    			file.mkdirs();
    		}
    		BufferedWriter write = null;
    
    		try {
    			write = new BufferedWriter(new FileWriter(new File(s3+File.separator+className+".java")));
    			write.write(str.toString());
    			write.close();
    		} catch (IOException e) {
    
    			e.printStackTrace();
    			if (write != null)
    				try {
    					write.close();
    				} catch (IOException e1) {			
    					e1.printStackTrace();
    				}
    		}
    		return str;
    	}
    	/*
    	 * 获取字段字符串*/
    	public StringBuffer getAttrbuteString(String name, String type) {
    		if(!check(name,type)) {
    			System.out.println("类中有属性或者类型为空");
    			return null;
    		};
    		String format = String.format("    private %s %s;
    
    ", new String[]{type,name});
    		return new StringBuffer(format);
    	}
    	/*
    	 * 校验name和type是否合法*/
    	public boolean check(String name, String type) {
    		if("".equals(name) || name == null || name.trim().length() ==0){
    			return false;
    		}
    		if("".equals(type) || type == null || type.trim().length() ==0){
    			return false;
    		}
    		return true;
    		
    	}
    	/*
    	 * 获取get方法字符串*/
    	private StringBuffer getGetMethodString(String name, String type) {
    		if(!check(name,type)) {
    			System.out.println("类中有属性或者类型为空");
    			return null;
    		};
    		String Methodname = "get"+GetTuoFeng(name);
    		String format = String.format("    public %s %s(){
    
    ", new Object[]{type,Methodname});
    		format += String.format("        return this.%s;
    ", new Object[]{name});
    		format += "    }
    ";
    		return new StringBuffer(format);
    	}
    	//将名称首字符大写
    	private String GetTuoFeng(String name) {
    		name = name.trim();
    		if(name.length() > 1){
    			name = name.substring(0, 1).toUpperCase()+name.substring(1);
    		}else
    		{
    			name = name.toUpperCase();
    		}
    		return name;
    	}
    	/*
    	 * 获取字段的get方法字符串*/
    	private Object getSetMethodString(String name, String type) {
    		if(!check(name,type)) {
    			System.out.println("类中有属性或者类型为空");
    			return null;
    		};
    		String Methodname = "set"+GetTuoFeng(name);
    		String format = String.format("    public void %s(%s %s){
    
    ", new Object[]{Methodname,type,name});
    		format += String.format("        this.%s = %s;
    ", new Object[]{name,name});
    		format += "    }
    ";
    		return new StringBuffer(format);
    	}
    
    	public static void main(String[] args) throws IOException {
    		DB2JavaConvertor bean = new DB2JavaConvertor();
    		System.err.println(bean.getClassStr());
    		//System.out.println(ReflectBean.class.getPackage());
    		//System.out.println(ReflectBean.class.getPackage().getName());
    		//System.out.println(ReflectBean.class.getResource("").getPath());
    //		File directory = new File("");//参数为空 
    //		String courseFile = directory.getCanonicalPath() ; 
    //		System.out.println(courseFile); 
    //		
    //		
    //		File f = new File(ReflectBean.class.getResource("").getPath()); 
    //		System.out.println(f);
    //		
    //		
    //		URL xmlpath = ReflectBean.class.getClassLoader().getResource(""); 
    //		System.out.println(xmlpath);
    //		
    //		String s1 = directory.getAbsolutePath();
    //		System.out.println(s1);
    	/*	String s3 = ReflectBean.class.getPackage().getName().replace(".", "\");
    		String s2 =   System.getProperty("user.dir")+File.separator+s3;  
    		System.out.println(s2);*/
    	}
    	
    }
    

  • 相关阅读:
    AtCoder Beginner Contest 167
    AtCoder Beginner Contest 166
    AtCoder Beginner Contest 165
    AtCoder Beginner Contest 164
    AtCoder Beginner Contest 163
    AtCoder Beginner Contest 162
    AtCoder Beginner Contest 161
    AtCoder Beginner Contest 160
    AtCoder Beginner Contest 159
    自定义Mybatis自动生成代码规则
  • 原文地址:https://www.cnblogs.com/iamconan/p/7383525.html
Copyright © 2011-2022 走看看