mysql annotations_自定义注解与MYSQL

packageannotationK.util;importjava.lang.annotation.Annotation;importjava.lang.reflect.Field;importjava.util.ArrayList;importjava.util.List;importorg.junit.Test;importannotationK.annotation.AnnotationEnum;importannotationK.annotation.Column;importannotationK.annotation.Comment;importannotationK.annotation.Entity;importannotationK.annotation.GeneratedValue;importannotationK.annotation.GenerationType;importannotationK.annotation.Id;importannotationK.annotation.Table;/***注解反射帮助类

**/

public final classAnnotationReflectionUtil {

@Testpublic void test()throwsException{/*EntityBean entity=parserClass(User.class);

entity=TypeUtils.reflecJdbcTypeAll(entity);

for(ColumnBean columnBean:entity.getColumnBean()){

System.out.println(column.getFieldName());

System.out.println("level="+column.getLeve()+",name="+column.getColumnName()+",type="+column.getColumnType()+",length="+column.getColumnLength()+",defalutvalue="+column.getDefaultValue()+",comment="+column.getComment());

System.out.println("--------------------------------------------------------------------");

}*/}/*** 抛出异常 目前暂定将不属于自定义的注解,全部抛出,返回值布尔值

**/

private booleanputExceptionAnnotationToField(Field field){boolean tag=true;

Annotation annotations []=field.getAnnotations();if(annotations.length>0){for(Annotation annotation:annotations){

String annotationName=annotation.annotationType().getName();if(annotationName.contains("javax")||annotationName.contains("hibernate")||annotationName.contains("ejb3")){

tag=false;throw new RuntimeException(field.getName()+"该字段请注入规定注解");

}

}

}returntag;

}/*** 解析实体bean并将数据封装至TableBean

**/

public EntityBean parserClass(Class clazz) throwsClassNotFoundException{//解析头部

EntityBean entityBean=parserAnnotationClassTop(clazz);if(entityBean.isEntityBO()){

Field fields []=clazz.getDeclaredFields();

List columnList=new ArrayList();

ColumnBean column=null;for(Field field:fields){

putExceptionAnnotationToField(field);

column=newColumnBean(field);

Annotation annotations []=field.getAnnotations();

column.setAnnotations(annotations);

column.setFieldName(field.getName());

column.setFileType(field.getType());

column.setFieldTypeName(field.getType().getSimpleName());boolean tag=true;if(annotations.length>0){//该字段根据头部注解区分对待

for(Annotation annotation:annotations){

String annotationName=annotation.annotationType().getSimpleName();if(AnnotationEnum.forType("ID").equals(annotationName)){

column=parserAnnotationId(column);

}if(AnnotationEnum.forType("GENERATEDVALUE").equals(annotationName)){

column=parserAnnotationGeneratedValue(column);

}if(AnnotationEnum.forType("COLUMN").equals(annotationName)){

column=parserAnnotationColumn(column);

}if(AnnotationEnum.forType("TEMPORAL").equals(annotationName)){

column=parserAnnotationDate(column);

}if(AnnotationEnum.forType("COMMENT").equals(annotationName)){

column=parserAnnotationComment(column);

}if(AnnotationEnum.forType("TRANSIENT").equals(annotationName)){

tag=false;

}

}

}else{//该字段为缺省为cloumn注解类型,属于映射字段

column=parserAnnotationColumnNot(column);

}if(tag)

columnList.add(column);

}

entityBean.setColumnBean(columnList);

}returnentityBean;

}/*** 解决注释注解

**/

privateColumnBean parserAnnotationComment(ColumnBean column){

Field field=column.getField();

Comment comment=field.getAnnotation(Comment.class);

String msg=comment.value();if(msg!=null){

column.setComment(msg);

}returncolumn;

}/*** 解决无注解字段处理,但是其头部有entity注解

**/

privateColumnBean parserAnnotationColumnNot(ColumnBean column){

Field field=column.getField();

column.setColumnName(field.getName());returncolumn;

}/*** 解析日期类注解

**/

privateColumnBean parserAnnotationDate(ColumnBean column){

Field field=column.getField();

column.setColumnName(field.getName());returncolumn;

}/*** 解析字段Column 注解

**/

privateColumnBean parserAnnotationColumn(ColumnBean columns){

Field field=columns.getField();

Column column=field.getAnnotation(Column.class);if(!column.columnType().equals("")){

columns.setColumnType(column.columnType());

}

columns.setDefaultValue(column.defaultVaule());

columns.setColumnName(column.name().equals("")?field.getName():column.name());

columns.setColumnLength(column.length());

columns.setUnique(column.unique());

columns.setInsertable(column.insertable());

columns.setNullableBoo(column.nullable());

columns.setUpdatableBoo(column.updatable());

columns.setTableName(column.table());

columns.setPrecision(column.precision());

columns.setScale(column.scale());returncolumns;

}/*** 解析主键

**/

privateColumnBean parserAnnotationId(ColumnBean column){

Field field=column.getField();

Id id=field.getAnnotation(Id.class);

String className=id.annotationType().getName();if(!className.contains("javax")||!className.contains("hibernate")){

column.setLeve(2);if(column.getColumnName()==null){

column.setColumnName(field.getName());

}

}returncolumn;

}/*** 解析主键自增类型 strategy 主键生成规则,配合主键生成策略

**/

privateColumnBean parserAnnotationGeneratedValue(ColumnBean column){

Field field=column.getField();

GeneratedValue generated=field.getAnnotation(GeneratedValue.class);//自增辅助策略//String generator=generated.generator().toString();//自增主策略

String generatedValue=generated.strategy().toString();if(generatedValue==GenerationType.AUTO.toString()){

column.setLeve(3);

}returncolumn;

}/*** 解析头部注解

**/

private EntityBean parserAnnotationClassTop(Classclazz){

EntityBean entityBean=new EntityBean();

Annotation annotations []=clazz.getAnnotations();for(Annotation annotation:annotations){

String annotationName=annotation.annotationType().getSimpleName();if(AnnotationEnum.forType("ENTITY").equals(annotationName)){

String entityName=parserAnnotationEntity(clazz,annotation);

entityBean.setEntityBO(true);

entityBean.setEntityName(entityName);

}if(AnnotationEnum.forType("TABLE").equals(annotationName)){

String tableName=parserAnnotationTable(clazz,annotation);

entityBean.setTableBO(true);

entityBean.setTableName(tableName);

}

}if(entityBean.isEntityBO()&&!entityBean.isTableBO()){

entityBean.setTableName(clazz.getSimpleName());

}returnentityBean;

}/*** 解析Entity注解

**/

private String parserAnnotationEntity(Classclazz,Annotation annotation){

String entityName="";

Entity entity= clazz.getAnnotation(Entity.class);

entityName=entity.name();if(entityName==null||entityName.equals("")){

entityName=clazz.getSimpleName();

}returnentityName;

}/*** 解析Table注解

**/

private String parserAnnotationTable(Classclazz,Annotation annotation){

String tableName="";

Table table= clazz.getAnnotation(Table.class);

tableName=table.name();if(tableName==null||tableName.equals("")){

tableName=clazz.getSimpleName();

}returntableName;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值