`
zzc1684
  • 浏览: 1235471 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

操作EntityManager

阅读更多

操作EntityManager

Interacting with an EntityManager

现 在你已经学会如何部署和获取指向EntityManager的引用了,接下来你将学习如何正确地操作EntityManager。 EntityManager API包含了插入和删除实体的数据库操作方法,将游离的实体实例合并更新到数据库的方法。它还包含了一组丰富的查询API,你可以藉此来创建查询对象。

package javax.persistence;

public interface EntityManager {

   public void persist(Object entity);

   public <T> T find(Class <T> entityClass, Object primaryKey);

   public <T> T getReference(Class <T> entityClass, Object primaryKey);

   public <T> T merge(T entity);

   public void remove(Object entity);

   public void lock(Object entity, LockModeType lockMode);

   public void refresh(Object entity);

   public boolean contains(Object entity);

   public void clear();

   public void joinTransaction();

   public void flush();

   public FlushModeType getFlushMode();

   public void setFlushMode(FlushModeType type);

   public Query createQuery(String queryString);

   public Query createNamedQuery(String name);

   public Query createNativeQuery(String sqlString);

   public Query createNativeQuery(String sqlString, String resultSetMapping);

   public Query createNativeQuery(String sqlString, Class resultClass);

   public Object getDelegate();

   public void close();

   public boolean isOpen();

}

 

持久化实体

Persisting Entities

对 实体进行持久化就是将其插入到数据库中。你所持久化的是还未曾保存到数据库中的实体。要持久化一个实体,首先是为实体的实例分配内存,然后设置成员属性, 并设置好与其他对象可能存在的任何关联关系。换言之,你可以像操作普通Java对象那样初始化一个entity bean。一旦完成这一步,你就可以调用EntityManager.persist()方法来保存该实体了。

Custom cust = new Customer();

cust.setName("Bill");

entityManager.persist(cust);

当 调用persist()方法后,EntityManager会将Customer添加到等待数据库插入的队列中,对象实例即处于托管状态。实际的插入操作 何时发生则取决于多种因素。如果在事务范围内调用了persist()方法,插入操作可能马上执行,也可能在事务提交时执行,这依赖于flush模式(本 章的后续部分会讲到)的取值。任何时候,你都可以通过调用flush()方法在一个事务内强制手工插入。当且仅当entity manager是extended persistence context时,你才可以在事务范围外调用persist()方法。此时,插入操作会被保存到队列中,直到persistence context与某个事务关联之后才被执行。一个由EJB容器注入的extended persistence context会自动与JTA事务关联。而对于通过EntityManagerFactory API手动创建的extended context,你必须调用Entity.Manager.joinTransaction()方法才能使之与事务关联。

如 果实体与其他实体存在任何关联关系,且正确设置了级联策略(cascade policies),关联实体同样可以被保存到数据库中。我们将在第7章讨论级联。在第6章里,我们还将看到当persist()方法被调用时,Java Persistence能够自动生成主键。因此在上例中,如果你启用了自动主键生成功能,在persist()方法执行完毕后,你将会看到生成的主键。

如 果传入 persist()方法的参数不是实体类型的,persist()方法将抛出Illegal- ArgumentException异常。在transaction-scoped persistence context里,事务范围外的persist()调用会引起TransactionRequiredException异常。而在extended persistence context中,事务范围外的persist()调用则是合法的;不过在persistence context与事务关联之前,数据库插入操作是不会被执行的。

查找实体

Finding Entities

EntityManager提供了两种在数据库中查找对象的机制:一种是使用entity manager提供的简单方法根据主键在数据库中查找实体,另一种则是创建查询对象并执行查询。

find()和getReference()方法

EntityManager提供了两个不同的方法允许你通过主键来查找实体。

public interface EntityManager {

   <T> T find(Class<T> entityClass, Object primaryKey);

   <T> T getReference(Class<T> entityClass, Object primaryKey);

}

 

这两个方法都接受实体的 class和代表实体主键的对象作为参数。由于它们使用了Java泛型方法,无需任何显示的类型转换即可获得特定类型的实体对象。那么,我们该如何区别使 用这两个方法呢?在无法从数据库中找到指定实体时,find()方法会返回null。它还会根据延迟加载策略(lazy-loading,详见第6章相关 讨论)初始化entity bean的内部状态。

Customer cust = entityManager.find(Customer.class, 2);

在 本例中,我们查找一个主键 ID值为2的Customer对象。find()方法期望第二个参数的类型为Object,而非上述的基本数据类型,那么它是怎么通过编译的呢?此处,我 们用到了Java 5的一个新特性,称作自动装箱(autoboxing),它将基本数据类型直接转换为相应的对象类型。因此,常量2实际上是被转换成了 java.lang.Integer类型。

Customer cust = null;

try {

   cust = entityManager.getReference(Customer.class, 2);

} catch (EntityNotFoundException notFound) {

   // 恢复逻辑

}

 

getReference() 方法与find()方法的不同之处在于:如果在数据库中找不到相应的实体,
getReference()方法将抛出 javax.persistence.EntityNotFoundException异常;
并且该方法并不保证返回实例的内部状态会被初始化。

如果传入的参数不是实体类型,find()方法和getReference()方法都会抛出
Illegal- ArgumentException异常。你可以在事务范围之外调用这两个方法,
其行为依据persistence context的不同而有所不同:
若EntityManager是transactionscoped persistence context,则会返回游离对象;
而若是extended persistence context,则返回托管对象。

查询

持久对象也可以通过EJB QL来查询。与EJB 2.1不同的是,此处不再有任何finder方法了,
你必须通过调用EntityManager的createQuery()、createNamedQuery()或createNativeQuery()方法
来创建Query对象进行查询。

 

public interface EntityManager {

   Query createQuery(String queryString);

   Query createNamedQuery(String name);

   Query createNativeQuery(String sqlString);

   Query createNativeQuery(String sqlString, Class resultClass);

   Query createNativeQuery(String sqlString, String resultSetMapping);

}

创建并执行EJB QL查询与创建并执行JBDC PreparedStatement非常相似。

Query query = entityManager.createQuery("from Customer c where id=2");

Customer cust = (Customer)query.getSingleResult();

 

我们将在第9章详细介绍查询和EJB QL。

所有由find(),getResource()或查询对象所返回的实体实例都将保持托管状态,直至其所在的persistence context被关闭为止。亦即,期间再次调用find()或者任何其他的方法,都将返回同样的实体对象实例。

更新实体

Updating Entities

一 旦你调用了find(),getReference(),或创建并执行了一次查询,所得的entity bean实例在persistence context关闭前仍将处于托管状态。在此期间,你可以像其他对象那样随便更改entity bean实例的状态,任何更改都将被自动(取决于flush模式)或手工(通过调用flush()方法)地同步到数据库中。

@PersistenceContext EntityManager entityManager;

@TransactionAttribute(REQUIRED)

public void updateBedCount(int id, int newCount) {

   Cabin cabin = entityManager.find(Cabin.class, id);

   cabin.setBedCount(newCount);

}

 

在这段代码中,persistence context一直与某个事务关联,因此find()方法返回的Cabin实例是受EntityManager托管的。亦即,你可以更改对象实例,一旦 EntityManager决定将更改从内存同步到数据库时,数据库便会被自动更新。

合并实体

Merging Entities

在Java Persistence中,你可以使用EntityManager的merge()方法,将游离实体的状态变更合并到数据库中。假设有一个远程Swing 客户端,它调用了TravelAgent session bean的远程方法,用以查找数据库中的cabin实体。

@PersistenceContext EntityManager entityManager;

@TransactionAttribute(REQUIRED)

public Cabin findCabin(int id) {

   return entityManager.find(Cabin.class, id);

}

 在本例中,由于findCabin()方法处于一个独立的JTA事务中,persistence context将在方法结束时被EJB容器关闭。当Cabin实例被序列化时,它会脱离entity manager的管理并被送到远程的Swing客户端。此时,该Cabin实例是一个普通的Java对象,并且不再关联于任何entity manager。你可以像对待普通Java对象那样,调用该对象的getters和setters。Swing客户端更改了这一Cabin实例的状态,然 后将其重新送回服务器。

Cabin cabin = travelAgent.findCabin(1);

cabin.setBedCount(4);

travelAgent.updateCabin(cabin);

TravelAgentBean.updateCabin()方法接受cabin实例作为参数,
并通过merge()方法将它合并到当前EntityManager管理的persistence context中。

@PersistenceContext EntityManager entityManager;

@TransactionAttribute(REQUIRED)

public void updateCabin(Cabin cabin) {

   Cabin copy = entityManager.merge(cabin);

}

 

由远程Swing客户端所作的修改将在EntityManager决定与数据库进行同步时被写回到数据库中。updateCabin()方法在合并cabin时遵循下列规则。

若 EntityManager未曾管理过与传入的cabin参数有着相同ID的Cabin实例,则 merge()方法会创建该参数的一份完整拷贝并将其作为方法的返回值。该份拷贝受entity manager管理,并且任何针对该份拷贝的setter方法调用所引起的状态更改,在EntityManager决定执行flush操作时,都会被同步 到数据库中。而传入的cabin参数仍将保持游离状态,不受托管。

若与传入的cabin参数有着相同主键的Cabin实例早已处于EntityManager的管理之中,则cabin参数的内容将被复制到托管的对象实例中。merge()方法将返回该托管

实例。而传入的cabin参数将仍然保持游离状态,不受托管。

同 样,如果传入merge()方法的参数不是实体类型,merge()方法将会抛出Illegal- ArgumentException异常;如果该方法在transaction-scoped persistence context范围外调用,则会引起TransactionRequiredException异常;而在extended persistence context中,事务范围外的merge()调用是允许的。但是,在persistence context重新与事务关联之前,更新操作都不会被同步到数据库中。

删除实体

Removing Entities

调 用EntityManager.remove()可以将实体从数据库中删除。不过,remove()方法并不立即生效,而是在EntityManager 决定执行flush操作时,根据定义好的flush规则(将在本章的后续部分讨论),才会执行SQL DELETE操作。

@PersistenceContext EntityManager entityManager;

@TransactionAttribute(REQUIRED)

public void removeCabin(int id) {

   Cabin cabin = entityManager.find(Cabin.class, id);

   entityManager.remove(cabin);

}

 

调用remove()方法之 后,cabin实例将不再受entity manager托管而成为游离对象如果其他实体对象与该对象存在关联关系,则这些对象也将依据级联规则(将在第7章中讨论)被相应删除。只有通过调用 persist()方法重建实体实例,remove()操作才可以被撤销(undone)。

传 入remove()方法的参数若不是实体类型,remove()方法将抛出IllegalArgument- Exception异常;如果该方法在transaction-scoped persistence context范围外调用,则会引起TransactionRequiredException异常;而在extended persistence context中,事务范围外的remove()调用是允许的。但是,在persistence context重新与事务关联之前,数据是不会从数据库中删除的。

refresh()

refresh()

如果发现当前受托管的实体并非数据库中的最新数据,你可以调用EntityManager. refresh()方法。refresh()方法会根据数据库的情况刷新内存中实体的状态,同时覆盖对实体所做的任何修改。

@PersistenceContext EntityManager entityManager;

@TransactionAttribute(REQUIRED)

public void refreshCabin(int id) {

   Cabin cabin = entityManager.find(Cabin.class, id);

   entityManager.refresh(cabin);

}

 

如果entity bean有关联实体,那么根据在实体映射元数据中设置的级联策略,那些关联实体也会被相应刷新。

传 入refresh()方法的参数若不是实体类型,refresh()方法将抛出IllegalArgument- Exception异常;在transaction-scoped persistence context范围外的refresh()调用则会引起TransactionRequiredException异常;而在extended persistence context中,事务范围外的remove()调用是允许的。如果需要刷新的实体对象在数据库中不存在(例如被其他线程或进程删除了),则会抛出 EntityNotFoundException异常。

contains()方法与clear()方法

contains() and clear()

contains()方法接受实体实例作为参数,如果该对象实例目前正受persistence context管理,则返回true。若该参数并非实体类型,则会抛出IllegalArgumentException异常。

你 可以使用EntityManager.clear()方法将persistence context中所有的托管实体都变成游离对象。需要注意的是,一旦你调用了clear()方法,对实体所做的任何修改都将被丢弃。因此,使用 clear()时需要格外小心。在调用clear()之前,先调用flush()方法以免丢失更改实为明智之举。

flush()方法和FlushModeType

flush() and FlushModeType

正 如上文所述,调用persist(),merge(),remove()方法之后,这些更改操作只有在 EntityManager决定执行flush操作时才会被同步到数据库中。你也可以在任何时候通过调用flush()方法做强行同步。缺省情况 下,flush操作会在相关查询执行之前和事务提交之时自动执行(一些低效的Java Persistence实现甚至可能会在任何查询执行之前都做flush操作)。但需注意的是,与一般查询不同,调用find()和 getReference()方法并不会引起flush。这是因为通过主键来查询实体是不会受任何更新操作的影响的。

可以通过枚举类型javax.persistence.FlushModeType来控制和修改这一默认行为。

public enum FlushModeType {

   AUTO,

   COMMIT

}

AUTO是前述的默认行为。COMMIT则表示,仅当事务提交时才对更改做flush操作,而

在任何查询执行之前都不会引发flush操作。你可以通过调用setFlushMode()方法来指定EntityManager的FlushModeType。

可 是我们为什么需要手工指定FlushModeType呢?默认的 flush行为听起来很有道理:如果你正在查询数据库,一定想要确保在事务中所做的任何更新都被flush到数据库。这样,查询结果才会反映这些更新。否 则,更新就可能不会体现在查询结果中;而在事务提交时,很显然,你希望对更改做flush操作。

尽 管如此,出于性能的考虑,FlushModeType.COMMIT 也是有用武之地的。数据库应用调优的最好办法就是减少不必要的数据库访问。一些Java Persistence实现可以在一次batch JDBC调用中执行所有必要的更新操作。而如果updateBeds()方法使用缺省的Flush- ModeType.AUTO模式,那么执行每次查询时都会执行相应的SQL UPDATE。而使用COMMIT,则允许entity manager在一次批处理调用中执行所有的更新操作。这会大大减少数据库访问的次数。此外,UPDATE通常会使记录处于写锁定状态(write- locked)。使用COMMIT模式时,对数据库的锁定只在JTA事务提交期间发生,从而减少了事务对数据库占用的总体时间。

锁定

Locking

EntityManager API同时支持读锁和写锁,由于锁定行为与事务的概念紧密关联,我们将在第16章详细讨论lock()方法的使用。

getDelegate()

getDelegate()

getDelegate() 方法允许你获得一个指向底层 persistence provider对象的引用,该persistence provider实现了EntityManager接口。大多数厂商都提供了针对EntityManager接口的API扩展,为了使用这些扩展功能,你 可以将获取到的delegate对象强制类型转换为厂商的私有接口。虽然从理论上讲,你应该可以编写出厂商无关的代码。但实际上,多数厂商都提供了大量针 对Java Persistence的扩展,你可以在应用程序中充分利用这些功能。而getDelegate()方法提供了一种获取并使用厂商专有API的途径。

分享到:
评论

相关推荐

    含热电联供的智能楼宇群协同能量管理策略:基于多主体协同与需求响应的热电混合运行策略研究,“基于Stackelberg博弈与需求响应的智能楼宇群热电协同能量管理策略”,MATLAB代码:含热电联供的智能

    含热电联供的智能楼宇群协同能量管理策略:基于多主体协同与需求响应的热电混合运行策略研究,“基于Stackelberg博弈与需求响应的智能楼宇群热电协同能量管理策略”,MATLAB代码:含热电联供的智能楼宇群协同能量管理 关键词:楼宇能量管理系统;热电联供系统;Stackelberg博弈;需求响应 参考文档:《含热电联供的智能楼宇群协同能量管理》华北电力硕士lunwen 仿真平台:MATLAB 主要内容:本文提出了一种计及热电耦合需求响应的智能楼宇群的多主体协同能量管理策略。 传统热电联供系统采取单一的“以电定热”或“以热定电”运行策略,在实际运用中将无可避免地造成能源的浪费。 针对这一现状,本文采取“热电混合运行”策略对联供系统进行调控,在该运行策略下,运营商可以结合不同时段的价格信息、负荷水平等因素灵活采取使自身收益最大化的运行策略。 在热电协同能量管理层面,以楼宇群运营商的收益以及用户的效益最大化为目标,提出了智能楼宇群内部的优化定价策略,运营商在系统中负责向用户供电与供热,并自主制定电与热价格引导用户进行需求响应;其次,用户具有可平移电负荷以及可削减热负荷,可根据当前的价格信息自

    随机规划下的虚拟电厂与微网双不确定性优化调度模型研究:基于MATLAB与CPLEX的仿真平台实现,计及双重不确定性的虚拟电厂微网日前随机优化调度策略-基于MATLAB与CPLEX平台的研究,MATL

    随机规划下的虚拟电厂与微网双不确定性优化调度模型研究:基于MATLAB与CPLEX的仿真平台实现,计及双重不确定性的虚拟电厂微网日前随机优化调度策略——基于MATLAB与CPLEX平台的研究,MATLAB代码:计及源-荷双重不确定性的电厂 微网日前随机优化调度 关键词:电厂 微网 随机优化 随机调度 源-荷双重不确定性 电厂调度 参考文档:《Virtual power plant mid-term dispatch optimization》参考其燃气轮机、以及储能部分模型,另外随机优化算法也是和该文档一致; 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一个电厂或者微网单元的日前优化调度模型,考虑了光伏出力和负荷功率的双重不确定性,采用随机规划法处理不确定性变量,构建了电厂随机优化调度模型。 具体来看,首先是基于蒙特卡洛算法,对预测的光伏以及负荷曲线进行场景生成,然后基于快概率距离快速消除法进行削减,直至削减至5个场景,然后采用随机调度的方法,对多场景下的电厂调度策略进行优化,程序实现效果良好,纯程序为本人亲自所写,一行一注释, ,关键词:虚拟电厂; 微网; 随

    rsyslog-mmaudit-8.24.0-57.el7-9.3.x64-86.rpm.tar.gz

    1、文件内容:rsyslog-mmaudit-8.24.0-57.el7_9.3.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/rsyslog-mmaudit-8.24.0-57.el7_9.3.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    基于Web的增材制造预处理平台的设计与实现.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    博客系统完整开发流程(上)

    前端博客系统代码

    18考试真题最近的t67.txt

    18考试真题最近的t67.txt

    Javaweb期中作业会议管理系统,SSM+JSP.zip(课设&实训&大作业&项目)

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用,资源为网络商品(电子资料类)基于网络商品和电子资料商品的性质和特征不支持退款,质量优质,放心下载使用

    基于Plecs的模块化多电平换流器设计:PMW调制下的小输出电压纹波半桥子模块实现,基于Plecs实现的模块化多电平半桥换流器,采用PWM调制方式实现低电压纹波输出,用plecs实现的模块化多电平流器

    基于Plecs的模块化多电平换流器设计:PMW调制下的小输出电压纹波半桥子模块实现,基于Plecs实现的模块化多电平半桥换流器,采用PWM调制方式实现低电压纹波输出,用plecs实现的模块化多电平流器,调制方式是PMW,输出电压纹波小,子模块是半桥 ,关键词提取结果:plecs;模块化多电平换流器;PWM调制;输出电压纹波小;半桥子模块;,《Plecs模拟模块化半桥式PWM多电平换流器》——输出低纹波电压的研究与应用

    最新更新!!!上市公司-股票流动性指标(2000-2023年)

    ## 01、数据简介 股票流动性是指股票在市场上被买卖的容易程度和速度,即投资者能够在不造成显著价格变动的情况下迅速买卖股票的能力。 Amihud指标结果这是一个衡量股票流动性的指标,为股票在一段时间的收益率与交易额的比值的负对数值。如果股票交易量的变动会带来股价的剧烈波动(暴涨暴跌),则Amihud指标越大,股票流动性越差;反之,如果交易量的变化对股价变化的影响越小,则说明股票的流动性较好。由于这是一个计算结果,因此需要根据实际的股票交易数据来计算。 数据名称:上市公司-股票流动性指标 数据年份:2000-2023年 ## 02、相关数据 stkcd、年份、证券代码、Amihud指标结果、交易天数。

    Simulink在DSP2833x开发板上的电机控制与通讯模型自动生成代码教程,Simulink在DSP2833x开发板上的电机控制与通讯模型自动生成代码教程,模型开发域控制Simulik自动生成代码

    Simulink在DSP2833x开发板上的电机控制与通讯模型自动生成代码教程,Simulink在DSP2833x开发板上的电机控制与通讯模型自动生成代码教程,模型开发域控制Simulik自动生成代码 DSP2833x基于模型的电机控制设计 MATLAb Simulik自动生成代码 基于dsp2833x 底层驱动库的自动代码生成 MATLAB Simulink仿真及代码生成技术入门教程 内容为Simulink在嵌入式领域的应用,具体是Simulink在DSP28335这块开发版上的应用模型:包括直流电机、PMSM、步进电机控制模型,还有常见的LED、串口、CAN等通讯相关Simulink模型,模型都有相关解释文件。 ,核心关键词: Simulink应用; DSP2833x开发版; 电机控制模型; 直流电机模型; PMSM模型; 步进电机模型; LED模型; 串口模型; CAN通讯模型; 自动代码生成; 底层驱动库。,MATLAB Simulink在DSP2833x上的嵌入式开发:自动生成代码的模型应用与实践教程

    19考试真题最近的t24.txt

    19考试真题最近的t24.txt

    C51/STM32仿真软件,主要通过三极管、电阻、电容、单片机等等元器件进行搭载电路,软件程序调试的过程,完成项目功能

    protues8.17安装包,无须积分,即可下载

    计及电动汽车灵活性的微网三阶段多时间尺度协调调度模型:优化经济调度、实时调整与减少功率波动策略,计及电动汽车灵活性的微网多时间尺度经济协调调度模型,计及电动汽车灵活性的微网多时间尺度协调调度模型 摘要

    计及电动汽车灵活性的微网三阶段多时间尺度协调调度模型:优化经济调度、实时调整与减少功率波动策略,计及电动汽车灵活性的微网多时间尺度经济协调调度模型,计及电动汽车灵活性的微网多时间尺度协调调度模型 摘要:构建了含有电动汽车参与的微网 电厂多时间尺度协调优化模型,其中包括日前-日内-实时三阶段,日前阶段由于风光出力具有不确定性,结合风光预测值作初步经济调度;日内阶段,风光出力观测的更加准确,通过调节储能、需求响应等单元对调度方案作进一步调整,避免遭受高额的不平衡惩罚;实时阶段,风光出力的预测结果更准确,为了进一步降低微网与上级电网并网功率的波动性,充分利用电动汽车的灵活性,调度电动汽车的充放电以减少功率波动,兼顾调度的安全性与经济性。 ,微网协调调度模型; 电动汽车灵活性; 多时间尺度; 风光出力; 储能需求响应; 实时调整; 经济性,电动汽车灵活性的微网多尺度协调调度模型研究

    基于MPC的电动汽车分布式协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的电动汽车协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的分布式电动汽车协同自适应巡航控制,采用上下分层

    基于MPC的电动汽车分布式协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的电动汽车协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的分布式电动汽车协同自适应巡航控制,采用上下分层控制方式,上层控制器采用模型预测控制mpc方式,产生期望的加速度,下层根据期望的加速度分配扭矩;仿真结果良好,能够实现前车在加减速情况下,规划期望的跟车距离,产生期望的加速度进行自适应巡航控制。 ,关键词:MPC(模型预测控制); 分布式电动汽车; 协同自适应巡航控制; 上下分层控制方式; 期望加速度; 扭矩分配; 仿真结果良好; 前车加减速; 跟车距离。,基于MPC的分层控制电动汽车自适应巡航系统,仿真实现前车加减速跟车距离自适应

    MATLAB代码实现电-气-热综合能源系统耦合优化调度模型:精细注释与实用模块子程序,MATLAB实现电-气-热综合能源系统优化调度的精细化建模与求解策略利用电网、热网与气网耦合交互的复杂系统特性进行

    MATLAB代码实现电-气-热综合能源系统耦合优化调度模型:精细注释与实用模块子程序,MATLAB实现电-气-热综合能源系统优化调度的精细化建模与求解策略利用电网、热网与气网耦合交互的复杂系统特性进行深度调度分析,MATLAB代码:电-气-热综合能源系统耦合优化调度 关键词:综合能源系统 优化调度 电气热耦合 参考文档:自编文档,非常细致详细,可联系我查阅 仿真平台:MATLAB YALMIP+cplex gurobi 主要内容:代码主要做的是一个考虑电网、热网以及气网耦合调度的综合能源系统优化调度模型,考虑了电网与气网,电网与热网的耦合,算例系统中,电网部分为10机39节点的综合能源系统,气网部分为比利时20节点的配气网络,潮流部分电网是用了直流潮流,气网部分也进行了线性化的操作处理,代码质量非常高,保姆级的注释以及人性化的模块子程序,所有数据均有可靠来源 ,关键词:综合能源系统; 优化调度; 电气热耦合; 10机39节点; 比利时20节点; 直流潮流; 线性化处理; MATLAB YALMIP; cplex gurobi。,MATLAB代码:电-气-热综合能源系统耦合优化调度

    元器件基础知识文档(适合初学者学习)

    报告电子元器件手册目录,常见电子元器件的参考资料以及70种电子元器件封装等等,非常适合初学者进行学习和掌握。希望大家都能够在电子领域进行深耕。

    19考试真题最近的t63.txt

    19考试真题最近的t63.txt

    基于MATLAB Simulink开发的FCU与PEMFC燃料电池系统模型开发:空压机、电堆等模块仿真与控制策略开发,基于MATLAB Simulink开发的PEMFC燃料电池系统模型及控制策略仿真开

    基于MATLAB Simulink开发的FCU与PEMFC燃料电池系统模型开发:空压机、电堆等模块仿真与控制策略开发,基于MATLAB Simulink开发的PEMFC燃料电池系统模型及控制策略仿真开发资料,fcu,燃料电池控制器,质子交膜燃料电池系统模型(PEMFC),基于MATLAB simulink开发,主要部分有空压机模型,供气系统模型(阴极和阳极),背压阀模型,电堆模型等。 可进行控制策略等仿真开发工作。 提供相关文档学习建模资料等 ,fcu; 燃料电池控制器; PEMFC; MATLAB simulink; 空压机模型; 供气系统模型; 背压阀模型; 电堆模型; 控制策略仿真; 文档学习建模资料,基于MATLAB Simulink的PEMFC燃料电池控制器开发:模型构建与控制策略仿真

    上门预约服务小程序v4.10.9+前端.zip

    上门预约服务小程序v4.10.9+前端 文章列表单图时,图标统一左侧对齐 文章内增加视频位置,显示在文章顶部 文章内底部导航增加首页、分享、自定义按钮,可跳转内部页面、其他小程序、业务域名内的H5页面,方便宣传使用

    19考试真题最近的t41.txt

    19考试真题最近的t41.txt

Global site tag (gtag.js) - Google Analytics