注解定义使用---orm映射注解使用简单介绍

1 注解简介:

   a) 存在意义: 定义后用于被编译器读取,并服务于使用注解的类上

   b) 定义和使用步骤:

          b.1) 定义注解

          b.2) 在目标类中声明引用注解

          b.3) 定义解释类解释注解和处理注解

2 注解详细概念看下图:

 

 

 



 

3 注解简单定义和使用:

1 定义注解

@Target(value={ElementType.METHOD,ElementType.TYPE}) // 指定作用范围为 方法和类上
@Retention(RetentionPolicy.RUNTIME)// 指定有效范围(soruce + class 级别都有效并支持反射)
public @interface SxtAnnotation01 {
	// 定义属性时,基本需要有默认值,否则使用注解时候会报错 提示让有初始值 初始值一般为空串或者0 如果是-1则表示不存在
	String studentName() default ""; 
	int age() default 0;
	int id() default -1;   //String indexOf("abc")  -1
	
	String[] schools() default {"清华大学","北京上学堂"};
}


2 使用注解

@SxtAnnotation01 // 在类上使用注解
public class Demo02 {
	
	@SxtAnnotation01(age=19,studentName="老高",id=1001,
			schools={"北京大学","北京航空航天大学"})
	public void test(){ // 在方法上使用注解 并赋值
	}
	
	
	
}

4 注解在 orm上使用简单写法:



 

1 定义表注解

@Target(value={ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableAnno {
	String value();
}

2 定义属性注解

@Target(value={ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldAnno {
	String columnname();
	
	String type();
	
	int length();
	
}


3 实体bean上引用注解

@TableAnno(value = "student_table")
public class Student {

	@FieldAnno(columnname = "id", length = 10, type = "int")
	private int id;
	@FieldAnno(columnname = "name", length = 10, type = "varchar")
	private String name;
	@FieldAnno(columnname = "age", length = 3, type = "int")
	private int 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;
	}
	
}


4 定义解析处理注解类

public class AnalyticalAnnocation {

	/**
	 * 解析自定义注解
	 */
	public static void main(String[] args) {

		try {
			Class<Student> clazz = (Class<Student>) Class.forName("zm.annocation.Student");
			// 得到类注解TableAnno的属性值
			TableAnno tableAnno = clazz.getAnnotation(TableAnno.class);
			System.out.println(tableAnno.value());  // student_table
			// 得到属性注解
			Field  field = clazz.getDeclaredField("id");
			FieldAnno fieldAnno = field.getAnnotation(FieldAnno.class);
			int idLen = fieldAnno.length();
			String idType = fieldAnno.type();
			String idName = fieldAnno.columnname();
			System.out.println(idName + "--" + idType + "--" + idLen );//id--int--10
			
			
			Field  field1 = clazz.getDeclaredField("name");
			FieldAnno fieldAnno1 = field1.getAnnotation(FieldAnno.class);
			int nameLen = fieldAnno1.length();
			String nameType = fieldAnno1.type();
			String nameName = fieldAnno1.columnname();
			System.out.println(nameName + "--" + nameType + "--" + nameLen );//name--varchar--10
			
			
			Field  field2 = clazz.getDeclaredField("age");
			FieldAnno fieldAnno2 = field2.getAnnotation(FieldAnno.class);
			int ageLen = fieldAnno2.length();
			String ageType = fieldAnno2.type();
			String ageName = fieldAnno2.columnname();
			System.out.println(ageName + "--" + ageType + "--" + ageLen );//age--int--3
			
			
			// 如上操作得到实体Student对应表明,表字段名称,类型,长度,下面就可以通过拼接来实现创建.查询,等SQL操作
			// ........ 略
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2183597