src/org/nutz/dao/jdbc/Jdbcs.java
public static void guessEntityFieldColumnType(NutMappingField ef) {
        Mirror<?> mirror = ef.getTypeMirror();

        // 整型
        if (mirror.isInt()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(8);
        }
        // 字符串
        else if (mirror.isStringLike() || mirror.is(Email.class)) {
            ef.setColumnType(ColType.VARCHAR);
            ef.setWidth(Daos.DEFAULT_VARCHAR_WIDTH);
        }
        // 长整型
        else if (mirror.isLong()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(16);
        }
        // 枚举
        else if (mirror.isEnum()) {
            ef.setColumnType(ColType.VARCHAR);
            ef.setWidth(20);
        }
        // 时间戳
        else if (mirror.is(Timestamp.class)) {
            ef.setColumnType(ColType.TIMESTAMP);
        }
        // 布尔
        else if (mirror.isBoolean()) {
            ef.setColumnType(ColType.BOOLEAN);
            ef.setWidth(1);
        }
        // 字符
        else if (mirror.isChar()) {
            ef.setColumnType(ColType.CHAR);
            ef.setWidth(4);
        }
        // 日期
        else if (mirror.is(java.sql.Date.class)) {
            ef.setColumnType(ColType.DATE);
        }
        // 时间
        else if (mirror.is(java.sql.Time.class)) {
            ef.setColumnType(ColType.TIME);
        }
        // 日期时间
        else if (mirror.isOf(Calendar.class) || mirror.is(java.util.Date.class) || mirror.isLocalDateTimeLike()) {
            ef.setColumnType(ColType.DATETIME);
        }
        // 大数
        else if (mirror.is(BigDecimal.class)) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(32);
        }
        // 短整型
        else if (mirror.isShort()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(4);
        }
        // 字节
        else if (mirror.isByte()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(2);
        }
        // 浮点
        else if (mirror.isFloat()) {
            ef.setColumnType(ColType.FLOAT);
        }
        // 双精度浮点
        else if (mirror.isDouble()) {
            ef.setColumnType(ColType.FLOAT);
        }
        // 文本流
        else if (mirror.isOf(Reader.class) || mirror.isOf(Clob.class)) {
            ef.setColumnType(ColType.TEXT);
        }
        // 二进制流
        else if (mirror.isOf(InputStream.class)
                 || mirror.is(byte[].class)
                 || mirror.isOf(Blob.class)) {
            ef.setColumnType(ColType.BINARY);
        }
        /*
         * 上面的都不是？ 那就当作字符串好了，反正可以 toString
         */
        else {
            if (log.isDebugEnabled()&& ef.getEntity() != null && ef.getEntity().getType() != null)
                log.debugf("take field '%s(%s)'(%s) as VARCHAR(%d)",
                           ef.getName(),
                           Lang.getTypeClass(ef.getType()).getName(),
                           ef.getEntity().getType().getName(),
                           Daos.DEFAULT_VARCHAR_WIDTH);
            ef.setColumnType(ColType.VARCHAR);
            ef.setWidth(Daos.DEFAULT_VARCHAR_WIDTH);
        }
    }
public static void guessEntityFieldColumnType(NutMappingField ef) {
        Mirror<?> mirror = ef.getTypeMirror();

        // 整型
        if (mirror.isInt()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(8);
        }
        // 字符串
        else if (mirror.isStringLike() || mirror.is(Email.class)) {
            ef.setColumnType(ColType.VARCHAR);
            ef.setWidth(Daos.DEFAULT_VARCHAR_WIDTH);
        }
        // 长整型
        else if (mirror.isLong()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(16);
        }
        // 枚举
        else if (mirror.isEnum()) {
            ef.setColumnType(ColType.VARCHAR);
            ef.setWidth(20);
        }
        // 时间戳
        else if (mirror.is(Timestamp.class)) {
            ef.setColumnType(ColType.TIMESTAMP);
        }
        // 布尔
        else if (mirror.isBoolean()) {
            ef.setColumnType(ColType.BOOLEAN);
            ef.setWidth(1);
        }
        // 字符
        else if (mirror.isChar()) {
            ef.setColumnType(ColType.CHAR);
            ef.setWidth(4);
        }
        // 日期
        else if (mirror.is(java.sql.Date.class)) {
            ef.setColumnType(ColType.DATE);
        }
        // 时间
        else if (mirror.is(java.sql.Time.class)) {
            ef.setColumnType(ColType.TIME);
        }
        // 日期时间
        else if (mirror.isOf(Calendar.class) || mirror.is(java.util.Date.class) || mirror.isLocalDateTimeLike()) {
            ef.setColumnType(ColType.DATETIME);
        }
        // 大数
        else if (mirror.is(BigDecimal.class)) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(32);
        }
        // 短整型
        else if (mirror.isShort()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(4);
        }
        // 字节
        else if (mirror.isByte()) {
            ef.setColumnType(ColType.INT);
            ef.setWidth(2);
        }
        // 浮点
        else if (mirror.isFloat()) {
            ef.setColumnType(ColType.FLOAT);
        }
        // 双精度浮点
        else if (mirror.isDouble()) {
            ef.setColumnType(ColType.FLOAT);
        }
        // 文本流
        else if (mirror.isOf(Reader.class) || mirror.isOf(Clob.class)) {
            ef.setColumnType(ColType.TEXT);
        }
        // 二进制流
        else if (mirror.isOf(InputStream.class)
                 || mirror.is(byte[].class)
                 || mirror.isOf(Blob.class)) {
            ef.setColumnType(ColType.BINARY);
        }
        /*
         * 上面的都不是？ 那就当作字符串好了，反正可以 toString
         */
        else {
            if (log.isDebugEnabled()&& ef.getEntity() != null && ef.getEntity().getType() != null)
                log.debugf("take field '%s(%s)'(%s) as VARCHAR(%d)",
                           ef.getName(),
                           Lang.getTypeClass(ef.getType()).getName(),
                           ef.getEntity().getType().getName(),
                           Daos.DEFAULT_VARCHAR_WIDTH);
            ef.setColumnType(ColType.VARCHAR);
            ef.setWidth(Daos.DEFAULT_VARCHAR_WIDTH);
        }
    }
public static void guessEntityFieldColumnType ( NutMappingField ef ) { Mirror < ? > mirror = ef . getTypeMirror ( ) ; // 整型 if ( mirror . isInt ( ) ) { ef . setColumnType ( ColType . INT ) ; ef . setWidth ( 8 ) ; } // 字符串 else if ( mirror . isStringLike ( ) || mirror . is ( Email . class ) ) { ef . setColumnType ( ColType . VARCHAR ) ; ef . setWidth ( Daos . DEFAULT_VARCHAR_WIDTH ) ; } // 长整型 else if ( mirror . isLong ( ) ) { ef . setColumnType ( ColType . INT ) ; ef . setWidth ( 16 ) ; } // 枚举 else if ( mirror . isEnum ( ) ) { ef . setColumnType ( ColType . VARCHAR ) ; ef . setWidth ( 20 ) ; } // 时间戳 else if ( mirror . is ( Timestamp . class ) ) { ef . setColumnType ( ColType . TIMESTAMP ) ; } // 布尔 else if ( mirror . isBoolean ( ) ) { ef . setColumnType ( ColType . BOOLEAN ) ; ef . setWidth ( 1 ) ; } // 字符 else if ( mirror . isChar ( ) ) { ef . setColumnType ( ColType . CHAR ) ; ef . setWidth ( 4 ) ; } // 日期 else if ( mirror . is ( java . sql . Date . class ) ) { ef . setColumnType ( ColType . DATE ) ; } // 时间 else if ( mirror . is ( java . sql . Time . class ) ) { ef . setColumnType ( ColType . TIME ) ; } // 日期时间 else if ( mirror . isOf ( Calendar . class ) || mirror . is ( java . util . Date . class ) || mirror . isLocalDateTimeLike ( ) ) { ef . setColumnType ( ColType . DATETIME ) ; } // 大数 else if ( mirror . is ( BigDecimal . class ) ) { ef . setColumnType ( ColType . INT ) ; ef . setWidth ( 32 ) ; } // 短整型 else if ( mirror . isShort ( ) ) { ef . setColumnType ( ColType . INT ) ; ef . setWidth ( 4 ) ; } // 字节 else if ( mirror . isByte ( ) ) { ef . setColumnType ( ColType . INT ) ; ef . setWidth ( 2 ) ; } // 浮点 else if ( mirror . isFloat ( ) ) { ef . setColumnType ( ColType . FLOAT ) ; } // 双精度浮点 else if ( mirror . isDouble ( ) ) { ef . setColumnType ( ColType . FLOAT ) ; } // 文本流 else if ( mirror . isOf ( Reader . class ) || mirror . isOf ( Clob . class ) ) { ef . setColumnType ( ColType . TEXT ) ; } // 二进制流 else if ( mirror . isOf ( InputStream . class ) || mirror . is ( byte [ ] . class ) || mirror . isOf ( Blob . class ) ) { ef . setColumnType ( ColType . BINARY ) ; } /*
         * 上面的都不是？ 那就当作字符串好了，反正可以 toString
         */ else { if ( log . isDebugEnabled ( ) && ef . getEntity ( ) != null && ef . getEntity ( ) . getType ( ) != null ) log . debugf ( "take field '%s(%s)'(%s) as VARCHAR(%d)" , ef . getName ( ) , Lang . getTypeClass ( ef . getType ( ) ) . getName ( ) , ef . getEntity ( ) . getType ( ) . getName ( ) , Daos . DEFAULT_VARCHAR_WIDTH ) ; ef . setColumnType ( ColType . VARCHAR ) ; ef . setWidth ( Daos . DEFAULT_VARCHAR_WIDTH ) ; } }
根据字段现有的信息，尽可能猜测一下字段的数据库类型

@param ef
映射字段
根据字段现有的信息，尽可能猜测一下字段的数据库类型