Search in sources :

Example 41 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class DerbyJdbcExpert method createEntity.

public boolean createEntity(Dao dao, Entity<?> en) {
    StringBuilder sb = new StringBuilder("CREATE TABLE " + en.getTableName() + "(");
    // 创建字段
    for (MappingField mf : en.getMappingFields()) {
        if (mf.isReadonly())
            continue;
        sb.append('\n').append(mf.getColumnNameInSql());
        sb.append(' ').append(evalFieldType(mf));
        // 非主键的 @Name,应该加入唯一性约束
        if (mf.isName() && en.getPkType() != PkType.NAME) {
            sb.append(" UNIQUE NOT NULL");
        } else // 普通字段
        {
            // 下面的关于Timestamp处理,是因为MySql中第一出现Timestamp的话,如果没有设定default,数据库默认会设置为CURRENT_TIMESTAMP
            if (mf.isUnsigned())
                sb.append(" UNSIGNED");
            if (mf.isNotNull()) {
                sb.append(" NOT NULL");
            }
            if (mf.isAutoIncreasement())
                sb.append(" generated by default as identity");
            if (mf.getColumnType() == ColType.TIMESTAMP) {
                if (mf.hasDefaultValue()) {
                    sb.append(" ").append(getDefaultValue(mf));
                } else {
                    if (mf.isNotNull()) {
                        sb.append(" DEFAULT 0");
                    } else {
                        sb.append(" DEFAULT NULL");
                    }
                }
            } else {
                if (mf.hasDefaultValue())
                    addDefaultValue(sb, mf);
            }
        }
        if (mf.hasColumnComment()) {
            sb.append(" COMMENT '").append(mf.getColumnComment()).append("'");
        }
        sb.append(',');
    }
    // 创建主键
    List<MappingField> pks = en.getPks();
    if (!pks.isEmpty()) {
        sb.append('\n');
        sb.append("PRIMARY KEY (");
        for (MappingField pk : pks) {
            sb.append(pk.getColumnNameInSql()).append(',');
        }
        sb.setCharAt(sb.length() - 1, ')');
        sb.append("\n ");
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    // 表名注释
    if (en.hasTableComment()) {
        sb.append(" COMMENT='").append(en.getTableComment()).append("'");
    }
    // 执行创建语句
    dao.execute(Sqls.create(sb.toString()));
    // 创建索引
    dao.execute(createIndexs(en).toArray(new Sql[0]));
    // 创建关联表
    createRelation(dao, en);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 42 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class GBaseJdbcExpert method createEntity.

public boolean createEntity(Dao dao, Entity<?> en) {
    StringBuilder sb = new StringBuilder("CREATE TABLE " + en.getTableName() + "(");
    // 创建字段
    for (MappingField mf : en.getMappingFields()) {
        if (mf.isReadonly())
            continue;
        sb.append('\n').append(mf.getColumnNameInSql());
        sb.append(' ').append(evalFieldType(mf));
        // 非主键的 @Name,应该加入唯一性约束
        if (mf.isName() && en.getPkType() != PkType.NAME) {
            sb.append(" UNIQUE NOT NULL");
        } else // 普通字段
        {
            // 下面的关于Timestamp处理,是因为MySql中第一出现Timestamp的话,如果没有设定default,数据库默认会设置为CURRENT_TIMESTAMP
            if (mf.isUnsigned())
                sb.append(" UNSIGNED");
            if (mf.isNotNull()) {
                sb.append(" NOT NULL");
            } else if (mf.getColumnType() == ColType.TIMESTAMP) {
                sb.append(" NULL");
            }
            if (mf.isAutoIncreasement())
                sb.append(" AUTO_INCREMENT");
            if (mf.getColumnType() == ColType.TIMESTAMP) {
                if (mf.hasDefaultValue()) {
                    sb.append(" ").append(getDefaultValue(mf));
                } else {
                    if (mf.isNotNull()) {
                        sb.append(" DEFAULT 0");
                    } else {
                        sb.append(" DEFAULT NULL");
                    }
                }
            } else {
                if (mf.hasDefaultValue())
                    addDefaultValue(sb, mf);
            }
        }
        if (mf.hasColumnComment()) {
            sb.append(" COMMENT '").append(mf.getColumnComment()).append("'");
        }
        sb.append(',');
    }
    // 创建主键
    List<MappingField> pks = en.getPks();
    if (!pks.isEmpty()) {
        sb.append('\n');
        sb.append("PRIMARY KEY (");
        for (MappingField pk : pks) {
            sb.append(pk.getColumnNameInSql()).append(',');
        }
        sb.setCharAt(sb.length() - 1, ')');
        sb.append("\n ");
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    // 设置特殊引擎
    if (en.hasMeta(META_ENGINE)) {
        sb.append(" ENGINE=" + en.getMeta(META_ENGINE));
    }
    // 默认采用 UTF-8 编码
    if (en.hasMeta(META_CHARSET)) {
        sb.append(" CHARSET=" + en.getMeta(META_CHARSET));
    } else {
        sb.append(" CHARSET=utf8");
    }
    // 表名注释
    if (en.hasTableComment()) {
        sb.append(" COMMENT='").append(en.getTableComment()).append("'");
    }
    // 执行创建语句
    dao.execute(Sqls.create(sb.toString()));
    // 创建索引
    dao.execute(createIndexs(en).toArray(new Sql[0]));
    // 创建关联表
    createRelation(dao, en);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 43 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class HsqldbJdbcExpert method createEntity.

public boolean createEntity(Dao dao, Entity<?> en) {
    StringBuilder sb = new StringBuilder("CREATE TABLE " + en.getTableName() + "(");
    // 创建字段
    for (MappingField mf : en.getMappingFields()) {
        if (mf.isReadonly())
            continue;
        sb.append('\n').append(mf.getColumnNameInSql());
        sb.append(' ').append(evalFieldType(mf));
        // 非主键的 @Name,应该加入唯一性约束
        if (mf.isName() && en.getPkType() != PkType.NAME) {
            sb.append(" UNIQUE NOT NULL");
        } else // 普通字段
        {
            if (mf.isUnsigned())
                sb.append(" UNSIGNED");
            if (// 自增与非空,不允许同时使用!
            mf.isAutoIncreasement())
                sb.append(" GENERATED BY DEFAULT AS IDENTITY(START WITH 1)");
            else if (mf.isNotNull())
                sb.append(" NOT NULL");
            if (mf.hasDefaultValue())
                addDefaultValue(sb, mf);
        }
        sb.append(',');
    }
    // 创建主键
    List<MappingField> pks = en.getPks();
    if (!pks.isEmpty()) {
        sb.append('\n');
        sb.append("PRIMARY KEY (");
        for (MappingField pk : pks) {
            sb.append(pk.getColumnNameInSql()).append(',');
        }
        sb.setCharAt(sb.length() - 1, ')');
        sb.append("\n ");
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    // 执行创建语句
    dao.execute(Sqls.create(sb.toString()));
    // 创建索引
    dao.execute(createIndexs(en).toArray(new Sql[0]));
    // 创建关联表
    createRelation(dao, en);
    // 添加注释(表注释与字段注释)
    addComment(dao, en);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 44 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class MysqlJdbcExpert method createEntity.

public boolean createEntity(Dao dao, Entity<?> en) {
    StringBuilder sb = new StringBuilder("CREATE TABLE " + en.getTableName() + "(");
    // 创建字段
    for (MappingField mf : en.getMappingFields()) {
        if (mf.isReadonly())
            continue;
        sb.append('\n').append(mf.getColumnNameInSql());
        sb.append(' ').append(evalFieldType(mf));
        // 非主键的 @Name,应该加入唯一性约束
        if (mf.isName() && en.getPkType() != PkType.NAME) {
            sb.append(" UNIQUE NOT NULL");
        } else // 普通字段
        {
            // 下面的关于Timestamp处理,是因为MySql中第一出现Timestamp的话,如果没有设定default,数据库默认会设置为CURRENT_TIMESTAMP
            if (mf.isUnsigned())
                sb.append(" UNSIGNED");
            if (mf.isNotNull()) {
                sb.append(" NOT NULL");
            } else if (mf.getColumnType() == ColType.TIMESTAMP) {
                sb.append(" NULL");
            }
            if (mf.isAutoIncreasement())
                sb.append(" AUTO_INCREMENT");
            if (mf.getColumnType() == ColType.TIMESTAMP) {
                if (mf.hasDefaultValue()) {
                    sb.append(" ").append(getDefaultValue(mf));
                } else {
                    if (mf.isNotNull()) {
                        sb.append(" DEFAULT 0");
                    } else {
                        sb.append(" DEFAULT NULL");
                    }
                }
            } else {
                if (mf.hasDefaultValue())
                    addDefaultValue(sb, mf);
            }
        }
        if (mf.hasColumnComment()) {
            sb.append(" COMMENT '").append(mf.getColumnComment()).append("'");
        }
        sb.append(',');
    }
    // 创建主键
    List<MappingField> pks = en.getPks();
    if (!pks.isEmpty()) {
        sb.append('\n');
        sb.append("PRIMARY KEY (");
        for (MappingField pk : pks) {
            sb.append(pk.getColumnNameInSql()).append(',');
        }
        sb.setCharAt(sb.length() - 1, ')');
        sb.append("\n ");
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    // 设置特殊引擎
    if (en.hasMeta(META_ENGINE)) {
        sb.append(" ENGINE=" + en.getMeta(META_ENGINE));
    }
    // 默认采用 UTF-8 编码
    if (en.hasMeta(META_CHARSET)) {
        sb.append(" CHARSET=" + en.getMeta(META_CHARSET));
    } else {
        sb.append(" CHARSET=utf8");
    }
    // 表名注释
    if (en.hasTableComment()) {
        sb.append(" COMMENT='").append(en.getTableComment()).append("'");
    }
    // 执行创建语句
    dao.execute(Sqls.create(sb.toString()));
    // 创建索引
    dao.execute(createIndexs(en).toArray(new Sql[0]));
    // 创建关联表
    createRelation(dao, en);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 45 with Sql

use of org.nutz.dao.sql.Sql in project nutz by nutzam.

the class MysqlJdbcExpert method createRelation.

protected Sql createRelation(Dao dao, LinkField lf) {
    Sql sql = super.createRelation(dao, lf);
    if (sql == null)
        return null;
    Entity<?> en = lf.getEntity();
    StringBuilder sb = new StringBuilder(sql.getSourceSql());
    // 设置特殊引擎
    if (en.hasMeta(META_ENGINE)) {
        sb.append(" ENGINE=" + en.getMeta(META_ENGINE));
    }
    // 默认采用 UTF-8 编码
    if (en.hasMeta(META_CHARSET)) {
        sb.append(" CHARSET=" + en.getMeta(META_CHARSET));
    } else {
        sb.append(" CHARSET=utf8");
    }
    return Sqls.create(sb.toString());
}
Also used : Sql(org.nutz.dao.sql.Sql)

Aggregations

Sql (org.nutz.dao.sql.Sql)69 Test (org.junit.Test)33 MappingField (org.nutz.dao.entity.MappingField)14 ArrayList (java.util.ArrayList)12 NutSql (org.nutz.dao.impl.sql.NutSql)9 Pet (org.nutz.dao.test.meta.Pet)9 ResultSet (java.sql.ResultSet)8 SQLException (java.sql.SQLException)8 FileSqlManager (org.nutz.dao.impl.FileSqlManager)8 Connection (java.sql.Connection)7 SqlManager (org.nutz.dao.SqlManager)7 SqlCallback (org.nutz.dao.sql.SqlCallback)5 Record (org.nutz.dao.entity.Record)4 PojoSql (org.nutz.dao.test.meta.issue1074.PojoSql)4 Dao (org.nutz.dao.Dao)3 DaoException (org.nutz.dao.DaoException)3 PreparedStatement (java.sql.PreparedStatement)2 HashMap (java.util.HashMap)2 List (java.util.List)2 LinkField (org.nutz.dao.entity.LinkField)2