Hibernate装备了一种极为有力的查询语言,(有意地)看上去很像SQL。但是别被语法蒙蔽,HQL是完全面向对象的,具备继承、多态和关联等特性。
10.1. 大小写敏感性(Case Sensitivity)除了Java类和属性名称外,查询都是大小写不敏感的。 所以, SeLeCT 和 sELEct 以及 SELECT 相同的,但是 net.sf.hibernate.eg.FOO 和 net.sf.hibernate.eg.Foo 是不同的, foo.barSet 和 foo.BARSET 也是不同的。
本手册使用小写的HQL关键词。有些用户认为在查询中使用大写的关键字更加易读,但是我们认为嵌入在Java代码中这样很难看。
10.2. from 子句可能最简单的Hibernate查询是这样的形式:
from eg.Cat它简单的返回所有eg.Cat 类的实例。
大部分情况下,你需要赋予它一个别名(alias) ,因为你在查询的其他地方也会引用这个Cat 。
from eg.Cat as cat上面的语句为Cat 赋予了一个别名cat 。所以后面的查询可以用这个简单的别名了。as 关键字是可以省略的,我们也可以写成这样:
from eg.Cat cat可以出现多个类,结果是它们的笛卡尔积,或者称为“交叉”连接。
from Formula, Parameterfrom Formula as form, Parameter as param让查询中的别名服从首字母小写的规则,我们认为这是一个好习惯。这和Java对局部变量的命名规范是一致的。(比如,domesticCat ).
10.3. 联合(Associations)和连接(joins)你可以使用join 定义两个实体的连接,同时指明别名。
from eg.Cat as catinner join cat.mate as mate
left outer join cat.kittens as kitten
from eg.Cat as cat left join cat.mate.kittens as kittens
from Formula form full join form.parameter param
支持的连接类型是从ANSI SQL借用的:
-
内连接,inner join
-
左外连接,left outer join
-
右外连接,right outer join
-
全连接,full join (不常使用)
inner join , left outer join 和 right outer join 都可以简写。
from eg.Cat as catjoin cat.mate as mate
left join cat.kittens as kitten
并且,加上 "fetch"后缀的抓取连接可以让联合的对象随着它们的父对象的初始化而初始化,只需要一个select语句。这在初始化一个集合的时候特别有用。
from eg.Cat as catinner join fetch cat.mate
left join fetch cat.kittens
抓取连接一般不需要赋予别名,因为被联合的对象应该不会在where 子句(或者任何其它子句)中出现。并且,被联合的对象也不会在查询结果中直接出现。它们是通过父对象进行访问的。
请注意,目前的实现中,在一次查询中只会抓取一个集合(?原文为:only one collection role may be fetched in a query)。也请注意,在使用scroll() 或者 iterate() 方式调用的查询中,是禁止使用fetch 构造的。最后,请注意full join fetch 和right join fetch 是没有意义的。
10.4. select子句select 子句选择在结果集中返回哪些对象和属性。思考一下下面的例子:
select matefrom eg.Cat as cat
inner join cat.mate as mate
这个查询会选择出作为其它猫(Cat )朋友(mate )的那些猫。当然,你可以更加直接的写成下面的形式:
select cat.mate from eg.Cat cat你甚至可以选择集合元素,使用特殊的elements 功能。下面的查询返回所有猫的小猫。
select elements(cat.kittens) from eg.Cat cat查询可以返回任何值类型的属性,包括组件类型的属性:
select cat.name from eg.DomesticCat catwhere cat.name like 'fri%'
select cust.name.firstName from Customer as cust
查询可以用元素类型是Object[] 的一个数组返回多个对象和/或多个属性。
select mother, offspr, mate.namefrom eg.DomesticCat as mother
inner join mother.mate as mate
left outer join mother.kittens as offspr
或者实际上是类型安全的Java对象
select new Family(mother, mate, offspr)from eg.DomesticCat as mother
join mother.mate as mate
left join mother.kittens as offspr
上面的代码假定Family 有一个合适的构造函数。
10.5. 统计函数(Aggregate functions)查询可以返回属性的统计函数。
select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)from eg.Cat cat
在select 子句中,统计函数的变量也可以是集合。
select cat, count( elements(cat.kittens) )from eg.Cat cat group by cat
下面是支持的统计函数列表:
-
avg(...), sum(...), min(...), max(...)
-
count(*)
-
count(...), count(distinct ...), count(all...)
distinct 和 all 关键字的用法和语义与SQL相同。
select distinct cat.name from eg.Cat catselect count(distinct cat.name), count(cat) from eg.Cat cat 10.6. 多态(polymorphism)
类似下面的查询:
from eg.Cat as cat返回的实例不仅仅是Cat ,也有可能是子类的实例,比如DomesticCat 。Hibernate查询可以在from 子句中使用任何 Java类或者接口的名字。查询可能返回所有继承自这个类或者实现这个接口的持久化类的实例。下列查询会返回所有的持久化对象:
from java.lang.Object o可能有多个持久化类都实现了Named 接口:
from eg.Named n, eg.Named m where n.name = m.name请注意,上面两个查询都使用了超过一个SQL的SELECT 。这意味着order by 子句将不会正确排序。(这也意味着你不能对这些查询使用Query.scroll() 。)
10.7. where子句where 子句让你缩小你要返回的实例的列表范围。
from eg.Cat as cat where cat.name='Fritz'返回所有名字为'Fritz'的Cat 的实例。
select foofrom eg.Foo foo, eg.Bar bar
where foo.startDate = bar.date
会返回所有的满足下列条件的Foo 实例,它们存在一个对应的bar 实例,其date 属性与Foo 的startDate 属性相等。复合路径表达式令where 子句变得极为有力。思考下面的例子:
from eg.Cat cat where cat.mate.name is not null这个查询会被翻译为带有一个表间(inner)join的SQL查询。如果你写下类似这样的语句:
from eg.Foo foowhere foo.bar.baz.customer.address.city is not null
你最终会得到的查询,其对应的SQL需要4个表间连接。
= 操作符不仅仅用于判断属性是否相等,也可以用于实例:
from eg.Cat cat, eg.Cat rival where cat.mate = rival.mateselect cat, mate
from eg.Cat cat, eg.Cat mate
where cat.mate = mate
特别的,小写的id 可以用来表示一个对象的惟一标识。(你可以使用它的属性名。)
from eg.Cat as cat where cat.id = 123from eg.Cat as cat where cat.mate.id = 69
第二个查询是很高效的。不需要进行表间连接!
组合的标示符也可以使用。假设Person 有一个组合标示符,是由country 和medicareNumber 组合而成的。
from bank.Person personwhere person.id.country = 'AU'
and person.id.medicareNumber = 123456
from bank.Account account
where account.owner.id.country = 'AU'
and account.owner.id.medicareNumber = 123456
又一次,第二个查询不需要表间连接。
类似的,在存在多态持久化的情况下,特殊属性class 用于获取某个实例的辨识值。在where子句中嵌入的Java类名将会转换为它的辨识值。
from eg.Cat cat where cat.class = eg.DomesticCat你也可以指定组件(或者是组件的组件,依次类推)或者组合类型中的属性。但是在一个存在路径的表达式中,最后不能以一个组件类型的属性结尾。(这里不是指组件的属性)。比如,假若store.owner 这个实体的的address 是一个组件
store.owner.address.city //okaystore.owner.address //error!
“任意(any)”类型也有特殊的id 属性和class 属性,这可以让我们用下面的形式来表达连接(这里AuditLog.item 是一个对应到<ant> 的属性)。
from eg.AuditLog log, eg.Payment paymentwhere log.item.class = 'eg.Payment' and log.item.id = payment.id
注意上面查询中,log.item.class 和payment.class 会指向两个值,代表完全不同的数据库字段。
10.8. 表达式(Expressions)where 子句允许出现的表达式包括了你在SQL中可以使用的大多数情况:
-
数学操作+, -, *, /
-
真假比较操作 =, >=, <=, <>, !=, like
-
逻辑操作 and, or, not
-
字符串连接 ||
-
SQL标量( scalar)函数,例如 upper() 和 lower()
-
没有前缀的 ( ) 表示分组
-
in , between , is null
-
JDBC 传入参数?
-
命名参数 :name , :start_date , :x1
-
SQL 文字 'foo' , 69 , '1970-01-01 10:00:01.0'
-
Java的public static final 常量 比如 Color.TABBY
in 和 between 可以如下例一样使用:
from eg.DomesticCat cat where cat.name between 'A' and 'B'from eg.DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )
其否定形式为
from eg.DomesticCat cat where cat.name not between 'A' and 'B'from eg.DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )
类似的,is null 和is not null 可以用来测试null值。
通过在Hibernate配置中声明HQL查询的替换方式,Boolean也是很容易在表达式中使用的:
<property name="hibernate.query.substitutions">true 1, false 0</property>在从HQL翻译成SQL的时候,关键字true 和false 就会被替换成1 和0 。
from eg.Cat cat where cat.alive = true你可以用特殊属性size 来测试一个集合的长度,或者用特殊的size() 函数也可以。
from eg.Cat cat where cat.kittens.size > 0from eg.Cat cat where size(cat.kittens) > 0
对于排序集合,你可以用minIndex 和maxIndex 来获取其最大索引值和最小索引值。类似的,minElement 和maxElement 可以用来获取集合中最小和最大的元素,前提是必须是基本类型的集合。
from Calendar cal where cal.holidays.maxElement > current date也有函数的形式(和上面的形式不同,函数形式是大小写不敏感的):
from Order order where maxindex(order.items) > 100from Order order where minelement(order.items) > 10000
SQL中的any, some, all, exists, in 功能也是支持的,前提是必须把集合的元素或者索引集作为它们的参数(使用element 和indices 函数),或者使用子查询的结果作为参数。
select mother from eg.Cat as mother, eg.Cat as kitwhere kit in elements(foo.kittens)
select p from eg.NameList list, eg.Person p
where p.name = some elements(list.names)
from eg.Cat cat where exists elements(cat.kittens)
from eg.Player p where 3 > all elements(p.scores)
from eg.Show show where 'fizard' in indices(show.acts)
请注意这些设施:size ,elements ,indices ,minIndex ,maxIndex ,minElement ,maxElement 都有一些使用限制:
-
在where 子句中: 只对支持子查询的数据库有效
-
在select 子句中:只有elements 和indices 有效
有序的集合(数组、list、map)的元素可以用索引来进行引用(只限于在where子句中)
from Order order where order.items[0].id = 1234select person from Person person, Calendar calendar
where calendar.holidays['national day'] = person.birthDay
and person.nationality.calendar = calendar
select item from Item item, Order order
where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11
select item from Item item, Order order
where order.items[ maxindex(order.items) ] = item and order.id = 11
[] 中的表达式允许是另一个数学表达式。
select item from Item item, Order orderwhere order.items[ size(order.items) - 1 ] = item
HQL也对一对多关联或者值集合提供内置的index() 函数。
select item, index(item) from Order orderjoin order.items item
where index(item) < 5
底层数据库支持的标量SQL函数也可以使用
from eg.DomesticCat cat where upper(cat.name) like 'FRI%'假如以上的这些还没有让你信服的话,请想象一下下面的查询假若用SQL来写,会变得多么长,多么不可读:
select custfrom Product prod,
Store store
inner join store.customers cust
where prod.name = 'widget'
and store.location.name in ( 'Melbourne', 'Sydney' )
and prod = all elements(cust.currentOrder.lineItems)
提示: 对应的SQL语句可能是这样的
SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_orderFROM customers cust,
stores store,
locations loc,
store_customers sc,
product prod
WHERE prod.name = 'widget'
AND store.loc_id = loc.id
AND loc.name IN ( 'Melbourne', 'Sydney' )
AND sc.store_id = store.id
AND sc.cust_id = cust.id
AND prod.id = ALL(
SELECT item.prod_id
FROM line_items item, orders o
WHERE item.order_id = o.id
AND cust.current_order = o.id
) 10.9. order by 子句
查询返回的列表可以按照任何返回的类或者组件的属性排序:
from eg.DomesticCat catorder by cat.name asc, cat.weight desc, cat.birthdate
asc 和desc 是可选的,分别代表升序或者降序。
10.10. group by 子句返回统计值的查询可以按照返回的类或者组件的任何属性排序:
select cat.color, sum(cat.weight), count(cat)from eg.Cat cat
group by cat.color
select foo.id, avg( elements(foo.names) ), max( indices(foo.names) )
from eg.Foo foo
group by foo.id
请注意:你可以在select子句中使用elements 和indices 指令,即使你的数据库不支持子查询也可以。
having 子句也是允许的。
select cat.color, sum(cat.weight), count(cat)from eg.Cat cat
group by cat.color
having cat.color in (eg.Color.TABBY, eg.Color.BLACK)
在having 子句中允许出现SQL函数和统计函数,当然这需要底层数据库支持才行。(比如说,MySQL就不支持)
select catfrom eg.Cat cat
join cat.kittens kitten
group by cat
having avg(kitten.weight) > 100
order by count(kitten) asc, sum(kitten.weight) desc
注意,group by 子句和order by 子句都不支持数学表达式。
10.11. 子查询对于支持子查询的数据库来说,Hibernate支持在查询中嵌套子查询。子查询必须由圆括号包围(常常是在一个SQL统计函数中)。也允许关联子查询(在外部查询中作为一个别名出现的子查询)。
from eg.Cat as fatcatwhere fatcat.weight > (
select avg(cat.weight) from eg.DomesticCat cat
)
from eg.DomesticCat as cat
where cat.name = some (
select name.nickName from eg.Name as name
)
from eg.Cat as cat
where not exists (
from eg.Cat as mate where mate.mate = cat
)
from eg.DomesticCat as cat
where cat.name not in (
select name.nickName from eg.Name as name
) 10.12. 示例
Hibernate查询可以非常强大复杂。实际上,强有力的查询语言是Hibernate的主要卖点之一。下面给出的示例与我在近期实际项目中使用的一些查询很类似。请注意你编写的查询大部分等都不会这么复杂!
下面的查询对特定的客户,根据给定的最小总计值(minAmount),查询出所有未付订单,返回其订单号、货品总数、订单总金额,结果按照总金额排序。在决定价格的时候,参考当前目录。产生的SQL查询,在ORDER ,ORDER_LINE ,PRODUCT ,CATALOG 和PRICE 表之间有四个内部连接和一个没有产生关联的字查询。
select order.id, sum(price.amount), count(item)from Order as order
join order.lineItems as item
join item.product as product,
Catalog as catalog
join catalog.prices as price
where order.paid = false
and order.customer = :customer
and price.product = product
and catalog.effectiveDate < sysdate
and catalog.effectiveDate >= all (
select cat.effectiveDate
from Catalog as cat
where cat.effectiveDate < sysdate
)
group by order
having sum(price.amount) > :minAmount
order by sum(price.amount) desc
好家伙,真长!实际上,在现实生活中我并不是非常热衷于子查询,所以我的查询往往是这样的:
select order.id, sum(price.amount), count(item)from Order as order
join order.lineItems as item
join item.product as product,
Catalog as catalog
join catalog.prices as price
where order.paid = false
and order.customer = :customer
and price.product = product
and catalog = :currentCatalog
group by order
having sum(price.amount) > :minAmount
order by sum(price.amount) desc
下面的查询统计付款记录处于每种状态中的数量,要排除所有处于AWAITING_APPROVAL 状态的,或者最近一次状态更改是由当前用户做出的。它翻译成SQL查询后,在PAYMENT ,PAYMENT_STATUS 和PAYMENT_STATUS_CHANGE 表之间包含两个内部连接和一个用于关联的子查询。
select count(payment), status.namefrom Payment as payment
join payment.currentStatus as status
join payment.statusChanges as statusChange
where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
or (
statusChange.timeStamp = (
select max(change.timeStamp)
from PaymentStatusChange change
where change.payment = payment
)
and statusChange.user <> :currentUser
)
group by status.name, status.sortOrder
order by status.sortOrder
假若我已经把statusChange 集合映射为一个列表而不是一个集合的话,查询写起来会简单很多。
select count(payment), status.namefrom Payment as payment
join payment.currentStatus as status
where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser
group by status.name, status.sortOrder
order by status.sortOrder
下面的查询使用了MS SQL Server的isNull() 函数,返回当前用户所属的组织所有账户和未付支出。翻译为SQL查询后,在ACCOUNT , PAYMENT , PAYMENT_STATUS ,ACCOUNT_TYPE , ORGANIZATION 和 ORG_USER 表之间有三个内部连接,一个外部连接和一个子查询。
select account, paymentfrom Account as account
left outer join account.payments as payment
where :currentUser in elements(account.holder.users)
and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
order by account.type.sortOrder, account.accountNumber, payment.dueDate
对某些数据库而言,我们可能不能依赖(关联的)子查询。
select account, paymentfrom Account as account
join account.holder.users as user
left outer join account.payments as payment
where :currentUser = user
and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
order by account.type.sortOrder, account.accountNumber, payment.dueDate 10.13. 提示和技巧(Tips & Tricks)
你不返回结果集也可以查询结果集的大小:
( (Integer) session.iterate("select count(*) from ....").next() ).intValue()要依据一个集合的大小对结果集排序,可以用下面的查询来对付一对多或多对多的关联:
select usrfrom User as usr
left join usr.messages as msg
group by usr
order by count(msg)
如果你的数据库支持子查询,你可以在查询的where子句中对选择的大小进行条件限制:
from User usr where size(usr.messages) >= 1如果你的数据库不支持子查询,可以使用下列查询:
select usr.id, usr.namefrom User usr.name
join usr.messages msg
group by usr.id, usr.name
having count(msg) >= 1
因为使用了inner join,这个解决方法不能返回没有message的User .下面的方式就可以:
select usrfrom User as usr
left join usr.messages as msg
group by usr
having count(msg) = 0
JavaBean的属性可以直接作为命名的查询参数:
Query q = s.createQuery("from foo in class Foo where foo.name=:name and foo.size=:size");q.setProperties(fooBean); // fooBean has getName() and getSize()
List foos = q.list();
在Query 接口中使用过滤器(filter),可以对集合分页:
Query q = s.createFilter( collection, "" ); // the trivial filterq.setMaxResults(PAGE_SIZE);
q.setFirstResult(PAGE_SIZE * pageNumber);
List page = q.list();
集合元素可以使用查询过滤器(query filter)进行排序或者分组:
List orderedCollection = s.filter( collection, "order by this.amount" );List counts = s.filter( collection, "select this.type, count(this) group by this.type" );
不用初始化集合就可以得到其大小:
( (Integer) session.iterate("select count(*) from ....").next() ).intValue();
相关推荐
脆弱水印技术在图像篡改检测中的应用与挑战,脆弱水印技术在图像篡改检测中的应用与挑战,脆弱水印的图像篡改检测 ,脆弱水印; 图像篡改; 检测; 图像处理,基于脆弱水印的图像篡改检测技术
高效Delta机械臂运动控制卡:前瞻轨迹规划,G代码编程,多维插补,激光切割与绘图,机器视觉集成,扩展坐标与旋转功能,一键脱机运行,大容量存储,基于前瞻运动轨迹规划的Delta机械臂运动控制卡:高效G代码编程,圆弧插补与激光切割功能,配合机器视觉实现精准操作。高效精准操作与管理工具的创新型机械运动控制解决方案。,delta机械臂,delta机器人,运动控制器,运动控制卡 本卡采用前瞻运动轨迹规划,运动采用G代码指令编程,具有G5三维空间的圆弧插补,空间直线插补功能,子程序编程功能,逻辑判断语句功能,示教编程功能(支持手柄),变量位置编程功能,动态PWM激光输出功能(兼容舵机控制信号),动态频率脉冲输出功能,通用输入输出功能。 可极简单的实现绘图雕刻,3维激光切割功能。 轨迹图形可xy平面整体旋转功能。 可利用变量位置,获取外部坐标要求,可轻松配合机器视觉。 支持探针功能,测平面,测外形等。 可设置4组平移工件坐标系,2组参考原点。 新增2组空间旋转工件坐标系,支持任意图形直接空间旋转。 卡上一键脱机RAM区运行功能。 2M程序容量。 断电后位置记忆,变量坐标位置记忆,计数器记忆。 伺服
毕业设计
内容概要:随着模型参数量不断扩大,如从BERT到GPT-3,传统微调方法变得不可行。文章聚焦于参数高效微调(PEFT)策略,系统探讨了几十余种方法,包括加法型、选择型、重构型及其混合方法。文中详细介绍各类PEFT的具体操作(如引入额外参数、冻结部分权重等),并通过广泛实验验证其在大型预训练模型上的适用性和性能。特别指出,PEFT在保持高性能的同时极大减少了计算与内存成本,并针对十几亿乃至几十亿参数级别的模型展开测试与讨论。 适用人群:适用于从事大规模机器学习模型研究、开发的应用科学家和技术专家,尤其是那些希望通过减少资源消耗实现高效微调的技术团队成员。 使用场景及目标:该文章适用于希望在有限资源条件下优化大模型性能的人群。帮助研究人员理解不同类型PEFT的优点和局限,为实际项目中选择合适技术路线提供建议。其目的是为了指导开发者正确理解和应用先进的PEFT技术,从而提高系统的运行效率和服务质量。 其他说明:本文不仅提供了详尽的方法介绍和性能对比,而且为未来的研究指明方向,鼓励创新思维的发展,旨在推动参数有效调优领域的进步。同时提醒注意现有的挑战和未解决问题。
磷酸铁锂体系电池COMSOL模型构建解析与实践指南,磷酸铁锂体系电池COMSOL建模分析与优化方案探讨,出一个磷酸铁锂体系电池comsol模型 ,建立磷酸铁锂体系电池; comsol模型; 电池模拟; 模型构建; 锂离子电池。,构建磷酸铁锂体系电池Comsol模型,深入探索电池性能
开关磁阻电机多维控制策略仿真研究(基于Matlab 2016b的精细化模型),开关磁阻电机多策略控制仿真模型(matlab 2016b版本,含传统与智能控制策略及离线迭代算法),开关磁阻电机控制仿真(matlab 2016b版本仿真模型 自用) 模型包涵: 开关磁阻电机传统控制:电流斩波控制、电压PWM控制、角度位置控制。 智能控制:12 8三相开关磁阻电机有限元分析本体建模、转矩分配函数控制、模糊PID控制、模糊角度控制、神经网络在线自适应迭代控制。 部分离线迭代算法:遗传算法优化PID、粒子群算法优化PID。 biye研究生自用仿真模型 . ,核心关键词: 开关磁阻电机; 控制仿真; Matlab 2016b; 传统控制; 智能控制; 有限元分析; 转矩分配函数控制; 模糊PID控制; 神经网络在线自适应迭代控制; 遗传算法优化PID; 粒子群算法优化PID; 研究生自用仿真模型。,基于Matlab 2016b的开关磁阻电机控制模型研究与仿真优化研究生自用版
McgsPro_IoT驱动_V3.1.1.8
数学建模相关主题资源2
基于改进粒子群算法的光伏储能选址定容模型分析——针对14节点配网系统的实践与出力情况探索,基于改进粒子群算法的光伏储能选址定容模型分析与出力预测研究(含配图材料参考),含光伏的储能选址定容模型 14节点 程序采用改进粒子群算法,对分析14节点配网系统中的储能选址定容方案,并得到储能的出力情况,有相关参考资料 ,核心关键词:含光伏的储能选址定容模型;14节点;改进粒子群算法;配网系统;储能选址定容方案;出力情况;参考资料。,基于改进粒子群算法的14节点配网光伏储能选址定容模型及出力分析研究
基于需求响应与阶梯式碳交易的综合能源系统优化调度模型研究(MATLAB仿真实现),基于需求响应与碳交易的综合能源系统优化调度策略:灵活调配冷热电负荷,实现低碳高效运行。,考虑需求响应和碳交易的综合能源系统日前优化调度模型 关键词:柔性负荷 需求响应 综合能源系统 参考:私我 仿真平台:MATLAB yalmip+cplex 主要内容:在冷热电综合能源系统的基础上,创新性的对用户侧资源进行了细致的划分和研究,首先按照能源类型将其分为热负荷需求响应和电负荷需求响应,在此基础上,进一步分为可削减负荷、可转移负荷以及可平移负荷三类,并将柔性负荷作为需求响应资源加入到综合能源的调度系统中,从而依据市场电价灵活调整各类负荷,实现削峰填谷,改善负荷曲线等优势,此外,为了丰富内容,还考虑了阶梯式碳交易,构建了考虑阶梯式碳交易以及综合需求响应的综合能源低碳经济调度模型,设置了多个对比场景,验证所提模型的有效性,从而体现工作量,是不可多得的代码 场景一: 这段程序主要是用来进行某微网的运行优化。它包含了多个功能和应用,涉及到了能源集线器、需求侧柔性负荷、光伏、风机、燃气轮机等内容。 首先,程序读取了
multisim
内容概要:本文详细介绍了一系列用于科学研究、工程项目和技术开发中至关重要的实验程序编写与文档报告撰写的资源和工具。从代码托管平台(GitHub/GitLab/Kaggle/CodeOcean)到云端计算环境(Colab),以及多种类型的编辑器(LaTeX/Microsoft Word/Overleaf/Typora),还有涵盖整个研究周期的各种辅助工具:如可视化工具(Tableau)、数据分析平台(R/Pandas)、项目管理工具(Trello/Jira)、数据管理和伦理审核支持(Figshare/IRB等),最后提供了典型报告的具体结构指导及其范本实例链接(arXiv/PubMed)。这为实验流程中的各个环节提供了系统的解决方案,极大地提高了工作的效率。 适合人群:高校学生、科研工作者、工程技术人员以及从事学术写作的人员,无论是新手入门还是有一定经验的人士都能从中受益。 使用场景及目标:帮助读者高效地准备并开展实验研究活动;促进团队间协作交流;规范研究报告的形式;提高对所收集资料的安全性和隐私保护意识;确保遵循国际公认的伦理准则进行实验。
基于OpenCV与深度学习的人脸表情识别系统:Python编程,实时检测与视频加载的PyQt界面应用,基于OpenCV与深度学习的人脸表情识别系统:Python编程,PyQt界面,实时视频与图片检测.exe可执行文件,基于OpenCV的人脸表情识别系统 相关技术:python,opencv,pyqt,深度学习 (请自行安装向日葵远程软件,以便提供远程帮助) 可编译为.exe文件。 软件说明:摄像头实时检测,加载照片,视频均可。 有基础的同学,可自行修改完善。 第一张和第二张为运行截图。 ,人脸表情识别; Op
基于双端口直流微电网系统模型的改进下垂控制及稳定性分析(含电压鲁棒控制器与粒子群寻优权函数),基于双端口直流微电网系统模型的优化设计与分析:改进下垂控制、电压鲁棒控制器及仿真研究,直流微网,直流微电网系统模型,有两个端口。 外环有改进下垂控制,内环双pi环,带恒功率负载。 暂态性能良好,可用于控制器设计,稳定性分析等。 另外还有电压鲁棒控制器,小信号模型,根轨迹分析,粒子群寻优权函数等内容。 仅为simulink ,直流微网; 直流微电网系统模型; 改进下垂控制; 双pi环; 恒功率负载; 暂态性能; 控制器设计; 稳定性分析; 电压鲁棒控制器; 小信号模型; 根轨迹分析; 粒子群寻优权函数,基于改进下垂控制的直流微网系统模型:双PI环与恒功率负载研究
这是萨达萨达是发生发士大夫
Labview下的通用OCR识别技术:高效文本识别与图像处理解决方案,Labview下的通用OCR识别技术:提高文字识别效率与准确度,labview.通用OCR识别技术 ,核心关键词:LabVIEW; 通用OCR识别技术; 识别技术; OCR技术; 图像识别; 文字识别。,LabVIEW平台下的通用OCR识别技术
一个任务待办记录、提醒工具 可设定提前N天开始提醒 数据本地存储
实现电流注入型牛拉法及多种潮流计算程序:牛拉法、前推回代法与三相潮流算法集萃,潮流计算程序集锦:涵盖电流注入型牛拉法、牛拉法、前推回代法及三相潮流算法实现,本程序采用matlab编写,主要是实现电流注入型牛拉法 除此之外,本人还编写了很多种关于潮流计算的程序,主要有牛拉法,前推回代法,以还有相和三相潮流计算程序 ,matlab编写;电流注入型牛拉法;潮流计算程序;牛拉法;前推回代法;相和三相潮流计算,Matlab实现:电流注入型牛拉法与多态潮流计算程序集