java通过sql代码生成Dao和实体类

来源:互联网 发布:淘宝2元充值话费 编辑:程序博客网 时间:2024/06/06 01:24
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import Element.sqlElem;


/**
 * 必须新建一个实体类 实体类名称:sqlElem 
 * 内设字段如下: 
 * private String name;//
 * 字段名 private String cls;//类型
 * @author mfkwfc
 */
public class CreateElementandDao {
/**
* 开始读取文本文件第一步验证
*/
public void start(String url) {
File file = new File(url);
if (file.exists()
&& url.substring(url.length() - 3, url.length()).equals("txt")) {
try {
BufferedReader buff = new BufferedReader(new FileReader(file));
Map<String, List<sqlElem>> map = readtxt(buff);
if (map != null) {
String tempurl = url.substring(0, url.lastIndexOf("/") + 1);
readDao(map,tempurl);
readElement(map, tempurl);
}
} catch (FileNotFoundException e) {
System.out.println("读取失败了哦。");
e.printStackTrace();
}
} else {
System.out.println("该文件不存在哦或者后缀名错误");
}
}


/**
* 通过验证做读取动作
*/
private Map<String, List<sqlElem>> readtxt(BufferedReader buff) {
Map<String, List<sqlElem>> map = null;
try {
String tempSql = "";
while (buff.ready()) {
String text = buff.readLine();
tempSql += text;
}
buff.close();
String[] temps = tempSql.split(";");
for (String temp : temps) {
int len = temp.indexOf("table");
if (len == -1)// 可能会有创建数据库代码假如遇到则跳过
continue;
temp = temp.substring(len + 5, temp.length());// 剥第一层皮得到表名
int tablelen = temp.indexOf("(");
String tableName = temp.substring(0, tablelen).trim();// 获得表的名称
temp = temp.substring(tablelen + 1, temp.lastIndexOf(")"))
.trim();// 剥第二层皮得到里边的具体字段
String[] charat = temp.split(",");// 分割里边的具体字段
if (map == null)
map = new HashMap<String, List<sqlElem>>();
List<sqlElem> ls = null;
for (String ch : charat) {
if (ls == null)
ls = new ArrayList<sqlElem>();
ch = ch.trim();
sqlElem l = new sqlElem();
int t = ch.indexOf(" ");
l.setName(ch.substring(0, t).trim());// 存入字段名
ch = ch.substring(t, ch.length()).trim();
if (ch.indexOf("int") != -1)
l.setCls("int");
else if (ch.indexOf("date") != -1)
l.setCls("Date");
else if (ch.indexOf("bit") != -1)
l.setCls("boolean");
else if (ch.indexOf("varchar") != -1)
l.setCls("String");
else if (ch.indexOf("text") != -1)
l.setCls("String");
else if (ch.indexOf("float") != -1)
l.setCls("float");
ls.add(l);
}
map.put(tableName, ls);// 存入
}
} catch (IOException e) {
System.out.println("读取一行数据失败");
e.printStackTrace();
}
return map;
}


/**
* 建实体类

* @param map
*/
private void readElement(Map<String, List<sqlElem>> map, String url) {
File file = null;
PrintWriter out = null;
file = new File(url + "element");
file.mkdir();
for (String m : map.keySet()) {
file = new File(url + "element/" + m + ".java");
try {
if (file.exists())
file.delete();
List<sqlElem> ls = map.get(m);


file.createNewFile();
out = new PrintWriter(new BufferedWriter(new FileWriter(file)));
out.print("public class " + m + " {\n");
for (sqlElem l : ls) {
out.print("private " + l.getCls() + " " + l.getName()
+ ";\n");
}
out.print("\n}");
out.close();
System.out.println("写入实体类 " + m + " 完毕");
} catch (IOException e) {
System.out.println("创建实体类失败");
e.printStackTrace();
}
}
if (out != null)
out.close();
System.out.println("写入全部实体类完毕");
}


/**
* 建数据库

* @param map
*/
private void readDao(Map<String, List<sqlElem>> map, String url) {
File file = null;
PrintWriter out = null;
file = new File(url + "Dao");
file.mkdir();
for (String m : map.keySet()) {
file = new File(url + "Dao/" + m + "Dao.java");
try {
if (file.exists())
file.delete();
List<sqlElem> ls = map.get(m);
file.createNewFile();
out = new PrintWriter(new BufferedWriter(new FileWriter(file)));
String add="";
for(int i=0;i<ls.size();i++)
add+="?,";
add=add.substring(0,add.length()-1);//得到他有多少个参数
out.print("\nimport java.sql.SQLException;\nimport java.util.ArrayList;\nimport java.util.List;");
out.print("/**\n*此方法需要自己加载包\n*加载你的实体类和baseDao为继承连接方法\n**/");
//删除方法
out.print("public class " + m + "Dao  extends BaseDao{\n");
out.print("//删除方法");
out.print("\n public boolean "+m+"Delete(String id){");
out.print("boolean bl=false;");
out.print("String sql=\"delete from "+m+" where "+map.get(m).get(0).getName()+"=?\";\n");
out.print("try{\n");
out.print("ps=con.prepareStatement(sql);\n");
out.print("ps.setString(1,id);\n");
out.print("if(ps.executeUpdate()>0)\n");
out.print("bl=true;\n");
out.print("} catch (SQLException e) {e.printStackTrace();}");
out.print("myclose();\nreturn bl;\n}\n");
//新增方法
out.print("//新增方法");
out.print("\n public boolean "+m+"Add("+m+" my"+m+"){");
out.print("boolean bl=false;");
out.print("String sql=\"insert into "+m+" values(");
out.print(add+")\";\n");
out.print("try{\n");
out.print("ps=con.prepareStatement(sql);\n");
for(int i=0;i<ls.size();i++)
{
String tempName=ls.get(i).getName();
tempName=tempName.substring(0,1).toUpperCase()+tempName.substring(1,tempName.length());
if(ls.get(i).getCls().equals("boolean"))
out.print("ps.setBoolean("+(Integer.valueOf(i)+1)+",my"+m+".is"+tempName+"());\n");
else if(ls.get(i).getCls().equals("int"))
out.print("ps.setInt("+(Integer.valueOf(i)+1)+",my"+m+".get"+tempName+"());\n");
else if(ls.get(i).getCls().equals("float"))
out.print("ps.setFloat("+(Integer.valueOf(i)+1)+",my"+m+".get"+tempName+"());\n");
else if(ls.get(i).getCls().equals("Date"))
out.print("ps.setDate("+(Integer.valueOf(i)+1)+",new java.sql.Date(my"+m+".get"+tempName+"().getTime()));\n");
else
out.print("ps.setString("+(Integer.valueOf(i)+1)+",my"+m+".get"+tempName+"());\n");
}
out.print("if(ps.executeUpdate()>0)\n");
out.print("bl=true;\n");
out.print("} catch (SQLException e) {e.printStackTrace();}");
out.print("myclose();\nreturn bl;\n}\n");
//修改
out.print("//修改方法");
out.print("\n public boolean "+m+"Alert("+m+" my"+m+"){");
out.print("boolean bl=false;");
String alert="";
for(int i=1;i<ls.size();i++)
alert+=ls.get(i).getName()+"=?,";
alert=alert.substring(0,alert.length()-1);
out.print("String sql=\"update "+m+" set "+alert+" where "+ls.get(0).getName()+"=?\";\n");
out.print("try{\n");
out.print("ps=con.prepareStatement(sql);\n");
for(int i=0;i<ls.size();i++)
{
String tempName=ls.get(i).getName();
tempName=tempName.substring(0,1).toUpperCase()+tempName.substring(1,tempName.length());
int j=(Integer.valueOf(i)+1);
if(i==0)
j=ls.size();
else
j-=1;
if(ls.get(i).getCls().equals("boolean"))
out.print("ps.setBoolean("+j+",my"+m+".is"+tempName+"());\n");
else if(ls.get(i).getCls().equals("int"))
out.print("ps.setInt("+j+",my"+m+".get"+tempName+"());\n");
else if(ls.get(i).getCls().equals("float"))
out.print("ps.setFloat("+j+",my"+m+".get"+tempName+"());\n");
else if(ls.get(i).getCls().equals("Date"))
out.print("ps.setDate("+j+",new java.sql.Date(my"+m+".get"+tempName+"().getTime()));\n");
else
out.print("ps.setString("+j+",my"+m+".get"+tempName+"());\n");
}
out.print("if(ps.executeUpdate()>0)\n");
out.print("bl=true;\n");
out.print("} catch (SQLException e) {e.printStackTrace();}");
out.print("myclose();\nreturn bl;\n}\n");
//查询数据
out.print("//查询数据");
out.print("\n public List<"+m+"> "+m+"Find(){");
out.print(" List<"+m+"> ls=null;");
out.print("String sql=\"select * from "+m+"\";\n");
out.print("try{\n");
out.print("ps=con.prepareStatement(sql);\n");
out.print("rs=ps.executeQuery();\n");
out.print("while(rs.next()){\n");
out.print("if(ls==null) ls=new ArrayList<"+m+">();");
out.print(m+" my"+m+"=new "+m+"();\n");
for(sqlElem l:ls){
String tempName=l.getName();
tempName=tempName.substring(0,1).toUpperCase()+tempName.substring(1,tempName.length());
String cls=l.getCls();
cls=cls.substring(0,1).toUpperCase()+cls.substring(1,cls.length());
out.print("my"+m+".set"+tempName+"(rs.get"+cls+"(\""+l.getName()+"\"));\n");
}
out.print("ls.add(my"+m+");\n");
out.print("}");
out.print("} catch (SQLException e) {e.printStackTrace();}");
out.print("myclose();\nreturn ls;\n}\n");
//查询通过单条数据
out.print("//查询单条数据");
out.print("\n public "+m+" "+m+"Findone(String id){");
out.print(" "+m+" ls=new "+m+"();");
out.print("String sql=\"select * from "+m+" where "+ls.get(0).getName()+"=?\";\n");
out.print("try{\n");
out.print("ps=con.prepareStatement(sql);\n");
out.print("ps.setString(1,id);\n");
out.print("rs=ps.executeQuery();\n");
out.print("if(rs.next()){\n");
for(sqlElem l:ls){
String tempName=l.getName();
tempName=tempName.substring(0,1).toUpperCase()+tempName.substring(1,tempName.length());
String cls=l.getCls();
cls=cls.substring(0,1).toUpperCase()+cls.substring(1,cls.length());
out.print("ls.set"+tempName+"(rs.get"+cls+"(\""+l.getName()+"\"));\n");
}
out.print("}");
out.print("} catch (SQLException e) {e.printStackTrace();}");
out.print("myclose();\nreturn ls;\n}\n");
out.print("\n}");


out.close();
System.out.println("写入数据库类 " + m + "Dao 完毕");
} catch (IOException e) {
System.out.println("创建数据库类失败");
e.printStackTrace();
}
}
if (out != null)
out.close();
System.out.println("写入全部数据库类完毕");

}

}


只需要调用他的stratr()方法

然后要写一个实体类。。

原创粉丝点击