zoukankan      html  css  js  c++  java
  • 我的java学习之路--Java注解专题

    学习网址:http://www.imooc.com/video/8861

    1.引言

      

    2.Java中的常见注解

      

    JDK自带注解:<br>
    @Override @Deprecated @Suppvisewarnings
    @override 下面的方法肯定覆盖了父类的方法
    @Deprecated 下面的方法表示已经过时
    @SuppressWarnings("deprecation") 忽视@Deprecation的警告

    3.注解的分类

      

     

     注解的注解就叫做元注解

     

    4.自定义注解

      

        

        

      

     

     

     

    5.解析注解

     

      

    RetentionPolicy.SOURCE

    RetentionPolicy.CLASS

    RetentionPolicy.RUNTIME

      

     6.注解实战

       

       

     

    package com.myAnnotation;
    
    @Table("user")
    public class Filter {
        
        @Column("id")
        private int id;
        @Column("user_name")
        private String userName;
        @Column("nick_name")
        private String nickName;
        @Column("age")
        private int age;
        @Column("city")
        private String city;
        @Column("email")
        private String email;
        @Column("mobile")
        private String mobile;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String name) {
            this.userName = name;
        }
        public String getNickName() {
            return nickName;
        }
        public void setNickName(String nickName) {
            this.nickName = nickName;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public String getCity() {
            return city;
        }
        public void setCity(String city) {
            this.city = city;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
        @Override
        public String toString() {
            return "Filter [id=" + id + ", name=" + userName + ", nickName=" + nickName
                    + ", age=" + age + ", city=" + city + ", email=" + email
                    + ", mobile=" + mobile + "]";
        }
        
        
    }
    package com.myAnnotation;
    
    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();
    }
    package com.myAnnotation;
    
    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();
    }
    package com.myAnnotation;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class Test {
        
        public static void main(String[] args) {
            
            Filter f1 = new Filter();
            
            f1.setId(10);//查询id为10的用户
            
            Filter f2 = new Filter();
            
            f2.setUserName("lucy");//模糊查询用户名为lucy的用户
        
            Filter f3 = new Filter();
            
            //查询邮箱为其中任意一个的
            f3.setEmail("liu@sina.com,zh@163.com,2222@qq.com");
        
        
            String sql1 = query(f1);
            
            String sql2 = query(f2);
            
            String sql3 = query(f3);
            
            System.out.println(sql1);
            System.out.println(sql2);
            System.out.println(sql3);
        }
        
        //查询语句 可以用于各种语句
        @SuppressWarnings("unchecked")
        private static String query(Filter f){
            
            StringBuilder sb = new StringBuilder();
            //1.获取到class
            @SuppressWarnings("rawtypes")
            Class c = f.getClass();
            //2.获取到table的名字
            boolean texists = c.isAnnotationPresent(Table.class);
        
            if(!texists){
                
                return null;
            }
            
            Table t = (Table)c.getAnnotation(Table.class);
            
            String tableName = t.value();
            
            sb.append("SELECT * FROM ").append(tableName).append(" WHERE 1=1");
            
            //3.遍历所有的字段
            Field[] fArray = c.getDeclaredFields();
            
            for(Field field:fArray){
                //4.处理每个字段对应的sql
                //4.1拿到字段名
                boolean cexists = field.isAnnotationPresent(Column.class);
                if(!cexists){
                    continue;
                }
                Column column = field.getAnnotation(Column.class);
                String columnName = column.value();
                //4.2拿到字段值
                String fieldName = field.getName();
                String getMethodName = "get"+ fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
                
                Object fieldValue = null;
                
                try {
    
                    Method getMethod = c.getMethod(getMethodName);
    
                    fieldValue = getMethod.invoke(f);
                    
                } catch (NoSuchMethodException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                //4.3拼装sql
                if(fieldValue==null||(fieldValue instanceof Integer)&&((Integer)fieldValue==0)){
                    
                    continue;
                }
                
                sb.append(" AND ").append(columnName);
                
                if(fieldValue instanceof String){
                    
                    if(((String)fieldValue).contains(",")){
                        
                        String[] values = ((String)fieldValue).split(",");
                        
                        sb.append(" in(");
                        
                        for(String value:values){
                            
                            sb.append("'").append(value).append("'").append(",");
                            
                        }
                        sb.deleteCharAt(sb.length() - 1);
                        
                        sb.append(")");
                        
                    }else{
                        
                        sb.append(" = ").append("'").append(fieldValue).append("'");
                        
                    }
                    
                }else if(fieldValue instanceof Integer){
                    
                    sb.append(" = ").append(fieldValue);
                }
                
            }
            
            return sb.toString();
        }
    }

     

     

  • 相关阅读:
    POJ2142:The Balance——题解
    POJ1061:青蛙的约会——题解
    接口测试结束后的小结
    接口测试结束后的小结
    如何进行需求测试/需求评审
    如何进行需求测试/需求评审
    测试人员掌握代码的重要性
    测试人员掌握代码的重要性
    测试人员掌握代码的重要性
    软件自动化测试开发-开班啦
  • 原文地址:https://www.cnblogs.com/haimishasha/p/5732215.html
Copyright © 2011-2022 走看看