工具类
本文主要介绍一些工具类:
一、由实体类生成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();
}