自定义注解的使用以及利用自定义注解实现ORM

xiaoxiao2021-02-28  28

1.如何自定义注解?

package com.dudu.lizhen.customannotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解 * ---@Target 标识可以允许在什么地方使用 (比如 :方法或者类什么的) * --@Retention 标识 允许什么方式获取信息 (比如类似例子:就是可以通过java反射机制获取信息) * Created by lizhen on 2018/1/29. */ @Target(value = ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotations { String value() default ""; int classId() default 0; String[] arrAr(); } /** * 使用自定义注解的例子 */ class AnnDemo{ private String name; @CustomAnnotations(value = "lizhen",classId = 175,arrAr = {"11","22"}) public void add(){ } }

2.利用自定义注解实现ORM

package com.dudu.lizhen.customannotations; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * 实体类的注解 * 目的:通过自定义注解实现实体类与表的对应 select user_name ,user_age from user_table * Created by lizhen on 2018/1/30. */ @Retention(RetentionPolicy.RUNTIME) public @interface SetTable { String name(); } package com.dudu.lizhen.customannotations; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * 属性注解 * 目的:通过自定义注解实现实体类与表的对应 select user_name ,user_age from user_table * Created by lizhen on 2018/1/30. */ @Retention(RetentionPolicy.RUNTIME) public @interface SetProperty { String name(); int length(); } package com.dudu.lizhen.customannotations; /** * java实体类 * 目的 :通过自定义注解实现实体类与表的对应 select user_name ,user_age from user_table * Created by lizhen on 2018/1/30. */ @SetTable(name = "user_table") public class UserEntry { /** * 姓名 */ @SetProperty(name = "user_name", length =10 ) private String name; /** * 年龄 */ @SetProperty(name ="user_age" , length =10 ) private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "UserEntry{" + "name='" + name + '\'' + ", age=" + age + '}'; } } package com.dudu.lizhen.customannotations; import java.lang.reflect.Field; /** * 实体类与表的映射测试 * 目的 :通过自定义注解实现实体类与表的对应 select user_name ,user_age from user_table * Created by lizhen on 2018/1/30. */ public class UserEntryTest { public static void main(String[] args) { try { //项目使用注解肯定会用到java反射,java反射的应用场景 Spring IOC ,jdbc ,自定义注解的实现 Class<?> aClass = Class.forName("com.dudu.lizhen.customannotations.UserEntry"); //getAnnotations 获取该类上使用了那些注解 // Annotation[] annotations = aClass.getAnnotations(); // for (Annotation annotation:annotations){ // System.out.println(annotation); // } StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(" select "); Field[] declaredFields = aClass.getDeclaredFields(); for (int i= 0;i<declaredFields.length;i++){ SetProperty annotation = declaredFields[i].getAnnotation(SetProperty.class); String name = annotation.name(); stringBuffer.append(name); if (i == declaredFields.length-1){ stringBuffer.append(" from "); }else{ stringBuffer.append(" , "); } } //获取某个注解对象 SetTable annotation = aClass.getAnnotation(SetTable.class); String name = annotation.name(); stringBuffer.append(name); System.out.println(stringBuffer.toString()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 查看效果:

转载请注明原文地址: https://www.6miu.com/read-1700259.html

最新回复(0)