protected OrmMetadata metadata(){ return ormContext.getMetadata(); }
/** * Manual init. */ public final void init(OrmContext context, EntityMapping em) { this.em = em; this.dao = context.getDao(); }
private DataSource ds() { Api api = Api.current(); if(null == api) { throw new IllegalStateException("The api not deployed, can't get underlying DataSource"); } return api.getOrmContext().getDataSource(); }
protected AbstractDmoCommand(Dmo dmo){ this.dmo = dmo; this.context = dmo.getOrmContext(); this.db = context.getDb(); this.metadata = context.getMetadata(); this.metadataManager = context.getMetadataManager(); }
protected AbstractDaoCommand(Dao dao){ this.dao = dao; this.context = dao.getOrmContext(); this.metadata = context.getMetadata(); this.db = context.getDb(); }
protected AbstractQuery(Dao dao, Class<T> targetType, EntityMapping entityMapping) { this.dao = dao; this.context = dao.getOrmContext(); this.metadata = context.getMetadata(); this.targetType = targetType; this.em = entityMapping; this.eventHandler = dao.getOrmContext().getEntityEventHandler(); }
@Override public void postInitialize(OrmContext context) throws Exception { Dao dao = context.getDao(); Dmo dmo = context.getDmo(); for (EntityMapping em : context.getMetadata().getEntityMappingSnapshotList()) { Class<? extends Model> cls = em.getModelClass(); if (null != cls) { ModelContext modelContext = ModelRegistry.tryGetModelContext(cls.getName()); if (null == modelContext || (modelContext != null && modelContext.getEntityMapping().isRemote())) { registerModel(context, em, dao, dmo); } } } }
/** * 对远程实体进行检查,屏蔽Rest实体的dao操作,对远程db实体,动态切换dao */ private <T> T runInWrapperContext(EntityMapping originalEm,Function<WrapperContext,T> func){ WrapperContext context=new WrapperContext(this,originalEm); if(!originalEm.isRemote()){ return func.apply(context); } if(RemoteType.rest.equals(originalEm.getRemoteSettings().getRemoteType())){ throw new RuntimeException("remote rest entity not supported."); } String remoteDs=originalEm.getRemoteSettings().getDataSource(); OrmContext targetOrmContext= Orm.context(remoteDs); if(targetOrmContext==null){ throw new RuntimeException("remote orm context can't be found."); } EntityMapping targetEm=targetOrmContext.getMetadata().tryGetEntityMapping(originalEm.getEntityName()); if(targetEm==null){ throw new RuntimeException("remote entity mapping can't be found."); } context.setDao(targetOrmContext.getDao()); context.setEntityMapping(targetEm); return func.apply(context); }
protected void doLoad(OrmContext context, Consumer<LoadingContext> preMapping) throws MetadataException { log.debug("Loading metadata for orm context '{}'...", context.getName()); log.debug("Load {} entities used {}ms",context.getMetadata().getEntityMappingSize(),sw.getElapsedMilliseconds()); DbSchemaBuilder schema = new DbSchemaBuilder(context.getName()); for(EntityMapping em : context.getMetadata().getEntityMappingSnapshotList()){ if(em.isRemote()){ continue; context.getDb().cmdCreateSchema(schema.build()).execute(); for(SqlCommand command : context.getMetadata().getSqlCommandSnapshotList()) { command.prepare(context);
public DefaultJdbcExecutor(OrmContext ormContext) { this.context = ormContext; this.db = ormContext.getDb(); }
@Override public String getName() { return ormContext.getName(); }
protected void toSql_(Appendable out, String dynamicLastName, Params params, OrmContext context) throws IOException{ if(null != firstName){ out.append(firstName).append('.'); } if(null != secondaryName){ out.append(secondaryName).append('.'); } if(null != dynamicLastName) { dynamicLastName = EL.createCompositeExpression(dynamicLastName).getValue(params.map()).toString(); out.append(dynamicLastName); Db db = context.getDb(); if(!db.checkTableExists(dynamicLastName)) { Dmo dmo = Dmo.get(context.getName()); dmo.cmdCreateTable(em).changeTableName(dynamicLastName).execute(); } }else if(null != em){ out.append(em.getTableName()); }else{ out.append(lastName); } }
protected void readMap(OrmContext context,ResultSet rs,ResultSetMapping rsm,Map<String,Object> map) throws SQLException { DbDialect dialect = context.getDb().getDialect(); final boolean convertForMap = context.getConfig().isConvertPropertyForReadMap(); for(int i=0;i<rsm.getColumnCount();i++){ ResultColumnMapping cm = rsm.getColumnMapping(i); FieldMapping fm = cm.getFieldMapping(); Object value = convertForMap ? readColumnValue(dialect, rs, cm, fm, i+1) : readColumnValueForMap(dialect, rs, cm, fm, i+1); map.put(cm.getResultName(), value); } }
public DefaultCreateEntityCommand(Dmo dmo,Class<?> entityClass){ super(dmo); this.entityClass = entityClass; if(null != metadata.tryGetEntityMapping(entityClass)){ throw new MappingExistsException("The entity mapping for class '" + entityClass.getName() + "' already exists"); } emb = dmo.getOrmContext().getMappingStrategy().createEntityMappingByClass(context,entityClass); if(null != metadata.tryGetEntityMapping(emb.getEntityName())){ throw new MappingExistsException("Entity named '" + emb.getEntityName() + "' already exists, check the class '" + entityClass.getName() + "'"); } SingleMappingConfigContext mcc = new SingleMappingConfigContext(dmo.getOrmContext(), entityClass, emb); dmo.getOrmContext().getMetadataManager().processMappings(mcc); }
@Override public Dao dao() { OrmContext tlOrmContext = ModelRegistry.getThreadLocalContext(); if(null != tlOrmContext){ return tlOrmContext.getAppContext().getBeanFactory().getBean(Dao.class,tlOrmContext.getName()); } return dao_; }
@Override public OrmConfig getConfig() { return ormContext.getConfig(); }
public Dmo getDmo() { OrmContext tlOrmContext = getThreadLocalContext(); if (null != tlOrmContext) { return tlOrmContext.getDmo(); } return dmo; } }
@Override public OrmMetadataManager getMetadataManager() { return ormContext.getMetadataManager(); }
@Override public MappingStrategy getMappingStrategy() { return ormContext.getMappingStrategy(); }
protected void createMetadata(OrmContext oc, MetaApi api) { mappingDatabase(oc.getDb(), api); MappingSchema ms = ormConverter.toMappingSchema(oc, api); for(EntityMapping em : ms.getEntityMappings()) { oc.getMetadataManager().createEntity(oc, em); } //load sqls oc.getMetadataManager().loadSqls(oc); //convert sqls Map<String, SqlCommand> commands = ormConverter.toSqlCommands(oc, api); commands.forEach((k,c) -> { SqlCommand old = oc.getMetadata().tryGetSqlCommand(k); if(null != old) { log.info("The sql command '{}' from '{}' will be replaced by '{}'", k, old.getSource(), c.getSource()); oc.getMetadata().removeSqlCommand(k); } oc.getMetadata().addSqlCommand(k, c); }); }