利用注解动态生成sql
来源:互联网 发布:修道入门 知乎 编辑:程序博客网 时间:2024/05/21 20:24
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface DBTable {public String name() default "mytable";}
@SuppressWarnings("all")@DBTable(name="mytable")public class Person implements Serializable {@SQLInteger(constraints=@Constraints(primaryKey=true,unique=true))private int id;@SQLString(value=12)private String name;@SQLInteger(value = 5) private int age;}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLInteger {
String name() default "";
int value() default 0;
Constraints constraints() default @Constraints;
}@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@SuppressWarnings("all")public @interface SQLString {String name() default "";int value() default 0;Constraints constraints() default @Constraints;}@DBTable@SuppressWarnings("all")public class Student implements Serializable{@SQLString(value=12) String name;@SQLInteger (value = 5) int age;}@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface Constraints {boolean primaryKey() default false;boolean unique() default false;boolean NULL() default false;}@SuppressWarnings("all")public class AnnotationParse {public static void main(String[] args) throws ClassNotFoundException {String colunm = null;Scanner sc = new Scanner(System.in);String className = sc.nextLine();Class<?> cls = Class.forName(className);DBTable dbtable = cls.getAnnotation(DBTable.class);if(dbtable!=null){if(dbtable.name().length()<1){colunm = cls.getName();}else{colunm = dbtable.name();}}//-----------------------------------------------------------------------------------------ArrayList<String> list = new ArrayList<>(); for(Field f:cls.getDeclaredFields()){ System.out.println(f.getName()); Annotation[] anns = f.getAnnotations(); if(anns[0] instanceof SQLString){ SQLString sqlString = (SQLString)anns[0]; if(sqlString.name().length()<1){ list.add(f.getName()+" VARCHAR("+sqlString.value()+")"); }else{ list.add(sqlString.name()+" VARCHAR(+"+sqlString.value()+")"+getConstraints(sqlString.constraints())); } }else if(anns[0] instanceof SQLInteger){ SQLInteger sqlInteger = (SQLInteger) anns[0]; if(sqlInteger.name().length()<1){ list.add(f.getName()+" int("+sqlInteger.value()+")"); }else{ list.add(sqlInteger.name()+" int("+sqlInteger.value()+")"+getConstraints(sqlInteger.constraints())); } } } //------------------------------------------------------------------------------------------ StringBuffer sqlCommand = new StringBuffer(); sqlCommand.append("Create "+colunm +"{"+"\n");for(int i = 0;i<list.size()-1;i++){sqlCommand.append(list.get(i)+","+"\n");}sqlCommand.append(list.get(list.size()-1)+"\n"+"}");System.out.println(sqlCommand);}private static String getConstraints(Constraints constraints) {String str = null;if(!constraints.NULL()){str+="NULL";}else if(!constraints.unique()){str+="unqiue";}else if(!constraints.primaryKey()){str+="primarykey";}return str;}}
阅读全文
0 0
- 利用注解动态生成sql
- 利用反射动态生成sql语句
- 使用基于注解的mybatis时,利用反射和注解生成sql语句
- 使用基于Mybatis注解,利用反射和注解生成SQL语句
- mybatis注解动态sql
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句
- MySQL主从复制实践
- Servlet&jstl&el&过滤器&监听器&连接池--复习
- page request without authorization
- java_实现Haffman树及其编码与解码
- Win7系统不能正常预览Word2010文档怎么办
- 利用注解动态生成sql
- 使用Session防止表单重复提交
- --DOM事件
- /var/run/*.pid already exist. Daemon already running?
- C语言有关time的函数小结
- 基于ubuntu12 32位安装交叉编译环境
- python圣斗士修炼(十六):json序列化
- PE文件结构详解(一)基本概念
- ThinkPHP3.2.2中自定义函数的一些方法