Search in sources :

Example 16 with MappingField

use of org.nutz.dao.entity.MappingField in project nutz by nutzam.

the class Sqlserver2005JdbcExpert 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.isNotNull())
                sb.append(" NOT NULL");
            if (mf.isAutoIncreasement())
                sb.append(" IDENTITY");
            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, COMMENT_COLUMN);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 17 with MappingField

use of org.nutz.dao.entity.MappingField in project nutz by nutzam.

the class InsertFieldsPItem method joinSql.

public void joinSql(Entity<?> en, StringBuilder sb) {
    List<MappingField> mfs = Pojos.getFieldsForInsert(_en(en), getFieldMatcher());
    sb.append('(');
    for (MappingField mf : mfs) sb.append(mf.getColumnNameInSql()).append(',');
    sb.setCharAt(sb.length() - 1, ')');
    sb.append(' ');
}
Also used : MappingField(org.nutz.dao.entity.MappingField)

Example 18 with MappingField

use of org.nutz.dao.entity.MappingField in project nutz by nutzam.

the class InsertValuesPItem method joinParams.

public int joinParams(Entity<?> en, Object obj, Object[] params, int off) {
    List<MappingField> mfs = _mfs(en);
    for (MappingField mf : mfs) {
        Object v = mf.getValue(obj);
        params[off++] = null == v ? mf.getDefaultValue(obj) : v;
    }
    return off;
}
Also used : MappingField(org.nutz.dao.entity.MappingField)

Example 19 with MappingField

use of org.nutz.dao.entity.MappingField in project nutz by nutzam.

the class Db2JdbcExpert method createEntity.

// TODO not tested!!
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.isNotNull() || mf.isPk())
                sb.append(" NOT NULL");
            if (mf.hasDefaultValue()) {
                addDefaultValue(sb, mf);
            }
            if (mf.isAutoIncreasement())
                sb.append(" generated by default as identity ");
            if (mf.isPk() && en.getPks().size() == 1) {
                sb.append(" primary key ");
            }
        }
        sb.append(',');
    }
    // 结束表字段设置
    sb.setCharAt(sb.length() - 1, ')');
    // 执行创建语句
    dao.execute(Sqls.create(sb.toString()));
    // 创建联合主键
    if (en.getPks().size() > 1) {
        sb = new StringBuilder();
        sb.append("ALTER TABLE ").append(en.getTableName()).append(" ADD CONSTRAINT PK_");
        sb.append(makePksName(en));
        sb.append(" PRIMARY KEY (");
        for (MappingField mf : en.getPks()) {
            sb.append(mf.getColumnNameInSql()).append(",");
        }
        sb.setCharAt(sb.length() - 1, ')');
        dao.execute(Sqls.create(sb.toString()));
    }
    // 创建关联表
    createRelation(dao, en);
    // 创建索引
    dao.execute(createIndexs(en).toArray(new Sql[0]));
    // 添加注释(表注释与字段注释)
    addComment(dao, en);
    return true;
}
Also used : MappingField(org.nutz.dao.entity.MappingField) Sql(org.nutz.dao.sql.Sql)

Example 20 with MappingField

use of org.nutz.dao.entity.MappingField in project nutz by nutzam.

the class UpdateFieldsByChainPItem method joinAdaptor.

public int joinAdaptor(Entity<?> en, ValueAdaptor[] adaptors, int off) {
    Chain c = chain.head();
    while (c != null) {
        MappingField mf = en.getField(c.name());
        // TODO 移除这种数组下标用++的写法!!!
        if (c.adaptor() == null)
            adaptors[off++] = (null == mf ? Jdbcs.getAdaptorBy(c.value()) : mf.getAdaptor());
        else
            adaptors[off++] = c.adaptor();
        c = c.next();
    }
    return off;
}
Also used : Chain(org.nutz.dao.Chain) MappingField(org.nutz.dao.entity.MappingField)

Aggregations

MappingField (org.nutz.dao.entity.MappingField)33 Sql (org.nutz.dao.sql.Sql)14 ArrayList (java.util.ArrayList)12 SQLException (java.sql.SQLException)5 PreparedStatement (java.sql.PreparedStatement)4 DaoException (org.nutz.dao.DaoException)4 Connection (java.sql.Connection)3 Chain (org.nutz.dao.Chain)3 ConnCallback (org.nutz.dao.ConnCallback)3 JdbcExpert (org.nutz.dao.jdbc.JdbcExpert)3 ResultSet (java.sql.ResultSet)2 ResultSetMetaData (java.sql.ResultSetMetaData)2 Statement (java.sql.Statement)2 HashSet (java.util.HashSet)2 Test (org.junit.Test)2 ValueAdaptor (org.nutz.dao.jdbc.ValueAdaptor)2 Date (java.util.Date)1 Set (java.util.Set)1 FieldFilter (org.nutz.dao.FieldFilter)1 FieldMatcher (org.nutz.dao.FieldMatcher)1