一、什么是注解

注解是jdk5.0引入的新技术!

注解(Annotation):java中对某一程序片段注释说明、这个注释说明能被其它程序读到并执行相应操作!

二、注解的作用

1、能对于程序做出解释,并且能被其它相应程序读取并且执行相应操作!

三、注解格式

@注释名  可以添加一些参数值、例如:@SuppressWarnings(value="unchecked")

四、注解的应用范围

package、class、method、field等上面。通过反射机制来访问。

五、常用的内置注解

1、@Override:标记的方法是重写了父类的方法

2、@Deprecated:标记的方法是表示遗弃、废弃,不建议人们以后去使用,但是能使用

3、@SuppressWarnings:用来抑制编译时的警告信息

3.1@SuppressWarnings(value={"unchecked","deprecation"})

六、自定义注解

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口

@interface用来声明一哥注解 格式: public @interface 注解名{定义体}

自定义注解时,我们一般在在自定义注解前面加元注解(作用:负责注解其它注解)java定义了4个标准的meta_annotation类型,他们被用来提供对其它annotation类型说明,详见java.lang.annotation包(@Target、@Retention、@Document、@Inherited)

@Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

@Retention

七、综合所学写一个小测试

该测试可以帮助大家理解ORM框架映射,因为这个是用注解写的一个关于实体类到数据库表的简单映射

7.1 我们写两个注解、一个注解用来指定实体类映射到数据库中的表的名称,另一个用来指定该实体类中所有字段映射到数据库表的详细信息(包括字段名、字段类型、字段长度)

1 packageedu.aeon.annotation;2

3 import staticjava.lang.annotation.ElementType.TYPE;4 import staticjava.lang.annotation.RetentionPolicy.RUNTIME;5

6 importjava.lang.annotation.Retention;7 importjava.lang.annotation.Target;8

9 @Retention(RUNTIME)10 @Target(TYPE)11 /**

12 *@authorlzj13 * @create 2017年11月23日 下午1:13:5314 * @describe 用来指定注解所对应类映射到数据库中的表名称15 */

16 public @interfaceCreateTable {17 String tableName();18 }

1 packageedu.aeon.annotation;2

3 import staticjava.lang.annotation.ElementType.FIELD;4 import staticjava.lang.annotation.RetentionPolicy.RUNTIME;5

6 importjava.lang.annotation.Retention;7 importjava.lang.annotation.Target;8

9 @Retention(RUNTIME)10 @Target(FIELD)11 /**

12 *@authorlzj13 * @create 2017年11月23日 下午1:17:5814 * @describe 用于注解实体类中属性到数据库的映射关系15 */

16 public @interfaceAeonField {17 //指定列名

18 String ColumnName();19 //指定列类型

20 String ColumnType();21 //指定该列大小长度

22 intColumnLength();23 }

7.2接下来我们简单定义一个实体类、该实体类采用我们刚才定义的两个注解

1 packageedu.aeon.entity;2

3 importedu.aeon.annotation.CreateTable;4 importedu.aeon.annotation.AeonField;5

6 /**

7 *@authorlzj8 * @create 2017年11月23日 下午1:14:519 * @describe 简单定义一个实体类10 */

11 @CreateTable(tableName="t_user")12 public classT_User {13 @AeonField(ColumnName="UserId",ColumnType="int", ColumnLength = 10)14 private intuId;15 @AeonField(ColumnName="UserName",ColumnType="varchar", ColumnLength = 16)16 privateString uName;17 @AeonField(ColumnName="UserAge",ColumnType="int", ColumnLength = 3)18 private intuAge;19 public intgetuId() {20 returnuId;21 }22 public void setuId(intuId) {23 this.uId =uId;24 }25 publicString getuName() {26 returnuName;27 }28 public voidsetuName(String uName) {29 this.uName =uName;30 }31 public intgetuAge() {32 returnuAge;33 }34 public void setuAge(intuAge) {35 this.uAge =uAge;36 }37 }

7.3写一个注解的解析小程序

1 packageedu.aeon.annotation.test;2

3 importjava.lang.annotation.Annotation;4 importjava.lang.reflect.Field;5

6 importedu.aeon.annotation.AeonField;7 importedu.aeon.annotation.CreateTable;8 importedu.aeon.entity.T_User;9

10 /**

11 *@authorlzj12 * @create 2017年11月23日 下午1:21:3813 * @describe 解析注解类信息14 */

15 public classAnnotationTest {16

17 /**

18 * at 2017年11月23日 下午1:21:38 by lzj19 *@throwsSecurityException20 *@throwsNoSuchFieldException21 * @Parameters122 * @Returns void23 */

24 public static void main(String[] args) throwsNoSuchFieldException, SecurityException{25 Class clazz = null;26 try{27 clazz = Class.forName("edu.aeon.entity.T_User");28 } catch(ClassNotFoundException e) {29 e.printStackTrace();30 }31 /**

32 * 获得edu.aeon.entity.T_User类的所有注解信息33 */

34 Annotation an1[]=clazz.getAnnotations();35 for(Annotation a:an1) {36 System.out.println(a);37 }38 /**

39 * 获得指定(注解)类的指定注解信息40 */

41 CreateTable an2=(CreateTable) clazz.getAnnotation(CreateTable.class);42 System.out.println("表名:"+an2.tableName());43 /**

44 * 获得指定属性的注解信息45 */

46 StringBuffer sb=new StringBuffer("create table ");47 sb.append(an2.tableName()).append(" ( ");48 /*//获得uName这个属性49 Field field=clazz.getDeclaredField("uName");*/

50 Field [] field1=clazz.getDeclaredFields();51 for(Field f : field1) {52 AeonField af=f.getAnnotation(AeonField.class);53 sb.append(af.ColumnName()).append(" ").append(af.ColumnType()).append("(").append(af.ColumnLength()).append("),");54 //System.out.println(af.ColumnName()+"\t"+af.ColumnType()+"\t"+af.ColumnLength());

55 }56 //这里拼接sql方式很多,可以采取截取、也可以采取将最后一个逗号替换成右括号

57 String sql=sb.substring(0, sb.lastIndexOf(","))+")";58 System.out.println(sql);59 /*//获得uName这个属性所对应的注解(所有信息数据)60 AeonField aField=field.getAnnotation(AeonField.class);61 //打印uName属性所对应的注解的详细信息62 System.out.println("uName属性信息:"+aField.ColumnName()+"---"+aField.ColumnType()+"---"+aField.ColumnLength());63 */

64 /**

65 * 那么这样我们可以通过获得的表名、表字段及属性来拼接出sql、然后用JDBC执行该sql,去创建表66 * JDBC执行sql比较简单,格式也比较固定,所以此处省略!67 */

68

69 }70

71 }

7.4控制台输出截图附上:

将生成的sql拿到数据库执行:

到这里我们简单解析出了这个实体类映射到数据库中的对应信息,那么接下来用JDBC去执行这条解析出来的sql语句即可,因为JDBC执行sql的格式比较固定,且比较简单且由于时间原因此处不一一写出来了!

java类注释_java中注解相关推荐

  1. java 类对象_Java中的对象和类是什么?

    今天我们来了解一下在java中到底什么是类,什么是对象,学习之前首先要了解什么是面向过程?什么是面向对象. 计算机语言其实就是和生活中的事件是一样的,每一行代码都代表着一件事情的发展或者结果,是现实世 ...

  2. java类同步_Java中方法,对象,类的同步

    关于在多线程环境中使用同步,我需要一些澄清.我在下面有一个小例子类.但我实际上发现很难做出以下内容如何工作的测试用例;我想要测试用例的原因是要了解同步如何处理这些不同的场景 >如果一个线程调用S ...

  3. java类索引_java中索引的分类,图片详解

    java的学习是一个漫长而又循环往复不断上升的过程,今天我们再来看一下java索引的分类,并且通过详细的图片解析. 首先,java中的索引主要分为聚簇索引和非聚簇索引. 其中InnoDB主键使用的是聚 ...

  4. java类加密_Java中常用加密类型

    1.对称加密 image.png 密钥:加解密钥相同 缺点:无法确保密钥被安全传递 常用算法:DES.3DES(TripleDES).AES等 2.非对称加密 image.png image.png ...

  5. java类的注释模板_IDEA添加Java类注释模版的方法

    本文介绍了idea添加java类注释模版的方法,分享给大家,具体如下: idea版本:intellij idea 2017.2.5 x64 eclipse能在类上方输入/**,回车添加类注释模版,但i ...

  6. java类功能说明注释添加,IDEA添加Java类注释模版的方法

    本文介绍了idea添加java类注释模版的方法,分享给大家,具体如下: idea版本:intellij idea 2017.2.5 x64 eclipse能在类上方输入/**,回车添加类注释模版,但i ...

  7. java类注释格式模板

    java类注释格式模板设置 File -> Settings -> Editor -> File and Code Templates -> 右侧File标签 -> Cl ...

  8. java中注解的使用_java中注解的使用

    使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...

  9. java method 注释_Java注解

    Java注解 注解概述 3.注解 3.1.注解,或者叫做注释类型,英文单词是:Annotation 疑问:注解到底是干啥的????????? 3.2.注解Annotation是一种引用数据类型.编译之 ...

最新文章

  1. 面向世界、勇于进取、树立自信、保持特色--自博162
  2. Python切片中的误区与高级用法
  3. rhel 8.2不识别unicode_基于tensorflow 实现端到端的OCR:二代身份证号识别
  4. 回调、匿名函数、闭包
  5. 正则表达式替换和不包含指定字符串
  6. MATLAB字符数组和空数组
  7. CvtColor(转)
  8. idea更换源_在Intelij IDEA中修改阿里Maven源
  9. 软考之网络管理员(包含2004-2018历年真题详解+课本教材讲义+视频教程)
  10. 锁定计算机后如何显示文字,我的电脑图标和文字后面有拖影怎么去掉
  11. 实际成本调整(R12)
  12. python不支持下标访问元素吗_Python 集合不支持使用下标访问其中的元素
  13. “无线大连”喷薄欲出
  14. html5怎么制作音乐相册,怎么制作音乐相册-怎么制作音乐相册并加字幕 就是很多照片制作动画加背景音乐加文字...
  15. nvidia linux屏幕撕裂,【技巧分享】你的Nvidia显卡在Win 7看视频画面撕裂没有?
  16. 百问网七天物联网课程课后笔记(第五天提高课)
  17. 经典重读《信号与系统》-第六章
  18. K8s强制删除命名空间
  19. python职位应聘_我去面试Python岗位了
  20. 用蒙特卡罗方法实现圆周率的计算

热门文章

  1. 正则表达式_match方法使用
  2. phpstudy中80端口和3306端口被占用问题
  3. 一些非常好看的背景颜色渐变
  4. 看看“疫苗查询”小程序有温度的代码
  5. 28-进程空间与 fork 函数原理
  6. 我的世界服务器键位显示怎么开,客户端设置方法 游戏键位及画面设置
  7. Ehcache与Guava Cache的介绍
  8. 计算机及应用自考考研学校,【王道论坛统计】2010 34所自主划线院校计算机复试线及相关详细报考信息(感谢gumuguo)...
  9. Android基础篇 TextView 设置行间距字间距
  10. 为什么总线对计算机很重要,什么是前端总线,这个很重要么?