rose jade框架 sql中的字段和实体类中的字段的映射关系

来源:互联网 发布:网络ip地址冲突 编辑:程序博客网 时间:2024/05/18 08:21
DAO
@SQL("SELECT ID,CITY_ID,CITY_NAME,STORE_ID,STORE_CODE,STORE_NAME,PAY_CODE as PAYCODE FROM BOSS_FINANCE_STORE_CODE WHERE CITY_ID=:cityId LIMIT 1 ")    public BossFinanceStoreCodeVO selectBossFinanceStoreCodeByCityId(@SQLParam("cityId") Integer cityId);

实体类

public class BossFinanceStoreCodeVO {    private Integer id;    private Integer cityId; // 城市ID    private String cityName; // 城市名    private String storeId; // 门店ID    private String storeCode; // 门店代码    private String storeName; // 门店NAME    private String paycode;//门店支付码

如果代码中有 下划线进行分割的化  实体类中需要用 大写字母 进行分割

如果没有分割的化  sql中的字段和实体类中的字段一致就可以了  大小没关系的


如果有数字的化 例如

列user_1_name_2的列能映射到user1Name2属性


源码:

 private String[] underscoreName(String camelCaseName) {        StringBuilder result = new StringBuilder();        if (camelCaseName != null && camelCaseName.length() > 0) {            result.append(camelCaseName.substring(0, 1).toLowerCase());            for (int i = 1; i < camelCaseName.length(); i++) {                char ch = camelCaseName.charAt(i);                if (Character.isUpperCase(ch)) {                    result.append("_");                    result.append(Character.toLowerCase(ch));                } else {                    result.append(ch);                }            }        }        String name = result.toString();        // 当name为user1_name2时,使name2为user_1_name_2        // 这使得列user_1_name_2的列能映射到user1Name2属性        String name2 = null;        boolean digitFound = false;        for (int i = name.length() - 1; i >= 0; i--) {            if (Character.isDigit(name.charAt(i))) {            // 遇到数字就做一个标识并continue,直到不是时才不continue                digitFound = true;                continue;            }            // 只有上一个字符是数字才做下划线            if (digitFound && i < name.length() - 1 && i > 0) {                if (name2 == null) {                    name2 = name;                }                name2 = name2.substring(0, i + 1) + "_" + name2.substring(i + 1);            }            digitFound = false;        }        return new String[] { name, name2 };    }

protected void initialize() {        this.mappedFields = new HashMap<String, PropertyDescriptor>();        PropertyDescriptor[] pds = BeanUtils.getPropertyDescriptors(mappedClass);        if (checkProperties) {            mappedProperties = new HashSet<String>();        }        for (int i = 0; i < pds.length; i++) {            PropertyDescriptor pd = pds[i];            // patch for thrift module            if (pd.getWriteMethod() == null) {                try {                    if (!pd.getName().toLowerCase().startsWith("set") && !pd.getName().toLowerCase().startsWith("class")) {                        String writeMethodName = "set" + pd.getName().substring(0, 1).toUpperCase() + pd.getName().substring(1);                        Method writeMethod = mappedClass.getMethod(writeMethodName, pd.getPropertyType());                        pd.setWriteMethod(writeMethod);                    }                } catch (Exception e) {                }            }            if (pd.getWriteMethod() != null) {                if (checkProperties) {                    this.mappedProperties.add(pd.getName());                }                this.mappedFields.put(pd.getName().toLowerCase(), pd);                for (String underscoredName : underscoreName(pd.getName())) {                    if (underscoredName != null                            && !pd.getName().toLowerCase().equals(underscoredName)) {                        this.mappedFields.put(underscoredName, pd);                    }                }            }        }    }

public Object mapRow(ResultSet rs, int rowNumber) throws SQLException {        // spring's : Object mappedObject = BeanUtils.instantiateClass(this.mappedClass);        // jade's : private Object instantiateClass(this.mappedClass);        // why: 经过简单的笔记本测试,mappedClass.newInstrance性能比BeanUtils.instantiateClass(mappedClass)快1个数量级        Object mappedObject = instantiateClass(this.mappedClass);        BeanWrapper bw = new BeanWrapperImpl(mappedObject);        ResultSetMetaData rsmd = rs.getMetaData();        int columnCount = rsmd.getColumnCount();        boolean warnEnabled = logger.isWarnEnabled();        boolean debugEnabled = logger.isDebugEnabled();        Set<String> populatedProperties = (checkProperties ? new HashSet<String>() : null);        for (int index = 1; index <= columnCount; index++) {            String column = JdbcUtils.lookupColumnName(rsmd, index).toLowerCase();            PropertyDescriptor pd = this.mappedFields.get(column);            if (pd != null) {                try {                    Object value = JdbcUtils.getResultSetValue(rs, index, pd.getPropertyType());                    if (debugEnabled && rowNumber == 0) {                        logger.debug("Mapping column '" + column + "' to property '" + pd.getName()                                + "' of type " + pd.getPropertyType());                    }                    bw.setPropertyValue(pd.getName(), value);                    if (populatedProperties != null) {                        populatedProperties.add(pd.getName());                    }                } catch (NotWritablePropertyException ex) {                    throw new DataRetrievalFailureException("Unable to map column " + column                            + " to property " + pd.getName(), ex);                }            } else {                if (checkColumns) {                    throw new InvalidDataAccessApiUsageException("Unable to map column '" + column                            + "' to any properties of bean " + this.mappedClass.getName());                }                if (warnEnabled && rowNumber == 0) {                    logger.warn("Unable to map column '" + column + "' to any properties of bean "                            + this.mappedClass.getName());                }            }        }        if (populatedProperties != null && !populatedProperties.equals(this.mappedProperties)) {            throw new InvalidDataAccessApiUsageException(                    "Given ResultSet does not contain all fields "                            + "necessary to populate object of class [" + this.mappedClass + "]: "                            + this.mappedProperties);        }        return mappedObject;    }


0 0
原创粉丝点击