java类注释_java中注解
一、什么是注解
注解是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中注解相关推荐
- java 类对象_Java中的对象和类是什么?
今天我们来了解一下在java中到底什么是类,什么是对象,学习之前首先要了解什么是面向过程?什么是面向对象. 计算机语言其实就是和生活中的事件是一样的,每一行代码都代表着一件事情的发展或者结果,是现实世 ...
- java类同步_Java中方法,对象,类的同步
关于在多线程环境中使用同步,我需要一些澄清.我在下面有一个小例子类.但我实际上发现很难做出以下内容如何工作的测试用例;我想要测试用例的原因是要了解同步如何处理这些不同的场景 >如果一个线程调用S ...
- java类索引_java中索引的分类,图片详解
java的学习是一个漫长而又循环往复不断上升的过程,今天我们再来看一下java索引的分类,并且通过详细的图片解析. 首先,java中的索引主要分为聚簇索引和非聚簇索引. 其中InnoDB主键使用的是聚 ...
- java类加密_Java中常用加密类型
1.对称加密 image.png 密钥:加解密钥相同 缺点:无法确保密钥被安全传递 常用算法:DES.3DES(TripleDES).AES等 2.非对称加密 image.png image.png ...
- java类的注释模板_IDEA添加Java类注释模版的方法
本文介绍了idea添加java类注释模版的方法,分享给大家,具体如下: idea版本:intellij idea 2017.2.5 x64 eclipse能在类上方输入/**,回车添加类注释模版,但i ...
- java类功能说明注释添加,IDEA添加Java类注释模版的方法
本文介绍了idea添加java类注释模版的方法,分享给大家,具体如下: idea版本:intellij idea 2017.2.5 x64 eclipse能在类上方输入/**,回车添加类注释模版,但i ...
- java类注释格式模板
java类注释格式模板设置 File -> Settings -> Editor -> File and Code Templates -> 右侧File标签 -> Cl ...
- java中注解的使用_java中注解的使用
使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...
- java method 注释_Java注解
Java注解 注解概述 3.注解 3.1.注解,或者叫做注释类型,英文单词是:Annotation 疑问:注解到底是干啥的????????? 3.2.注解Annotation是一种引用数据类型.编译之 ...
最新文章
- 面向世界、勇于进取、树立自信、保持特色--自博162
- Python切片中的误区与高级用法
- rhel 8.2不识别unicode_基于tensorflow 实现端到端的OCR:二代身份证号识别
- 回调、匿名函数、闭包
- 正则表达式替换和不包含指定字符串
- MATLAB字符数组和空数组
- CvtColor(转)
- idea更换源_在Intelij IDEA中修改阿里Maven源
- 软考之网络管理员(包含2004-2018历年真题详解+课本教材讲义+视频教程)
- 锁定计算机后如何显示文字,我的电脑图标和文字后面有拖影怎么去掉
- 实际成本调整(R12)
- python不支持下标访问元素吗_Python 集合不支持使用下标访问其中的元素
- “无线大连”喷薄欲出
- html5怎么制作音乐相册,怎么制作音乐相册-怎么制作音乐相册并加字幕 就是很多照片制作动画加背景音乐加文字...
- nvidia linux屏幕撕裂,【技巧分享】你的Nvidia显卡在Win 7看视频画面撕裂没有?
- 百问网七天物联网课程课后笔记(第五天提高课)
- 经典重读《信号与系统》-第六章
- K8s强制删除命名空间
- python职位应聘_我去面试Python岗位了
- 用蒙特卡罗方法实现圆周率的计算
热门文章
- 正则表达式_match方法使用
- phpstudy中80端口和3306端口被占用问题
- 一些非常好看的背景颜色渐变
- 看看“疫苗查询”小程序有温度的代码
- 28-进程空间与 fork 函数原理
- 我的世界服务器键位显示怎么开,客户端设置方法 游戏键位及画面设置
- Ehcache与Guava Cache的介绍
- 计算机及应用自考考研学校,【王道论坛统计】2010 34所自主划线院校计算机复试线及相关详细报考信息(感谢gumuguo)...
- Android基础篇 TextView 设置行间距字间距
- 为什么总线对计算机很重要,什么是前端总线,这个很重要么?