您的位置:首页 > 数据库

代码自动生成(-)数据库表字段转换成java bean

2017-02-21 15:13 453 查看
最近做系统老做一些相同的工作,就想写一自动生成代码的工具类来方便以后的开法,我从网上整理修改了一些方法感觉还不错,接下来我还陆续跟新一些
自动生成代码的工具类,希望对大家有用。觉得不好轻点喷。
import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;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 reflectBean {private Connection connection;private PreparedStatement UserQuery;/*mysql url的连接字符串*/private static String url = "jdbc:mysql://127.0.0.1:3306/wechat?useUnicode=true&characterEncoding=UTF-8";//账号private static String user = "root";//密码private static String password = "123456";private Vector<String> vector = new Vector<String>();//mysql jdbc的java包驱动字符串private String driverClassName = "com.mysql.jdbc.Driver";//数据库中的表名String table = "orderList";//数据库的列名称private String[] colnames; // 列名数组//列名类型数组private String[] colTypes;public reflectBean(){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); //获取字段名称System.out.println(colnames[i]);colTypes[i] = sqlType2JavaType(metadata.getColumnTypeName(i)); //获取字段类型System.out.println(metadata.getColumnTypeName(i));System.out.println(colTypes[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("int")){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 "Date";}else if(sqlType.equalsIgnoreCase("image")){return "Blod";}else if(sqlType.equalsIgnoreCase("timestamp")){return "Timestamp";}return null;}/*获取整个类的字符串并且输出为java文件* */public  StringBuffer getClassStr(){//输出的类字符串StringBuffer str = new StringBuffer("");//获取表类型和表名的字段名this.doAction();//校验if(null == colnames && null == colTypes) return null;//拼接str.append("public class "+GetTuoFeng(table)+" {\r\n");//拼接属性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("}\r\n");//输出到文件中File file = new File("E:/mengwx/【源码】mysql版本_spring4.0/FHMYSQL/src/com/fh/entity/"+GetTuoFeng(table)+".java");BufferedWriter write = null;try {write = new BufferedWriter(new FileWriter(file));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;\n\r", 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(){\n\r", new Object[]{type,Methodname});format += String.format("        return this.%s;\r\n", new Object[]{name});format += "    }\r\n";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){\n\r", new Object[]{Methodname,type,name});format += String.format("        this.%s = %s;\r\n", new Object[]{name,name});format += "    }\r\n";return new StringBuffer(format);}public static void main(String[] args) {reflectBean bean = new reflectBean();System.err.println(bean.getClassStr());}}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 数据库 bean
相关文章推荐