注解定义使用---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();
		}
	}

}

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值