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:testttt
* @author:tangwzh
* @createTime:2014-5-19 上午11:21:03
* @function: 利用反射自動生成service.java和serviceImpl.java
* @version:
*/
public class GenerateService {
private static final Logger LOGGER = Logger.getLogger(Thread
.currentThread().getStackTrace()[1].getClassName());
/**
*
* @param ServiceFilePath
* @param tableName
* @param modelQualityName
* @throws ClassNotFoundException
*/
public static void generateServiceFile(String serviceFilePath, String tableName, String modelQualifiedName) throws ClassNotFoundException{
String lowerCaseName = tableName.toLowerCase();
String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
String name = fistLetter + lowerCaseName.substring(1);
String fileName = serviceFilePath + "/" + name + "Service.java";
File file = new File(fileName);
if(!file.exists()){
try {
boolean isSuccess = file.createNewFile();
if(!isSuccess){
LOGGER.error("創建Service文件失敗");
return;
}
} catch (IOException e) {
e.printStackTrace();
LOGGER.error("create Service file error:", e);
}
}
FileWriter fileWriter = null;
String commonFields = getFields(modelQualifiedName);
try {
fileWriter = new FileWriter(file);
fileWriter.write("\n");
fileWriter.write("public interface " + name + "Service {");
//get方法,支持排序
printTab(fileWriter, 1);
fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields +
", String sort, String order);");
fileWriter.write("\n");
//get方法,支持排序和分頁
printTab(fileWriter, 1);
fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields +
", String sort, String order, int startrow, int pagesize);");
fileWriter.write("\n");
//getCount方法
printTab(fileWriter, 1);
fileWriter.write("public int get" + name + "sCount(" + commonFields +");");
fileWriter.write("\n");
//add方法
printTab(fileWriter, 1);
fileWriter.write("public void add" + name + "(" + commonFields + ");");
fileWriter.write("\n");
//mod方法
printTab(fileWriter, 1);
fileWriter.write("public void mod" + name + "(" + commonFields + ");");
fileWriter.write("\n");
//mod方法
printTab(fileWriter, 1);
fileWriter.write("public void del" + name + "(String " + name + "Id);");
fileWriter.write("\n");
//結束
fileWriter.write("}");
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e);
}finally{
try {
if(fileWriter != null){
fileWriter.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
public static void generateServiceImplFile(String serviceFilePath, String tableName, String modelQualifiedName) throws ClassNotFoundException{
String lowerCaseName = tableName.toLowerCase();
String fistLetter = lowerCaseName.substring(0,1).toUpperCase();
String name = fistLetter + lowerCaseName.substring(1);
String fileName = serviceFilePath + "/" + name + "ServiceImpl.java";
File file = new File(fileName);
if(!file.exists()){
try {
boolean isSuccess = file.createNewFile();
if(!isSuccess){
LOGGER.error("創建ServiceImpl文件失敗");
return;
}
} catch (IOException e) {
e.printStackTrace();
LOGGER.error("create ServiceImpl file error:", e);
}
}
FileWriter fileWriter = null;
String commonFields = getFields(modelQualifiedName);
try {
fileWriter = new FileWriter(file);
//開始
implStart(name, fileWriter);
//get方法,支持排序
selectOrder(modelQualifiedName, name, fileWriter, commonFields);
//get方法,支持排序和分頁
selectOrderAndPage(modelQualifiedName, name, fileWriter, commonFields);
//getCount方法
selectCount(modelQualifiedName, name, fileWriter, commonFields);
//add方法
insert(modelQualifiedName, name, fileWriter, commonFields);
//mod方法
update(modelQualifiedName, name, fileWriter, commonFields);
//delete方法
delete(name, fileWriter);
//結束
fileWriter.write("}");
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e);
}finally{
try {
if(fileWriter != null){
fileWriter.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
private static void delete(String name, FileWriter fileWriter)
throws IOException {
printTab(fileWriter, 1);
fileWriter.write("@Override");
printTab(fileWriter, 1);
fileWriter.write("public void del" + name + "(String " + name.toLowerCase() + "Id){");
printTab(fileWriter, 2);
fileWriter.write("Map<String, Object> index = new HashMap<String, Object>();");
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_STRING_NULL != " + name.toLowerCase() + "Id){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"" + name.toLowerCase() + "Id\", " + name.toLowerCase() + "Id);");
printTab(fileWriter, 2);
fileWriter.write("}");
printTab(fileWriter, 1);
printTab(fileWriter, 2);
fileWriter.write(name.toLowerCase() + "Dao.delete" + name + "(index);");
printTab(fileWriter, 1);
fileWriter.write("}");
fileWriter.write("\n");
}
private static void update(String modelQualifiedName, String name,
FileWriter fileWriter, String commonFields) throws IOException,
ClassNotFoundException {
printTab(fileWriter, 1);
fileWriter.write("@Override");
printTab(fileWriter, 1);
fileWriter.write("public void mod" + name + "(" + commonFields + "){");
printTab(fileWriter, 0);
fileWriter.write(generateValid(modelQualifiedName));
printTab(fileWriter, 1);
printTab(fileWriter, 2);
fileWriter.write(name.toLowerCase() + "Dao.update" + name + "(index);");
printTab(fileWriter, 1);
fileWriter.write("}");
fileWriter.write("\n");
}
private static void insert(String modelQualifiedName, String name,
FileWriter fileWriter, String commonFields) throws IOException,
ClassNotFoundException {
printTab(fileWriter, 1);
fileWriter.write("@Override");
printTab(fileWriter, 1);
fileWriter.write("public void add" + name + "(" + commonFields + "){");
printTab(fileWriter, 0);
fileWriter.write(generateInstance(name, modelQualifiedName));
fileWriter.write("\n");
printTab(fileWriter, 2);
fileWriter.write(name.toLowerCase() + "Dao.insert" + name + "(instance);");
//結束
printTab(fileWriter, 1);
fileWriter.write("}");
fileWriter.write("\n");
}
private static String generateInstance(String name, String modelQualifiedName) throws ClassNotFoundException {
Class<?> c = Class.forName(modelQualifiedName);
Field[] fields = c.getDeclaredFields();
String fieldName = null;
StringBuilder sb = new StringBuilder();
sb.append("\t").append("\t").append( name + " instance = new " + name + "();");
for(Field field: fields){
fieldName = field.getName();
sb.append("\n").append("\t").append("\t").append("instance.set" + firstLetterUpper(fieldName) + "(" + fieldName + ");");
}
return sb.toString();
}
private static void selectCount(String modelQualifiedName, String name,
FileWriter fileWriter, String commonFields) throws IOException,
ClassNotFoundException {
printTab(fileWriter, 1);
fileWriter.write("@Override");
printTab(fileWriter, 1);
fileWriter.write("public int get" + name + "sCount(" + commonFields +"){");
printTab(fileWriter, 0);
fileWriter.write(generateValid(modelQualifiedName));
//return語句
fileWriter.write("\n");
printTab(fileWriter, 2);
fileWriter.write("return " + name.toLowerCase() + "Dao.select" + name + "sCount(index);");
//結束
printTab(fileWriter, 1);
fileWriter.write("}");
fileWriter.write("\n");
}
private static void selectOrderAndPage(String modelQualifiedName,
String name, FileWriter fileWriter, String commonFields)
throws IOException, ClassNotFoundException {
printTab(fileWriter, 1);
fileWriter.write("@Override");
printTab(fileWriter, 1);
fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields +
", String sort, String order, int startRow, int pageSize){");
printTab(fileWriter, 0);
fileWriter.write(generateValid(modelQualifiedName));
//sort
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_STRING_NULL != sort){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"sort\", sort);");
printTab(fileWriter, 2);
fileWriter.write("}");
//order
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_STRING_NULL != order){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"order\", order);");
printTab(fileWriter, 2);
fileWriter.write("}");
//startRow
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_INT_NULL != startRow){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"startRow\", startRow);");
printTab(fileWriter, 2);
fileWriter.write("}");
//pageSize
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_INT_NULL != pageSize){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"pageSize\", pageSize);");
printTab(fileWriter, 2);
fileWriter.write("}");
//return語句
fileWriter.write("\n");
printTab(fileWriter, 2);
fileWriter.write("return " + name.toLowerCase() + "Dao.select" + name + "s(index);");
printTab(fileWriter, 1);
//結束
fileWriter.write("}");
fileWriter.write("\n");
}
private static void selectOrder(String modelQualifiedName,
String name, FileWriter fileWriter, String commonFields)
throws IOException, ClassNotFoundException {
printTab(fileWriter, 1);
fileWriter.write("@Override");
printTab(fileWriter, 1);
fileWriter.write("public List<" + name + "> get"+ name +"s(" + commonFields +
", String sort, String order){");
printTab(fileWriter, 0);
fileWriter.write(generateValid(modelQualifiedName));
//sort
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_STRING_NULL != sort){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"sort\", sort);");
printTab(fileWriter, 2);
fileWriter.write("}");
//order
printTab(fileWriter, 2);
fileWriter.write("if(Constants.DEF_STRING_NULL != order){");
printTab(fileWriter, 3);
fileWriter.write("index.put(\"order\", order);");
printTab(fileWriter, 2);
fileWriter.write("}");
//return語句
fileWriter.write("\n");
printTab(fileWriter, 2);
fileWriter.write("return " + name.toLowerCase() + "Dao.select" + name + "s(index);");
printTab(fileWriter, 1);
//結束
fileWriter.write("}");
fileWriter.write("\n");
}
private static void implStart(String name, FileWriter fileWriter)
throws IOException {
//註解
fileWriter.write("\n");
fileWriter.write("@Service(\"" + name + "ServiceImpl\")");
//開始
fileWriter.write("\n");
fileWriter.write("public class " + name + "ServiceImpl implements " + name + "Service {");
fileWriter.write("\n");
printTab(fileWriter, 1);
fileWriter.write("@Resource(name = \"" + name + "DaoImpl\")");
printTab(fileWriter, 1);
fileWriter.write("private " + name + "Dao " + name.toLowerCase() + "Dao;");
fileWriter.write("\n");
}
public static String getFields(String modelQualifiedName) throws ClassNotFoundException{
Class<?> c = Class.forName(modelQualifiedName);
Field[] fields = c.getDeclaredFields();
String fieldName = null;
Class<?> type = null;
String fieldType = null;
StringBuilder sb = new StringBuilder();
for(Field field: fields){
fieldName = field.getName();
type = field.getType();
fieldType = type.getSimpleName();
sb.append(fieldType + " " + fieldName + ", ");
}
sb.deleteCharAt(sb.length() - 2);
return sb.toString();
}
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 String generateValid(String modelQualifiedName) throws ClassNotFoundException{
Class<?> c = Class.forName(modelQualifiedName);
Field[] fields = c.getDeclaredFields();
String fieldName = null;
Class<?> type = null;
String fieldType = null;
StringBuilder sb = new StringBuilder();
sb.append("\t").append("\t").append("Map<String, Object> index = new HashMap<String, Object>();");
String defaultNull = null;
for(Field field: fields){
fieldName = field.getName();
type = field.getType();
fieldType = type.getSimpleName();
if("String".equals(fieldType)){
defaultNull = "Constants.Constants.DEF_STRING_NULL";
}else if("int".equals(fieldType)){
defaultNull = "Constants.DEF_INT_NULL";
}else{
defaultNull = "null";
}
sb.append("\n");
sb.append("\t").append("\t");
sb.append("if(" + defaultNull + " != " + fieldName +"){");
sb.append("\n");
sb.append("\t").append("\t").append("\t");
sb.append("index.put(\"" + fieldName + "\", " + fieldName + ");");
sb.append("\n");
sb.append("\t").append("\t").append("}");
}
return sb.toString();
}
public static String firstLetterUpper(String str){
String s = str.substring(0, 1).toUpperCase();
return s + str.substring(1);
}
}
java通過實體類生成serivce文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.