java--基礎

工具類

本文主要介紹一些工具類:

一、由實體類生成sql
1.數據表工具類()
package util;

import java.lang.reflect.Field;

import annotation.Column;
import annotation.Table;
/**
* 數據表工具類
* @author ThinkPad
*
*/
public class TableUtils {

public static String getCreateTableSQl(Class<?> clazz){

    StringBuilder sb=new StringBuilder();
    sb.append("create table ");

    Table table=clazz.getAnnotation(Table.class);//獲取註解的類的實例
    String tableName = table.tableName();//獲取表名
    sb.append(tableName).append("(\n");
    //getFields()獲得某個類的所有的公共(public)的字段,包括父類。
    //getDeclaredFields()獲得某個類的所有申明的字段,即包括public、private和proteced, 但是不包括父類的申明字段。 
    Field[] fields=clazz.getDeclaredFields();
    String primaryKey = " ";
    for (int i = 0; i < fields.length; i++) {
        Column column=(Column) fields[i].getAnnotations()[0];//得到字段的屬性
        String field = column.field();//字段名稱
        String type = column.type();//字段類型
        boolean defaultNull = column.defaultNull();//字段是否爲空

        sb.append("\t" + field).append(" ").append(type);//現在sb 爲:creat table tablename 
        if(defaultNull){
            if(type.toUpperCase().equals("TIMESTAMP")){
                sb.append(",\n");
            }else{
                sb.append(" DEFAULT NULL,\n");
            }
        }else{
            sb.append(" NOT NULL,\n");
            if(column.primaryKey()){//考慮幾個主鍵的問題
                if(StringUtils.isempty(primaryKey)){
                    primaryKey = primaryKey.concat("PRIMARY KEY (").concat(field).concat(")");
                }else{//primaryKey=PRIMARY KEY (ID)
      String info=primaryKey.split("\\)")[0];//正則\\)以)拆分
            primaryKey=info.concat(",").concat(field).concat(")");
                }

            }
        }

    }

    if(!StringUtils.isempty(primaryKey)){
        sb.append("\t").append(primaryKey);
    }
    sb.append("\n) DEFAULT CHARSET=utf8");

    return sb.toString();

}

}
2.字符串工具類
package util;
/**
* 字符串工具類
* @author ThinkPad
*
*/
public class StringUtils {
/**
* 判斷字符串是否爲空,或者只是空格
* @param str
* @return
*/
public static boolean isempty(String str){
return null == str || str.equals(“”) || str.matches(“\s*”);
}
/**
* 判斷內容是否爲空
* @param content
* @param defaultValue
* @return
*/
public static String defaultValue(String content ,String defaultValue){
if(isempty(content)){
return defaultValue;
}
return content;
}

}
3.自定義註解–字段
package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD) //註解的目標://字段、枚舉的常量
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {

public String field() ; //字段名稱
public boolean primaryKey() default false;//是否爲主鍵
public String type() default "VARCHAR(80)";//字段類型
public boolean defaultNull() default true; //是否允許爲空

}
4.自定義註解–表名
package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE) //接口、類、枚舉、註解
@Retention(RetentionPolicy.RUNTIME)// 註解會在class字節碼文件中存在,在運行時可以通過反射獲取到
public @interface Table {

public String tableName();

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章