hibernate注解的实现原理之1
来源:互联网 发布:linux xargs cat命令 编辑:程序博客网 时间:2024/06/16 13:38
hibernate 作为一种orm框架,是一种关系对象映射framework,它可以通过读取xml配置文件获取实体BEAN对应的属性,或者注解方式去读取实体bean的字段,最后根据字段,以及配置的表名,在相应数据库生成表,或者持久化实体成表记录。
本节及之后的几个章节,都将讲解用注解方式如何简单模似hibernate根据实体对象如何生成数据表(操作数据的步骤,后面陆续讲解到)
hibernate注解的实现原理之step1 注解原理
1.简述:根据注解方式,注解某个实体BEAN,通过反射读取该BEAN类是否被注解了,该BEAN类的字段是否被注解了
2.注解原理
java jdk 在lang.annotation包下提供了一些注解工具,在此处特意提及到以下三个特殊的注解
@Target(value=ElementType.TYPE) 类型注解
@Retention(RetentionPolicy.RUNTIME) 注解信息保存或被读取的机制(CLASS,RUNTIME,SOURCE)
@Documented //文档化
3.例子:
下面以实体Student例子,说明如何自定义注解,通过对Student的注解,获取Student类的注解情况
demo code below:
###########################
#表名注解标签
package com.java.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value=ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TABLE {
String name() default "注解表名默认值";
}
#字段名注解标签
package com.java.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value=ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FIELD {
String name() default "";
String value() default "";
int[] intArr() default {1,2,3,4};
Class type() default String.class;
}
#Student类的注解情况
package com.java.annotation.classes;
import com.java.annotation.FIELD;
import com.java.annotation.TABLE;
@TABLE
public class Student {
private int id;
@FIELD(name="STU_NAME",value="xxx")
private String name;
@FIELD(name="STU_No",intArr={2,3,4})
private String studentNo;
public Student(int id, String name, String studentNo) {
super();
this.id = id;
this.name = name;
this.studentNo = studentNo;
}
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 String getStudentNo() {
return studentNo;
}
public void setStudentNo(String studentNo) {
this.studentNo = studentNo;
}
}
##测试类,获取Student的注解情况
package com.java.annotation.test;
import java.lang.reflect.Field;
import com.java.annotation.TABLE;
import com.java.annotation.FIELD;
import com.java.annotation.classes.Student;
public class AnnotationTest {
/**
* @param args
* zhao.z.w.
*/
public static void main(String[] args) {
Student student = new Student(12,"小蚊子", "STU123456");
Class<Student> cls = Student.class;
//判断Student类是否有加TABLE注解
if(cls.isAnnotationPresent(TABLE.class)){
System.out.println("Student类有注解@TABLE");
TABLE table = cls.getAnnotation(TABLE.class);
System.out.println("name='"+table.name()+"'");
}else{
System.out.println("Student类没有注解@TABLE");
}
//反射获取所有Student类所有字段
Field[] fields = cls.getDeclaredFields();
for(Field field:fields){
if(field.isAnnotationPresent(FIELD.class)){
System.out.println("字段名为"+field.getName()+"被@注解了:");
FIELD f = field.getAnnotation(FIELD.class);
System.out.println("name='"+f.name()+"'");
System.out.println("value='"+f.value()+"'");
System.out.println("type='"+f.type()+"'");
System.out.println("intArr='"+f.intArr()+"'");
}else{
System.out.println("字段名为"+field.getName()+"没有被@注解");
}
}
}
}
##输出结果如下:
Student类有注解@TABLE
name='注解表名默认值'
字段名为id没有被@注解
字段名为name被@注解了:
name='STU_NAME'
value='xxx'
type='class java.lang.String'
intArr='[I@12b3374'
字段名为studentNo被@注解了:
name='STU_No'
value=''
type='class java.lang.String'
intArr='[I@13f3789'
接下来就是hibernate会从获取到的有注解的字段,去拼接SQL,执行相关的建表语句,相关功能代码待续!
- hibernate注解的实现原理之1
- hibernate注解的实现原理之2
- Hibernate之N-1(注解实现,无连接表)
- Spring注解的实现原理
- Java注解的实现原理
- hibernate之ORM实现原理
- Java学习之注解Annotation实现原理
- Java学习之注解Annotation实现原理
- Android注解使用之Annotation实现原理
- 使用Spring的注解实现Hibernate事务管理
- hibernate ORM的实现原理
- Java自定义注解 简单Hibernate的注解实现
- javaee之hibernate的缓存与注解
- Hibernate之注解表的命名策略
- 【Hibernate】框架之注解的配置
- 剖析@Resource注解的实现原理
- spring中注解的实现原理
- java注解的实现和工作原理
- 堆排序
- POJ 3900 The Robbery (dfs暴搜+剪枝)
- VMware虚拟机安装MAC OS X Mountain Lion详细图文教程
- [c#基础教程]C# 特性(Attribute)详细介绍
- 继承的本质(读《你必须知道的.net》记录笔记)
- hibernate注解的实现原理之1
- 八皇后排序,92种
- 透明窗口和窗口阴影
- 多线程中出现的一个面试题
- Magento邮件发送完美设置
- poj 2983——Is the Information Reliable?
- 面向对象设计原则
- 号称最快排序
- ibatis常用16条SQL语句