反射机制动态生成sql语句

bean包下

1.User.java

package bean;

import util.TableFieldAnno;
import util.TableNameAnno;

/**
 * 所有用户信息
 * 
 * @author LOOK
 * 
 */
@TableNameAnno("user")
public class User {
    @TableFieldAnno(field = "user_id", primaryKey = true, defaultNull = false)
    private String user_id;// 学号
    @TableFieldAnno(field = "user_name")
    private String user_name;// 姓名
    @TableFieldAnno(field = "user_tel")
    private String user_tel;// 联系方式
    @TableFieldAnno(field = "user_type")
    private String user_type;// 身份类型
    @TableFieldAnno(field = "user_pw")
    private String user_pw;// 密码
    @TableFieldAnno(field = "user_isGraduate")
    private Boolean isGraduate;// 是否毕业

    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getUser_tel() {
        return user_tel;
    }

    public void setUser_tel(String user_tel) {
        this.user_tel = user_tel;
    }

    public String getUser_type() {
        return user_type;
    }

    public void setUser_type(String user_type) {
        this.user_type = user_type;
    }

    public String getUser_pw() {
        return user_pw;
    }

    public void setUser_pw(String user_pw) {
        this.user_pw = user_pw;
    }

    public Boolean getIsGraduate() {
        return isGraduate;
    }

    public void setIsGraduate(Boolean isGraduate) {
        this.isGraduate = isGraduate;
    }

}

util包下

1.TableNameAnno .java

package util;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 用于注解表名
* @author LOOK
*
*/
@Target(value = ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TableNameAnno {
   String value();
}

2.TableFieldAnno

package util;

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

/**
 * 用于注解类字段的属性
 * 
 * @author LOOK
 * 
 */
@Target(value = ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TableFieldAnno {
    String field();// 字段名称

    boolean primaryKey() default false;// 是否是主键

    String type() default "varchar";// 类型

    int length() default 30;

    boolean defaultNull() default true;
}

3.TestSqlByAnno.java

package util;

import java.lang.reflect.Field;

@SuppressWarnings("all")
public class TestSqlByAnno {
    public static void main(String[] args) {
        createSql("User");
    }

    /**
     * 用于动态生成建表语句
     * 
     * @param type
     */
    public static void createSql(String type) {// 传入类名
        try {
            Class clazz = Class.forName("bean." + type);
            // 获取类的注解
            TableNameAnno tableNameAnno = (TableNameAnno) clazz
                    .getAnnotation(TableNameAnno.class);
            System.out.println("create table " + tableNameAnno.value() + "(");
            // 获取所有属性的注解,输出属性注解的属性
            Field[] fields = clazz.getDeclaredFields();
            TableFieldAnno tableFieldAnno=null;
            for (int i = 0; i < fields.length; i++) {
                //获取每个属性的注解
                tableFieldAnno = fields[i]
                        .getAnnotation(TableFieldAnno.class);
                //输出每个注解的属性
                System.out.print(tableFieldAnno.field() + " "
                        + tableFieldAnno.type() + " ("
                        + tableFieldAnno.length() + ") ");
                if (tableFieldAnno.primaryKey()) {// 主键
                    System.out.println("primary key,");
                } else if (i == fields.length - 1) {// 最后一行
                    System.out.println("not null ");
                } else {// 其他行
                    System.out.println("not null, ");
                }

            }
            System.out.println(") default charset='utf8';");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光剑书架上的书阅读 9,386评论 2 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,052评论 6 342
  • 作业回答:观察你的企业或者身边企业的广告,哪些做得好,哪些做得差甚至错误 好的广告 说起好的广告,首先想到的是这一...
    孙艺嘉阅读 3,624评论 0 0