zoukankan      html  css  js  c++  java
  • java利用注解模拟简单的ORM

        源于一个小的DAO组件,内容很简单是基于Bonecp的JDBC工具,但是项目里常常会遇到数据库字段与属性不一致的情况,在利用反射和内省创建BEAN时就比较麻烦。开始考虑使用配置文件,但是想想配置文件还是比较坑爹的,最后采用注解的方式。

        工具类很简单,但对于简单业务还是比较方便的。代码如下:

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target( { ElementType.FIELD })
    public @interface AttrTransform {
        
        public String col();
        
        public String property();
    }

    注解中col用来标示数据库端字段名,property用来标示Bean内属性。注解处理代码如下:

    /**
         * 列对照
         * @param propertyName 属性名称
         * @param type    类
         * @return
         */
        public static String propertyToCol(String propertyName,Class<?> type){
            if(null!=type){
                Field[] field = type.getDeclaredFields();
                Annotation ann = null;
                for (Field f : field) {
                    ann = f.getAnnotation(AttrTransform.class);
                    if(ann!=null){
                        AttrTransform at = (AttrTransform)ann;
                        if(propertyName.equalsIgnoreCase(at.property())){
                            return at.col();
                        }
                    }
                }
            }
            return propertyName;
        }
        /**
         * 属性对照
         * @param propertyName 列名称
         * @param type    类
         * @return
         */
        public static String colToProperty(String colName,Class<?> type){
            if(null!=type){
                Field[] field = type.getDeclaredFields();
                Annotation ann = null;
                for (Field f : field) {
                    ann = f.getAnnotation(AttrTransform.class);
                    if(ann!=null){
                        AttrTransform at = (AttrTransform)ann;
                        if(colName.equalsIgnoreCase(at.col())){
                            return at.property();
                        }
                    }
                }
            }
            return colName;
        }

    如上所示,考虑到注解过多时候会比较慢,所以可以在建立类注解或其他标示然后将注解缓存起来。

    PS:个人记录下,这东西改着是挺难的

  • 相关阅读:
    Jmeter四种参数化方式
    微信公众号开发--服务器接入
    IIS调试程序
    vs连接GitHub
    vs2013 卸载
    Edge,IE浏览器 兼容模式设置
    XML非法字符的处理
    SQL Server Union联合查询
    SQL Server NULL的正确用法
    SQL Server Like 与 通配符
  • 原文地址:https://www.cnblogs.com/GYoungBean/p/2827723.html
Copyright © 2011-2022 走看看