zoukankan      html  css  js  c++  java
  • 一个Java例子,解释清楚注解的作用

    https://baijiahao.baidu.com/s?id=1612408653409570352&wfr=spider&for=pc

    Table注解

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.TYPE) // 可以应用于类的任何元素
    @Retention(RetentionPolicy.RUNTIME) //:在运行时有效(即运行时保留)
    public @interface Table {
        String value();
    }
    

    Column注解

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.FIELD) // 可以应用于类的任何元素
    @Retention(RetentionPolicy.RUNTIME) //:在运行时有效(即运行时保留)
    public @interface Column {
        String value();
    }
    
    

    Person类

    package com.raykeyzzz.annotation;
    
    @Table("Person")
    public class Person {
        @Column("name")
        private String name;
        @Column("userName")
        private String userName;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    }
    
    

    Main类

    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class Main {
        public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
            Person p1 = new Person();
            p1.setName("ai");
            p1.setUserName("aiai");
            String query = query(p1);
            System.out.println(query);
    
        }
        public static String query(Person person) throws InvocationTargetException, IllegalAccessException {
    
            StringBuilder sb = new StringBuilder();
            // 通过反射获取对象
            Class p = person.getClass();
            // 判断class类是不是注解类
            boolean exist = p.isAnnotationPresent(Table.class);
            if (!exist) {
                return null;
            }
    
            // 如果是强制转化为Table
            Table table = (Table) p.getAnnotation(Table.class);
            String tableName = table.value();
    
            // 接下来就是拼接sql语句
            sb.append("select * from ").append(tableName).append(" where 1=1");
            Field[] fArray = p.getDeclaredFields();
            for (Field field : fArray) {
                boolean fExist = field.isAnnotationPresent(Column.class);
                if (!fExist) {
                    return null;
                }
                Column column = field.getAnnotation(Column.class);
                String columnName = column.value();
                String fieldName = field.getName();
                Object fieldValue = null;
                //此处将生成getXXX方法,用于下面通过反射执行对应方法拿到里面的返回值
                String getMethodName = "get" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
                try {
                    Method method = p.getMethod(getMethodName);
                    fieldValue = method.invoke(person);
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }
    
                sb.append(" and ").append(columnName).append("=").append(fieldValue);
            }
    
            return sb.toString();
        }
    }
    
    
    ``
  • 相关阅读:
    DotNetty 实现 Modbus TCP 系列 (一) 报文类
    C# 获取文件详细备注信息 (如图片、视频实际创建时间)
    Java 下载 HLS (m3u8) 视频
    开源 DotNetty 实现的 Modbus TCP/IP 协议
    SQL Server 2008 开启远程连接
    在 Web 页面使用 VLC 插件播放 m3u8 视频流 (360 极速模式)
    在 Web 页面中使用离线地图
    使用 Travis CI 自动部署 Hexo 站点至 GitHub Pages
    BZOJ 3238: [Ahoi2013]差异((单调栈+后缀数组)/(后缀树))
    BZOJ 3998: [TJOI2015]弦论(后缀自动机)
  • 原文地址:https://www.cnblogs.com/sweetorangezzz/p/13029422.html
Copyright © 2011-2022 走看看