自定义注解(2)—定义和使用(利用反射获取)
来源:互联网 发布:网络错误代码1004 编辑:程序博客网 时间:2024/05/22 13:05
实现功能:
使用自定义注解自动生成SQL语句
自定义Table注解
package com.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @author Duoduo * @version 1.0 * @date 2017/5/14 15:14 */@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @interface Table { String name();}
自定义Column注解
package com.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @author Duoduo * @version 1.0 * @date 2017/5/14 15:31 */@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public @interface Column { String name(); String type(); int length();}
使用自定义注解注解
package com.annotation;/** * @author Duoduo * @version 1.0 * @date 2017/5/15 14:42 */@Table(name = "sys_user")public class User { @Column(name = "username",type = "varchar", length = 30) private String username; @Column(name = "password",type = "varchar", length = 30) private String password;}
利用反射机制获取注解信息生成SQL
使用函数getAnnotation来获取注解信息。
例如:
- 获取类上的注解函数 Table table = (Table) clazz.getAnnotation(Table.class);
- 获取字段上的注解函数 (Column) field.getAnnotation(Column.class);
package com.annotation;import java.lang.reflect.Field;/** * @author Duoduo * @version 1.0 * @date 2017/5/15 14:52 */public class GenerateSql { private Class<?> clazz; public GenerateSql(Class<?> clazz) { this.clazz = clazz; } /** * 生成创建表脚本的sql * * @return */ public String createTable() { String tableName = getTableName(); StringBuffer sql = new StringBuffer(); sql.append("Create Table " + tableName + " (").append("\n"); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { Column column = getColumn(field); sql.append(" " + column.name() + " " + column.type() + "(" + column.length() + ")" + ",\n"); } sql.append(");"); return sql.toString(); } public String getSelectAll() { StringBuffer sql = new StringBuffer(); String tableName = getTableName(); sql.append("Select "); Field[] fields = getAllColumn(); int length = fields.length; for (int i = 0; i < length; i++) { Column column = getColumn(fields[i]); if (i == length - 1) { sql.append(column.name()); } else { sql.append(column.name() + ", "); } } sql.append(" From " + tableName); return sql.toString(); } /** * 根据类上的Table 注解获取表的名称 * * @return */ private String getTableName() { Table table = (Table) clazz.getAnnotation(Table.class); return table.name(); } /** * 获取字段中的注解 * * @param field * @return */ private Column getColumn(Field field) { return (Column) field.getAnnotation(Column.class); } /** * 获取类所有的列 * * @return */ private Field[] getAllColumn() { return clazz.getDeclaredFields(); }}
测试类
package com.annotation;/** * @author Duoduo * @version 1.0 * @date 2017/5/15 14:45 */public class Test2 { public static void main(String[] args) { GenerateSql generateSql = new GenerateSql(User.class); System.out.println(generateSql.createTable()); System.out.println(generateSql.getSelectAll()); }}
测试结果
Create Table sys_user ( username varchar(30), password varchar(30),);Select username, password From sys_user
0 0
- 自定义注解(2)—定义和使用(利用反射获取)
- 简单自定义Annotation和利用反射获取注解中的值
- Java自定义注解和反射获取注解
- Annotation(自定义注解)反射获取注解
- 自定义注解定义和使用
- 利用反射获取并使用自定义对象
- Java自定义注解和运行时靠反射获取注解
- Java自定义注解和运行时靠反射获取注解
- Java自定义注解和运行时靠反射获取注解
- Java自定义注解和运行时靠反射获取注解
- Java自定义注解和运行时靠反射获取注解
- java 自定义注解annotation和通过反射获取注解
- Java自定义注解和运行时靠反射获取注解
- Java自定义注解和运行时靠反射获取注解
- Java自定义注解和运行时靠反射获取注解
- JAVA自定义注解的使用和定义
- Java注解类的定义/使用和反射
- Java注解详解,自定义注解,利用反射解析注解
- 数据挖掘-推荐算法入门
- CI Weekly #19 | 关于软件开发模型的思考,以及最新 CI/CD 实践分享
- 火狐插件 poster 使用详解
- hannnnah_j’s Biological Test HDU
- mysql数据库 ibdata1瘦身
- 自定义注解(2)—定义和使用(利用反射获取)
- 文件压缩
- MySQL实体类转SQL脚本
- JZOJ3599【CQOI2014】排序机械臂
- Spark算子reduceByKey深度解析
- gulp基于seaJs模块化项目打包实践
- sku属性组合小例子
- 理论---jsp使用jspsmartupload组件实现文件上传功能
- [占坑]Codeforces Round #412 解题报告