自定义注解实现创建sql语句

文章转自:河北凝讯科技订阅号 

文章名称:spring注解是如何实现的

 

1、DBTable注解,标注在类上

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)
public @interface DBTable {
	
	public String name() default "";

}

2、SQLString注解,标注在字段上

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 SQLString {
	
	int id() default 0;
	int value() default 0;
	String name() default "";

}

3、表Member(需要创建的表)

@DBTable(name = "member")
public class Member {

	@SQLString(value = 50, name = "last_name")
	String lastName;

	@SQLString(value = 80, name = "first_name")
	String firstName;

}

4、使用反射将注解转换成sql

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;

public class TableCreator {

	public static void main(String[] args) throws ClassNotFoundException {
		args = new String[] { "com.xiaofeng.shiro.anno.Member" };
		for (String className : args) {
			Class<?> cl = Class.forName(className);
			DBTable dbTable = cl.getAnnotation(DBTable.class);
			String tableName = dbTable.name();
			if (tableName.length() < 1) {
				tableName = cl.getSimpleName().toUpperCase();
			}
			System.out.println("表名称:" + tableName);
			ArrayList<String> columnDefs = new ArrayList<String>();
			for (Field field : cl.getDeclaredFields()) {
				String columnName = null;
				Annotation[] anns = field.getDeclaredAnnotations();
				if (anns.length < 1) {
					continue;
				}
				Annotation sqlStrAnno = anns[0];
				if (sqlStrAnno instanceof SQLString) {
					SQLString s = (SQLString) sqlStrAnno;
					if (s.name().length() < 1) {
						columnName = field.getName().toUpperCase();
					} else {
						columnName = s.name();
					}
					columnDefs.add(columnName + " VARCHAR(" + s.value() + ")");
				}
			}
			StringBuilder createCommand = new StringBuilder("CREATE TABLE " + tableName + "(");
			for (String columndef : columnDefs) {
				createCommand.append("\n " + columndef + ",");
			}
			String tableCreate = createCommand.substring(0, createCommand.length() - 1) + ")";
			System.out.println("建表语句:"+tableCreate);
		}

	}
}

结果:

表名称:member
建表语句:CREATE TABLE member(
 last_name VARCHAR(50),
 first_name VARCHAR(80))

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值