java table注解_java注解简单使用
java注解可以比喻成标签,可以贴在任何地方,也可以限制只能贴在固定地方,比如类上方、方法上方、属性[字段]上方等,然后通过反射,判断是否存在这个注解。
注解形式
public @interfaceTest {
}
应用
//类上
@Testpublic classEntity{//属性上
@Testprivate intid;//方法上
@Testpublic voidtest(){
}
}
元注解
元注解是什么意思呢?
元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解上面。
如果难于理解的话,你可以这样理解。元注解也是一张标签,但是它是一张特殊的标签,它的作用和目的就是给其他普通的标签进行解释说明的。
元标签有 @Retention、@Documented、@Target、@Inherited、@Repeatable 5 种。
@Retention
Retention 的英文意为保留期的意思。当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。
它的取值如下:
RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
@Documented
顾名思义,这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去。
@Target
Target 是目标的意思,@Target 指定了注解运用的地方。
你可以这样理解,当一个注解被 @Target 注解时,这个注解就被限定了运用的场景。
类比到标签,原本标签是你想张贴到哪个地方就到哪个地方,但是因为 @Target 的存在,它张贴的地方就非常具体了,比如只能张贴到方法上、类上、方法参数上等等。@Target 有下面的取值
ElementType.ANNOTATION_TYPE 可以给一个注解进行注解
ElementType.CONSTRUCTOR 可以给构造方法进行注解
ElementType.FIELD 可以给属性进行注解
ElementType.LOCAL_VARIABLE 可以给局部变量进行注解
ElementType.METHOD 可以给方法进行注解
ElementType.PACKAGE 可以给一个包进行注解
ElementType.PARAMETER 可以给一个方法内的参数进行注解
ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
@Inherited
Inherited 是继承的意思,但是它并不是说注解本身可以继承,而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。
例子
打印实体类的sql查询语句
注解Test_Table,用于注解类,数据库表注解
1 packagecom.xiaostudy.test;2
3 import java.lang.annotation.*;4
5 //RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。6 //RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。7 //RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
8 @Retention(RetentionPolicy.RUNTIME)9 //它的作用是能够将注解中的元素包含到 Javadoc 中去。
10 @Documented11 //ElementType.ANNOTATION_TYPE 可以给一个注解进行注解12 //ElementType.CONSTRUCTOR 可以给构造方法进行注解13 //ElementType.FIELD 可以给属性进行注解14 //ElementType.LOCAL_VARIABLE 可以给局部变量进行注解15 //ElementType.METHOD 可以给方法进行注解16 //ElementType.PACKAGE 可以给一个包进行注解17 //ElementType.PARAMETER 可以给一个方法内的参数进行注解18 //ElementType.TYPE 可以给一个类型进行注解,比如类、接口、枚举
19 @Target(ElementType.TYPE)20 public @interfaceTest_Table {21 String value();22 }
注解Test_Column,注解属性,数据库列注解
1 packagecom.xiaostudy.test;2
3 import java.lang.annotation.*;4
5 @Retention(RetentionPolicy.RUNTIME)6 @Documented7 @Target(ElementType.FIELD)8 public @interfaceTest_Column {9 String value();10 }
student类
1 packagecom.xiaostudy.test;2
3 @Test_Table("t_student")4 public classStudent {5 @Test_Column("id")6 private intid;7
8 @Test_Column("name")9 privateString name;10
11 @Test_Column("age")12 private intage;13
14 public intgetId() {15 returnid;16 }17
18 public void setId(intid) {19 this.id =id;20 }21
22 publicString getName() {23 returnname;24 }25
26 public voidsetName(String name) {27 this.name =name;28 }29
30 public intgetAge() {31 returnage;32 }33
34 public void setAge(intage) {35 this.age =age;36 }37 }
测试
1 packagecom.xiaostudy.test;2
3 importjava.lang.reflect.Field;4 importjava.lang.reflect.InvocationTargetException;5 importjava.lang.reflect.Method;6
7 public classTest {8
9 public static voidmain(String[] agrs) {10 Student student = newStudent();11 student.setId(333);12 student.setName("xiaostudy,xiaoming");13 student.setAge(23);14 System.out.println(querySql(student));15 }16
17 private staticString querySql(Object f) {18 StringBuilder sql = newStringBuilder();19 //获取到class
20 Class c1 =f.getClass();21 //获取table的名字
22 boolean exists = c1.isAnnotationPresent(Test_Table.class);23 if(!exists) {24 return null;25 }26 Test_Table t = (Test_Table)c1.getAnnotation(Test_Table.class);27 //定义表名
28 String tableName =t.value();29 sql.append("select * from ").append(tableName).append(" where 1=1 ");30 //遍历所有的字段
31 Field[] fields =c1.getDeclaredFields();32 for(Field field : fields) {33 //判断是否存在这个注解
34 boolean Fexists = field.isAnnotationPresent(Test_Column.class);35 if(!Fexists) {36 continue;37 }38 //获取注解
39 Test_Column column = field.getAnnotation(Test_Column.class);40 String ColumuName =column.value();41 //获取字段的值
42 String fieldName =field.getName();43 String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);44 Method method = null;45 Object ColumuValue = null;46 try{47 method =c1.getMethod(getMethodName);48 ColumuValue =method.invoke(f);49
50 } catch(InvocationTargetException e) {51 e.printStackTrace();52 } catch(NoSuchMethodException e) {53 e.printStackTrace();54 } catch(IllegalAccessException e) {55 e.printStackTrace();56 }57 //int型不需要加单引号,String型需要加单引号
58 if(ColumuValue instanceof Integer && 0 !=(Integer)ColumuValue){59 sql.append("and " + ColumuName + " = " + ColumuValue + " ");60 }else if(ColumuValue instanceofString){61 if( ((String) ColumuValue).contains(",") ){62 String[] values = ((String) ColumuValue).split(",");63 sql.append("and " + ColumuName + " in (");64 for(int i=0; i
java table注解_java注解简单使用相关推荐
- java method 注解_JAVA 注解详解及简单实例
JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档 这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...
- java 注释 过时_Java 注解
前言 为什么需要学习注解? 1.能够灵活地使用框架提供的注解,最后能够读懂框架的源码 2.能够配合反射将代码书写更加的灵活,更加易于维护易于扩展,Properties配置,XML配置,注解配置[Jav ...
- java threadsafe 注解_Java 注解详解
什么是注解 Annotation 中文译过来就是注解.标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解.而新手很难理解的主要原因是一些技术文档里的专业术语和名词不太 ...
- java 自定义注解_Java注解
前言 近日在阅读开源项目,发现项目里好多奇奇怪怪的注解(@DataScope.@Log...)看得我一脸懵,不知道大家是否也有过这样的经历,回想了一下,发现自己对于注解的知识,好像只停留在@Overr ...
- java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解
大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点:元数据 注解的分类 内置注解 自定义注解 注解处理器 Serv ...
- java 废弃注解_Java 注解
什么是注解呢?还记得Class是什么吗?注解就是Class对象中的⼀⼩段信息/⽂本/标记,它可以携带参数,可以在运⾏时被阅读.这就是注解的全部了.怎么处理注解并不是注解要关注的信息,它只是这么一小段信 ...
- java uv实例_Java注解的实际应用案例讲解
前言 注解确实是一个很强大的功能,是的开发效率大幅度提高.在Android开发中,比较有名气的注解框架当属:Butterknife.https://github.com/JakeWharton/but ...
- java method 注释_Java注解
Java注解 注解概述 3.注解 3.1.注解,或者叫做注释类型,英文单词是:Annotation 疑问:注解到底是干啥的????????? 3.2.注解Annotation是一种引用数据类型.编译之 ...
- java注解_Java注解教程及自定义注解
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- java 获取注解_java 注解annotation的使用,以及反射如何获取注解
1.元注解 元注解是指注解的注解.包括 @Retention @Target @Document @Inherited四种. 1. Annotation型定义为@interface, 所有的Anno ...
最新文章
- 【区块链Go语言实现】区块链基本原型
- 2021年AI关键趋势,AI芯片初创公司可能发生并购
- 使用@Controller注解为什么要配置mvc:annotation-driven /
- 线程安全机制 python
- 某股份制商业银行数据中心灾备建设经验
- MQ的引言|不同MQ的特点|RabbitMQ安装
- ubuntu下 mysql安装以后无法登陆的的解决方法((ERROR 1698 (28000): Access denied for user 'root'@'localhost'))...
- 新手AS常见问题集锦
- STM32F7xx —— LAN8720(FreeRTOS+LWIP)
- 日期多选插件Kalendae.js
- Zookeeper应用场景
- 解决办法:RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96
- 开关电源(DC/DC)原理分析
- PAT 甲级 图形输出 1031 Hello World for U (20 分)
- phpsocket客户端以及服务器例子
- linux怎么找回普通用户密码,Ubuntu Linux系统密码找回
- Matlab散点图进阶——矩阵气泡图
- Spring的init-method和destory-method
- 赵明荣耀鸿蒙,荣耀能升级华为鸿蒙吗赵明正式表态,老用户很幸运
- 余姚dns服务器位置,余姚广电dns服务器地址