JavaWeb自动生成PO文件

JavaWeb自动生成PO文件

在做javaweb中,需要建立与数据库中的表相映射的java对象也就是PO。在一个项目中往往一个数据有上百张的表,如果需要PO都要一个一个手动建立PO,这样操作起来非常麻烦也很浪费时间。

对与这种简单的重复操作就应该想办法进行封装,于是我就直接通过Java代码去自动生成项目所需的PO文件。
项目地址:https://github.com/xutaoqq/JAVA_mypackage

封装

主方法

private static Connection con = null;
private static ResultSet rs = null; 
private static ResultSet bs = null; 
private static DatabaseMetaData dma = null; 

//传入 Connection 与要生成PO的存放包名
public static void FoundPo(Connection conts,String Paurl) {
	try {  
		con = conts;
		dma = con.getMetaData();//获取数据库的元数据 
        //将包名.转换为路径\\
		String Paurlnj=Paurl.replace(".", "\\");
		//放入src目录
		String path = ".\\src\\"+Paurlnj;
		//判断目录是否存在,不存在则创建
		File directory = new File(path);
		if(!directory.exists()){ 
			directory.mkdirs(); //创建目录
		}
		
		//读取数据库的表
	    rs = dma.getTables(null, null, null, new String[]{"TABLE"});
		while(rs.next()){
	 	    //获取表名
			String bname = (String) rs.getObject("TABLE_NAME");  			
			bname=capital(bname);//将表名首字母大写,适应命名规范
			String filenameTemp = path + "\\"+bname+"Po.java";
			String vostr = "package "+Paurl+";\nimport java.io.Serializable;\n\npublic class "+bname+"Po implements Serializable{ \n\n\tprivate static final long serialVersionUID = 1L;";
			String toubu = "";
			String read = "";
			String write = "";
			//读取表的每一列 
			bs = dma.getColumns(null, "%",bname, "%");
	        while(bs.next()){          
	            String columnName = bs.getString("COLUMN_NAME");//列名	         
	            String typeName = bs.getString("TYPE_NAME");//列的数据类型
	            String remarks = bs.getString("REMARKS");//列的备注
	            String ltype = typepd(typeName);//MySQL类型与java类型进行转换
	            //拼接po代码
	            toubu+="\n\t//-- "+remarks+" --\n\tprivate " + ltype+" "+columnName+";";
	            read += "\n\n\tpublic" + " " + ltype + " get" + columnName+ "() {\n\t\treturn " + columnName + ";\n\t}";
	            write += "\n\n\tpublic" + " void " + "set" + columnName + "("+ ltype + " " + columnName + ")" + "{\n\t\tthis." + columnName+ " = " + columnName + ";\n\t}";
	        }
	        vostr+=toubu+read+write+"\n}";
	        //调用封装方法,生成最终po文件
	        File file = new File(filenameTemp);
			try {
				if (!file.exists()) {  
					file.createNewFile();
					writeFileContent(filenameTemp, vostr);
				} else {
					autoReplace(filenameTemp, vostr);
				} 
			} catch (Exception e) {
				e.printStackTrace();
			}
			System.out.println("✔ "+bname+"表 PO创建成功 :"+filenameTemp);
		}
		System.out.println("\n✔ 数据库PO创建完成! ------- SetPo_XT");
	} catch (Exception  e) {
		e.printStackTrace();
	} finally { 
	    //关闭流
		try { 
			if (rs != null) {
				rs.close();
			}
			if (con != null) {
				con.close();
			}
			if (bs != null) {
				bs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

MySQL数据类型与java数据类型转换

//常用类型,还有很多类型没判断
  public static String typepd(String sqltype){
    	String jatype="";
    	if(sqltype.equals("INT"){
   		jatype="int";
	   	}else if(sqltype.equals("INTEGER")){ 
	   		jatype="long";
	   	}else if(sqltype.equals("FLOAT")){
	   		jatype="float";
	   	}else if(sqltype.equals("DOUBLE")){
	   		jatype="double"; 
	   	}else if(sqltype.equals("BIT")){
	   		jatype="boolean";
	   	}else{
	   		jatype="String";
	   	}
   	return jatype;
}

首字母大写
表名首字母大写,适应java命名规范

 public static String capital(String ostr){
  	String nestr=ostr.toUpperCase();
  	String sd=nestr.substring(0,1);
  	String newstr=sd+ostr.substring(1);
  	return newstr;
}

使用实例

//引入封装好的SetPo_XT包
import com.xt.jdbc.SetPo_XT;
//链接数据库
conn= DriverManager.getConnection(url, user, password);
//调用SetPo_XT的FoundPo()
SetPo_XT.FoundPo(conn, "com.xt.po");

控制器实时输出状态
在这里插入图片描述
执行完成后刷新项目目录
PO自动生成成功
在这里插入图片描述
这是自动生成的PO代码
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值