• 注解学习实例(模拟hibernate,table,column注解,拼装SQL)


    直接上代码

    package com.guoxinet.o2o.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Column {
    	String value();
    }
    

      

    package com.guoxinet.o2o.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Table {
    	String value();
    }
    

      

    package com.guoxinet.o2o.annotation;
    @Table("tb_user")
    public class User {
        @Column("user_id")
        private int userId;
        
        @Column("user_name")
        private String userName;
        
        @Column("address")
        private String address;
        
        @Column("email")
        private String email;
    
        public int getUserId() {
            return userId;
        }
    
        public void setUserId(int userId) {
            this.userId = userId;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
    }
    package com.guoxinet.o2o.annotation;
    @Table("tb_department")
    public class DepartMent {
        @Column("department_id")
        private int departmentId;
        
        @Column("name")
        private String name;
    
        public int getDepartmentId() {
            return departmentId;
        }
    
        public void setDepartmentId(int departmentId) {
            this.departmentId = departmentId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        
    
    }
    package com.guoxinet.o2o.annotation;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    public class Client {
        
        public static void main(String[] args) {
            User user = new User();
            user.setUserId(1);
            user.setEmail("3964412@qq.com,yafeng@yahu.com,lifeng@guoxinet.com");
            getSql(user);
            
            DepartMent dm = new DepartMent();
            dm.setDepartmentId(100);
            dm.setName("技术部");
            getSql(dm);
        }
        
        public static String getSql(Object ob){
            StringBuilder sb = new StringBuilder();
            //获取class
            @SuppressWarnings("rawtypes")
            Class c = ob.getClass();
            //获取table的名字
            @SuppressWarnings("unchecked")
            boolean isExist = c.isAnnotationPresent(Table.class);
            if(!isExist){
                return "";
            }
            Table table = (Table)c.getAnnotation(Table.class);
            
            String tableName = table.value();
            sb.append("select * from ").append(tableName).append(" where 1=1 ");
            //遍历属性
            Field[] fArray =c.getDeclaredFields();
            for(Field field: fArray){
                boolean fisExist = field.isAnnotationPresent(Column.class);
                if(!fisExist){
                    continue;
                }
                Column column = (Column)field.getAnnotation(Column.class);
                //列名
                String columnName = column.value();
                //得到属性的值
                String methodName = "get" +field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);
                Object fieldValue = null;
                try {
                    Method method = c.getMethod(methodName);
                    fieldValue = method.invoke(ob);
                    if(null == fieldValue || (fieldValue instanceof Integer && 0 == (Integer)fieldValue) ){
                        System.out.println(fieldValue);
                        continue;
                    }
                    sb.append(" and ").append(columnName);
                    if(fieldValue instanceof String){
                        if(((String) fieldValue).contains(",")){
                            String[] sArray = ((String) fieldValue).split(",");
                            sb.append(" in ").append("(");
                            for(String s : sArray){
                                sb.append("'").append(s).append("',");
                            }
                            sb.deleteCharAt(sb.length()-1);
                            sb.append(")");
                        }else{
                            sb.append(" = ");
                            sb.append("'").append(fieldValue).append("'");
                        }
                        
                    }else{
                        sb.append(" = ").append(fieldValue);
                    }
                    
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
            }
            sb.append(";");
            System.out.println(sb.toString());
            return null;
        }
    
    }
  • 相关阅读:
    Android OpenGL ES 相机预览适配不同分辨率的手机
    Android NDK 之CPU架构兼容与包体积控制方案
    [QUANTAXIS量化分析]三因素模型(ZZ)
    [QUANTAXIS量化分析]成长股内在价值投资策略(ZZ)
    [QUANTAXIS量化分析]成长股内在价值投资策略(ZZ)
    [QUANTAXIS量化分析]羊驼策略1(zz)
    联想数据守护者在Win10上不能安装的问题
    7月14号左右转为做多 目前需要一个月左右的时间去消化 大概点位在2万以下做多 不要操作 越操作越乱
    vim :.,$d 从当前行到结尾删除
    calico
  • 原文地址:https://www.cnblogs.com/working/p/4683634.html
Copyright © 2020-2023  润新知