您的位置:首页 > 编程语言 > Java开发

java通过实体类自动生成ibatis文件

2014-04-15 20:08 447 查看
package generate;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;

import org.apache.log4j.Logger;
/**
*
* @ProjectName:GenerateFile
* @Author:tangwzh
* @Description: TODO
* @Version:V1.0
* @Date:2014-5-20 下午2:54:24
*/
public class GenerateSql {
private static final Logger LOGGER = Logger.getLogger(Thread
.currentThread().getStackTrace()[1].getClassName());
/*public static void main(String[] args) {
String filePath = "C:\\Users\\inrtyx\\Desktop";
generateSqlFile(filePath, "RESOURCE", "generate.Resource");
}*/
/**
*
* @param sqlFilePath 生成的sql路径
* @param tableName 表名
* @param modelQualityName 实体类全名
*/
public static void generateSqlFile(String sqlFilePath, String tableName, String modelQualityName){
String lowerCaseName = tableName.toLowerCase();
String fileName = sqlFilePath + "/" + lowerCaseName + ".sql";
File file = new File(fileName);
if(!file.exists()){
try {
boolean isSuccess = file.createNewFile();
if(!isSuccess){
LOGGER.error("创建sql文件失败");
return;
}
} catch (IOException e) {
e.printStackTrace();
LOGGER.error("create sql file error:", e);
}
}
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(file);

//文件开始
generateHeaderSql(modelQualityName, lowerCaseName, fileWriter);

//select语句
generateSelectSql("select", modelQualityName, lowerCaseName, fileWriter);

//select count语句
generateSelectSql("selectCount", modelQualityName, lowerCaseName, fileWriter);

//update语句
generateUpdateSql(modelQualityName, lowerCaseName, fileWriter);

//insert语句
generateInsertSql(modelQualityName, lowerCaseName, fileWriter);

//delete语句
generateDeleteSql(lowerCaseName, fileWriter);

//文件结束
generateEndSql(fileWriter);
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e);
}finally{
try {
if(fileWriter != null){
fileWriter.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}

}
private static void generateDeleteSql(String lowerCaseName,
FileWriter fileWriter) throws IOException {
String upperCaseName = lowerCaseName.toUpperCase();
String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
String deleteId = "delete" + fistLetter + lowerCaseName.substring(1);
//delete头
printTab(fileWriter, 1);
fileWriter.write("<insert id=\"" + deleteId + "\" parameterClass=\"java.util.Map\">");

//delete语句
printTab(fileWriter, 2);
fileWriter.write("DELETE FROM " + upperCaseName);

//生成where语句
generateWhereSql(lowerCaseName, fileWriter);

//结束
printTab(fileWriter, 1);
fileWriter.write("</delete>");

}
private static void generateInsertSql(String modelQualityName,
String lowerCaseName, FileWriter fileWriter) throws ClassNotFoundException, IOException {
String upperCaseName = lowerCaseName.toUpperCase();
String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
String insertId = "insert" + fistLetter + lowerCaseName.substring(1);
//insert头
printTab(fileWriter, 1);
fileWriter.write("<insert id=\"" + insertId + "\" parameterClass=\""+ lowerCaseName +"\">");

//insert语句
printTab(fileWriter, 2);
fileWriter.write("<![CDATA[");

Class<?> c = Class.forName(modelQualityName);
Field[] fields = c.getDeclaredFields();
StringBuilder sb = new StringBuilder("INSERT INTO ");
sb.append(upperCaseName).append("(");
String fieldName = "";
for(Field field: fields){
sb.append("\n").append("\t").append("\t").append("\t").append("\t");
fieldName = field.getName();
sb.append(fieldName).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("\n").append("\t").append("\t").append("\t");
sb.append(")").append("VALUES(");
for(Field field: fields){
sb.append("\n").append("\t").append("\t").append("\t").append("\t");
fieldName = field.getName();
if("createTime".equals(fieldName) || "updateTime".equals(fieldName)){
sb.append("NOW()").append(",");
continue;
}
sb.append("#").append(fieldName).append("#").append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("\n").append("\t").append("\t").append("\t");
sb.append(")");

printTab(fileWriter, 3);
fileWriter.write(sb.toString());

printTab(fileWriter, 2);
fileWriter.write("]]>");

//结束
printTab(fileWriter, 1);
fileWriter.write("</insert>");
}
private static void generateUpdateSql(String modelQualityName,
String lowerCaseName, FileWriter fileWriter) throws IOException, ClassNotFoundException {
String upperCaseName = lowerCaseName.toUpperCase();
String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
String updateId = "update" + fistLetter + lowerCaseName.substring(1);

//update头
printTab(fileWriter, 1);
fileWriter.write("<update id=\"" + updateId + "\" parameterClass=\"java.util.Map\">");

//update语句
printTab(fileWriter, 2);
fileWriter.write("UPDATE " + upperCaseName);

//set语句
generateWhereOrSetSql("set", lowerCaseName, modelQualityName, fileWriter);

//生成where语句
generateWhereSql(lowerCaseName, fileWriter);

//结束
printTab(fileWriter, 1);
fileWriter.write("</update>");
}
private static void generateWhereSql(String lowerCaseName,
FileWriter fileWriter) throws IOException {
printTab(fileWriter, 2);
fileWriter.write("<dynamic prepend=\"WHERE\">");
String id = lowerCaseName + "Id";
printTab(fileWriter, 3);
fileWriter.write("<isNotEmpty prepend=\"AND\" property=\"" + id + "\">");
printTab(fileWriter, 4);
fileWriter.write(id.toUpperCase() + "= #" + id + "#");
printTab(fileWriter, 3);
fileWriter.write("</isNotEmpty>");
printTab(fileWriter, 2);
fileWriter.write("</dynamic>");
}
private static void generateEndSql(FileWriter fileWriter) throws IOException {
printTab(fileWriter, 0);
fileWriter.write("</sqlMap>");
}
private static void generateSelectSql(String type, String modelQualityName,
String lowerCaseName, FileWriter fileWriter) throws IOException, ClassNotFoundException {
String upperCaseName = lowerCaseName.toUpperCase();
String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
//例如,selecterResources
String selectedId = "select" + fistLetter + lowerCaseName.substring(1) + "s";
printTab(fileWriter, 1);

//select语句
if("select".equals(type)){//select语句
fileWriter.write("<select id=\"" + selectedId + "\" parameterClass=\"java.util.Map\" resultClass=\""+ lowerCaseName +"\">");
printTab(fileWriter, 2);
fileWriter.write("<![CDATA[ SELECT * FROM " + upperCaseName + "]]>");
}else{
fileWriter.write("<select id=\"" + selectedId + "Count" + "\" parameterClass=\"java.util.Map\" resultClass=\"int\">");
printTab(fileWriter, 2);
fileWriter.write("<![CDATA[ SELECT COUNT(*) FROM " + upperCaseName + "]]>");
}
//where语句
generateWhereOrSetSql("where", lowerCaseName, modelQualityName, fileWriter);

//结束标签
printTab(fileWriter, 1);
fileWriter.write("</select>");
}
private static void generateWhereOrSetSql(String type, String lowerCaseName, String modelQualityName,
FileWriter fileWriter) throws IOException, ClassNotFoundException {
printTab(fileWriter, 2);
if("where".equals(type)){
fileWriter.write("<dynamic prepend=\"WHERE\">");
}else{
fileWriter.write("<dynamic prepend=\"SET\">");
}

Class<?> c = Class.forName(modelQualityName);
Field[] fields = c.getDeclaredFields();
String fieldName = null;
for(Field field: fields){
fieldName = field.getName();
if("where".equals(type)){
printTab(fileWriter, 3);
fileWriter.write("<isNotEmpty prepend=\"AND\" property=\"" + fieldName + "\">");
}else{
String id = lowerCaseName + "Id";
if(id.equals(fieldName)){
continue;
}
printTab(fileWriter, 3);
fileWriter.write("<isNotEmpty prepend=\",\" property=\"" + fieldName + "\">");
}
printTab(fileWriter, 4);
fileWriter.write(fieldName.toUpperCase() + "=#" + fieldName + "#");
printTab(fileWriter, 3);
fileWriter.write("</isNotEmpty>");
}
printTab(fileWriter, 2);
fileWriter.write("</dynamic>");
}
private static void printTab(FileWriter fileWriter, int count) throws IOException {
fileWriter.write("\n");
for(int i = 0 ; i < count; i++){
fileWriter.write("\t");
}
}
private static void generateHeaderSql(String modelQualityName,
String lowerCaseName, FileWriter fileWriter) throws IOException {
fileWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
fileWriter.write("\n");
fileWriter.write("<!DOCTYPE sqlMap PUBLIC \"-//ibatis.apache.org//DTD SQL Map 2.0//EN\" \"http://ibatis.apache.org/dtd/sql-map-2.dtd\">");
fileWriter.write("\n");
fileWriter.write("<sqlMap namespace=\"" + lowerCaseName + "\">");
fileWriter.write("\n");
fileWriter.write(" ");
fileWriter.write("	<typeAlias alias=\"" + lowerCaseName + "\" type=\""+ modelQualityName  +"\" />");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: