按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html。

在学习反射和注解前,首先要练习一个ORM。

练习ORM

1.了解什么是ORM:Object RelationShip Mapping ——> 对象关系映射。

从上图可知:

  1.类和表结构对应。

  2.属性和字段对应。

  3.对象和记录对应。

要求:利用注解和反射完成类和表结构的映射关系。

package test;

import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field; //通过反射操作注解
public class Test{
public static void main(String[] args) {
Class c1 = Student.class; //利用反射获取注解
Annotation[] annotations = c1.getAnnotations();
for(Annotation annotation : annotations) {
System.out.println(annotation);
} //获取注解的value的值
TableHgqin tableHgqin = (TableHgqin) c1.getAnnotation(TableHgqin.class);
String value = tableHgqin.value();
System.out.println(value); //获得类指定的注解
Field[] fields = c1.getDeclaredFields();
for(Field field : fields) {
System.out.println("#字段为: "+field);
annotations = field.getAnnotations();
for(Annotation annotation : annotations) {
System.out.println(annotation);
}
//获取注解对应的值
FieldHgqin fieldHgqin = (FieldHgqin)field.getAnnotation(FieldHgqin.class);
System.out.println(fieldHgqin.columnName());
System.out.println(fieldHgqin.type());
System.out.println(fieldHgqin.length());
} }
} @TableHgqin("db_student")
class Student{ @FieldHgqin(columnName="db_id",type="int",length=10)
private int id;
@FieldHgqin(columnName="db_name",type="int",length=10)
private String name;
@FieldHgqin(columnName="db_age",type="varchar",length=3)
private int age; public Student() {
super();
// TODO Auto-generated constructor stub
} public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "student [id=" + id + ", name=" + name + ", age=" + age + "]";
} } //类名的注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface TableHgqin{
String value();
} //属性的注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface FieldHgqin{
String columnName();
String type();
int length();
}

运行结果为:

 几篇文章的所有案例,均需要一个一个练习,多看几次就懂了。

完结!!!

Java高级特性——反射机制(完结)——反射与注解的更多相关文章

  1. Java高级特性——反射机制(第二篇)

    在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...

  2. Java高级特性——反射

    感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ...

  3. Java 反射机制[Method反射]

    Java 反射机制[Method反射] 接着上一篇Java 反射机制[Field反射],通过调用Person类的setName方法将obj的name字段的Value设置为"callPerso ...

  4. Java 反射机制[Field反射]

    Java 反射机制[Field反射] 1.  反射概念及功能 反射就是把Java类中的各种成分映射成对应的Java类.比如一个Java类中用一个Class类的对象来表示. 一个类中的组成部分分为成员变 ...

  5. java高级特性增强

    第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...

  6. paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型

    paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...

  7. Java高级特性-String、StringBuffer和StringBuilder

    Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...

  8. Java高级特性1_流库_初体验

    Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...

  9. Java高级特性 第5节 序列化和、反射机制

    一.序列化 1.序列化概述 在实际开发中,经常需要将对象的信息保存到磁盘中便于检索,但通过前面输入输出流的方法逐一对对象的属性信息进行操作,很繁琐并容易出错,而序列化提供了轻松解决这个问题的快捷方法. ...

随机推荐

  1. go项目dockerfile最佳实践

    1. 前言 2. 不需要cgo情况下的最佳实践 3. 依赖cgo情况下的最佳实践 1. 前言 这几天在构建golang编写的web项目中,关于dockerfile编写的一些总结 可能是单纯我比较菜(大 ...

  2. PHP tempnam() 函数

    定义和用法 tempnam() 函数在指定的目录中创建一个具有唯一文件名的临时文件. 该函数返回新的临时文件名,如果失败则返回 FALSE. 语法 tempnam(dir,prefix) 参数 描述 ...

  3. PHP pow() 函数

    实例 pow() 的实例: <?phpecho(pow(2,4) . "<br>");echo(pow(-2,4) . "<br>" ...

  4. CF R638 div2 F Phoenix and Memory 贪心 线段树 构造 Hall定理

    LINK:Phoenix and Memory 这场比赛标题好评 都是以凤凰这个单词开头的 有凤来仪吧. 其实和Hall定理关系不大. 不过这个定理有的时候会由于 先简述一下. 对于一张二分图 左边集 ...

  5. Hadoop学习之基础环境搭建

    期望目的 基于VMware workstation 10.0 + CentOS 7 + hadoop 3.2.0,在虚拟机上搭建一套Hadoop集群环境,总共包含4个节点,其中1个master节点.3 ...

  6. 账本APP开发

    服务端开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 我平时喜欢用账 ...

  7. SpringMvc web.xml配置详情

    出处http://blog.csdn.net/u010796790 1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在w ...

  8. hibernate自动创建表报错,提示不存在

    报错:ERROR: HHH000299: Could not complete schema update  或 不能执行statement等 解决方式: 根据mysql版本更改hibernate.c ...

  9. 使用Azure人脸API对图片进行人脸识别

    人脸识别是人工智能机器学习比较成熟的一个领域.人脸识别已经应用到了很多生产场景.比如生物认证,人脸考勤,人流监控等场景.对于很多中小功能由于技术门槛问题很难自己实现人脸识别的算法.Azure人脸API ...

  10. 019_go语言中的方法

    代码演示 package main import "fmt" type rect struct { width, heigh int } func (r *rect) area() ...