`
alin_ass
  • 浏览: 35155 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

no sql jdbc orm[5-18]

    博客分类:
  • orm
阅读更多
最近几天在写的一个jdbc orm, 放上来交流学习~~

目标:
no sql, no map , no sql, no map...............................(省略一百遍 ).

约束&特点:
显示代理
操纵proxy domain getter/setter等于构建sql, 重构对象即重构sql
domain对象属性和column名字相同
domain有接口
domain是javabean
某些dao接口参数需要beanproxy(主要是update的接口)
基本没有级联orm


待实现:
多表查询
稍微复杂的sql生成
考虑local&remote Object cache,query cache...

dao example:
	**
 * @version 2007-5-4
 * @author xalinx at gmail dot com
 * 
 */
public class UserDaoImpl extends DaoSupport<User, Long> implements UserDao {
	private final ParameterizedRowMapper<UserImpl> rowMapper = new AutoRowMapper<UserImpl>() {
	};

	public void deleteById(Long id) {
		// create proxy
		BeanMonitor<User> monitor = new BeanMonitor<User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy where
		proxy.setId(id);
		monitor.eq();

		getSimpleDaoTemplate().proxyDelete(monitor);
	}

	public User findById(Long id) {
		// create proxy
		BeanMonitor<User> monitor = new BeanMonitor<User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy select
		proxy.getId();
		proxy.getUsername();
		proxy.getPassword();
		proxy.getNickname();
		proxy.getCity();
		proxy.getProv();
		proxy.getUserStatus();
		proxy.getCreateTime();
		proxy.getModifyTime();

		// proxy where
		proxy.setId(id);
		monitor.eq();

		return getSimpleDaoTemplate().proxyQueryObject(monitor, rowMapper);
	}

	public int findCount() {
		return getSimpleDaoTemplate().findCount(UserImpl.class);
	}

	public void store(User u) {
		// integrity validate
		if (u == null || u.getId() <= 0 || u.getUserStatus() < 0 || u.getUsername() == null || u.getPassword() == null
				|| u.getNickname() == null || u.getCreateTime() == null || u.getModifyTime() == null) {
			throw new DataIntegrityViolationException(u.toString());
		}

		BeanMonitor<User> monitor = new BeanMonitor<User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy insert
		proxy.setId(u.getId());
		proxy.setUsername(u.getUsername());
		proxy.setPassword(u.getPassword());
		proxy.setNickname(u.getNickname());
		proxy.setCity(u.getCity());
		proxy.setProv(u.getProv());
		proxy.setUserStatus(u.getUserStatus());
		proxy.setCreateTime(u.getCreateTime());
		proxy.setModifyTime(u.getModifyTime());

		// store
		getSimpleDaoTemplate().proxyStore(monitor);
	}

	public void updateById(BeanMonitor<User> monitor) {
		User u = monitor.getBean();
		// integrity validate
		if (u == null || u.getId() <= 0) {
			throw new DataIntegrityViolationException(u.toString());
		}

		// proxy where
		User proxy = monitor.getProxy();
		monitor.where();
		proxy.setId(u.getId());
		monitor.eq();

		// update
		getSimpleDaoTemplate().proxyUpdate(monitor, u.getId());
	}

	public BasePage<User> findPage(UserPageQuery pageQuery) {
		// create proxy
		BeanMonitor<User> monitor = new BeanMonitor<User>();
		User proxy = monitor.proxy(new UserImpl());

		// proxy select
		proxy.getId();
		proxy.getUsername();
		proxy.getCreateTime();

		// proxy where
		if (null != pageQuery.getUser().getCity()) {
			proxy.setCity(pageQuery.getUser().getCity());
			monitor.eq();
		}
		if (null != pageQuery.getEndCreateTime()) {
			proxy.setCreateTime(pageQuery.getEndCreateTime());
			monitor.and().leeq();
		}
		if (null != pageQuery.getStartCreateTime()) {
			proxy.setCreateTime(pageQuery.getStartCreateTime());
			monitor.and().gteq();
		}
		if (null != pageQuery.getUser().getUsername()) {
			proxy.setUsername(pageQuery.getUser().getUsername());
			monitor.and().like();
		}

		// query & orm & page
		return getSimpleDaoTemplate().proxyQueryPage(monitor, rowMapper, pageQuery);
	}

}

分享到:
评论
4 楼 alin_ass 2007-05-18  
jdbc template & dao support
/**
 * @version 2007-5-10
 * @author xalinx at gmail dot com
 * 
 */
public class SimpleDaoTemplate extends SimpleJdbcTemplate {

	private SqlBuilder sqlBuilder;

	public void setSqlBuilder(SqlBuilder sqlBuilder) {
		this.sqlBuilder = sqlBuilder;
	}

	/**
	 * @param classicJdbcTemplate
	 */
	public SimpleDaoTemplate(JdbcOperations classicJdbcTemplate) {
		super(classicJdbcTemplate);
	}

	@SuppressWarnings("unchecked")
	@Override
	public <T> T queryForObject(String sql, ParameterizedRowMapper<T> rm, Object... args) throws DataAccessException {
		Object obj = (ObjectUtils.isEmpty(args) ? getJdbcOperations().queryForObject(sql, rm) : getJdbcOperations()
				.queryForObject(sql, args, rm));
		return obj == null ? null : (T) obj;
	}

	public <T> T queryObject(String sql, ParameterizedRowMapper<? extends T> rm, Object... args) {
		return queryForObject(sql, rm, args);
	}

	@SuppressWarnings("unchecked")
	public <T> List<T> queryForList(String sql, ParameterizedRowMapper<? extends T> rm, Object... args)
			throws DataAccessException {
		return (List<T>) (ObjectUtils.isEmpty(args) ? getJdbcOperations().query(sql, rm) : getJdbcOperations().query(
				sql, args, rm));
	}

	public <T> BasePage<T> proxyQueryPage(BeanMonitor<T> beanMonitor, ParameterizedRowMapper<? extends T> rowMapper,
			PageQuery pageQuery) {
		QueryWrap wrap = sqlBuilder.buildLimitSelect(beanMonitor, pageQuery.getStart(), pageQuery.getPageSize());
		List<T> items = queryForList(wrap.getSql(), rowMapper, wrap.getValues());
		return new BasePage<T>(pageQuery, items);
	}

	public <T> List<T> proxyQueryList(BeanMonitor<T> monitor, ParameterizedRowMapper<? extends T> rm) {
		QueryWrap wrap = sqlBuilder.buildSelect(monitor);
		return queryForList(wrap.getSql(), rm, wrap.getValues());
	}

	public <T> T proxyQueryObject(BeanMonitor<T> monitor, ParameterizedRowMapper<? extends T> rm) {
		QueryWrap wrap = sqlBuilder.buildSelect(monitor);
		return queryObject(wrap.getSql(), rm, wrap.getValues());
	}

	public <T> void proxyStore(BeanMonitor<T> monitor) {
		QueryWrap wrap = sqlBuilder.buildInsert(monitor);
		update(wrap.getSql(), wrap.getValues());
	}

	public <T> void proxyDelete(BeanMonitor<T> monitor) {
		QueryWrap wrap = sqlBuilder.buildDelete(monitor);
		update(wrap.getSql(), wrap.getValues());
	}

	public <E> void proxyUpdate(BeanMonitor<E> monitor, Object id) {
		QueryWrap wrap = sqlBuilder.buildUpdate(monitor);
		update(wrap.getSql(), wrap.getValues());
	}

	public <E> int findCount(BeanMonitor<E> monitor) {
		if (null == monitor) {
			throw new IllegalArgumentException();
		}
		QueryWrap wrap = sqlBuilder.buildCount(monitor);
		return queryForInt(wrap.getSql(), wrap.getValues());
	}

	public <E> int findCount(Class<E> entity) {
		if (null == entity) {
			throw new IllegalArgumentException();
		}
		QueryWrap wrap = sqlBuilder.buildCount(entity);
		return queryForInt(wrap.getSql(), wrap.getValues());
	}
}


/**
 * @version 2007-5-9
 * @author xalinx at gmail dot com
 * 
 */
public class DaoSupport<E, ID extends Serializable> extends JdbcDaoSupport {

	protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
		return new DaoTemplate(dataSource);
	}

	private SimpleDaoTemplate simpleDaoTemplate;

	/**
	 * Create a SimpleJdbcTemplate based on the configured JdbcTemplate.
	 */
	protected void initTemplateConfig() {
		this.simpleDaoTemplate = new SimpleDaoTemplate(getJdbcTemplate());
		this.simpleDaoTemplate.setSqlBuilder(sqlBuilder);
	}

	/**
	 * Return a SimpleJdbcTemplate wrapping the configured JdbcTemplate.
	 */
	protected SimpleDaoTemplate getSimpleDaoTemplate() {
		return simpleDaoTemplate;
	}

	private SqlBuilder sqlBuilder;

	public void setSqlBuilder(SqlBuilder builder) {
		this.sqlBuilder = builder;
		initTemplateConfig();
	}

}
3 楼 alin_ass 2007-05-18  
sql builder
/**
 * @version 2007-5-17
 * @author xalinx at gmail dot com
 * 
 */
public class SqlBuilder {
	private NameMapper nameMapper;

	public void setNameMapper(NameMapper nameMapper) {
		this.nameMapper = nameMapper;
	}

	private Dialect dialect;

	public void setDialect(Dialect dialect) {
		this.dialect = dialect;
	}

	public void setDialectFactory(DialectFactory factory) {
		setDialect(factory.getDialect());
	}

	public <T> QueryWrap buildLimitSelect(BeanMonitor<T> beanMonitor, int start, int size) {
		QueryWrap wrap = buildSelect(beanMonitor);
		boolean offset = 0 == start ? false : true;
		wrap.setSql(dialect.getLimitSql(wrap.getSql(), offset));
		wrap.setValues(dialect.getLimitArguments(start, size, wrap.getValues()));
		return wrap;
	}

	public <T> QueryWrap buildSelect(BeanMonitor<T> monitor) {
		String tableName = getTableName(monitor);
		List<String> columns = monitor.getReadedPropertyNames();
		int columnNum = columns.size();
		StringBuilder builder = new StringBuilder(128);
		builder.append("select ");
		for (int i = 0; i < columnNum; i++) {
			builder.append(columns.get(i));
			if (i < columnNum - 1) {
				builder.append(",");
			}
		}
		builder.append(" from ");
		builder.append(tableName);

		buildWhereExpression(monitor, builder);

		Object[] values = monitor.getWritedPropertyValues().toArray(ArrayKit.EMPTY_OBJECT_ARRAY);
		return new QueryWrap(builder.toString(), values);
	}

	public <T> QueryWrap buildDelete(BeanMonitor<T> monitor) {
		String tableName = getTableName(monitor);
		StringBuilder builder = new StringBuilder(128);
		builder.append("delete from ");
		builder.append(tableName);

		buildWhereExpression(monitor, builder);

		Object[] values = monitor.getWritedPropertyValues().toArray(ArrayKit.EMPTY_OBJECT_ARRAY);
		return new QueryWrap(builder.toString(), values);
	}

	public <T> QueryWrap buildInsert(BeanMonitor<T> monitor) {
		String tableName = getTableName(monitor);
		List<String> columns = monitor.getWritedPropertyNames();
		int columnNum = columns.size();

		StringBuilder builder = new StringBuilder(128);
		builder.append("insert into ");
		builder.append(tableName);
		builder.append(" (");
		for (int i = 0; i < columnNum; i++) {
			builder.append(columns.get(i));
			if (i < columnNum - 1) {
				builder.append(",");
			}
		}
		builder.append(") values (");
		for (int i = 0; i < columnNum; i++) {
			builder.append("?");
			if (i < columnNum - 1) {
				builder.append(",");
			}
		}
		builder.append(")");

		Object[] values = monitor.getWritedPropertyValues().toArray(ArrayKit.EMPTY_OBJECT_ARRAY);
		return new QueryWrap(builder.toString(), values);
	}

	public <E> QueryWrap buildCount(BeanMonitor<E> monitor) {
		String tableName = getTableName(monitor);
		StringBuilder builder = new StringBuilder(128);
		builder.append("select count(*) from ");
		builder.append(tableName);

		buildWhereExpression(monitor, builder);

		Object[] values = monitor.getWritedPropertyValues().toArray(ArrayKit.EMPTY_OBJECT_ARRAY);
		return new QueryWrap(builder.toString(), values);
	}

	public <E> QueryWrap buildCount(Class<E> entity) {
		String tableName = getTableName(entity);
		return new QueryWrap("select count(*) from " + tableName, null);
	}

	/**
	 * 
	 * 
	 * @param monitor
	 * @param id
	 */
	public <E> QueryWrap buildUpdate(BeanMonitor<E> monitor) {
		List<String> columns = monitor.getWritedPropertyNames();
		String tableName = getTableName(monitor);
		int columnNum = monitor.getWhereOffset();

		StringBuilder builder = new StringBuilder(128);
		builder.append("update ");
		builder.append(tableName);
		builder.append(" set ");
		for (int i = 0; i < columnNum; i++) {
			builder.append(columns.get(i));
			builder.append("=?");
			if (i < columnNum - 1) {
				builder.append(",");
			}
		}

		buildWhereExpression(monitor, builder);

		Object[] values = monitor.getWritedPropertyValues().toArray(ArrayKit.EMPTY_OBJECT_ARRAY);
		return new QueryWrap(builder.toString(), values);
	}

	private String getTableName(BeanMonitor beanMonitor) {
		return nameMapper.getTableName(beanMonitor.getBean().getClass().getCanonicalName());
	}

	private String getTableName(Class entity) {
		return nameMapper.getTableName(entity.getCanonicalName());
	}

	private <E> void buildWhereExpression(BeanMonitor<E> monitor, StringBuilder builder) {
		int whereOffset = monitor.getWhereOffset();
		List<String> columns = monitor.getWritedPropertyNames();
		// build where expression
		if (!CollectionKit.isEmpty(columns) || whereOffset < columns.size()) {
			int columnNum = columns.size();
			builder.append(" where");

			Iterator<Condition> conditions = monitor.getConditions().iterator();
			for (int i = whereOffset; i < columnNum; i++) {
				String columnName = columns.get(i);
				Condition cond = null;
				while (true) {
					cond = conditions.next();
					if (!cond.isCompare()) {
						builder.append(" ");
						builder.append(cond.getExpression());
					} else {
						break;
					}
				}
				builder.append(" ");
				builder.append(columnName);
				builder.append(cond.getExpression());
				builder.append("?");
			}
		}
	}

}

2 楼 alin_ass 2007-05-18  
bean monitor
/**
 * @author alin [xalinx at gmail dot com]
 * @date 2007-5-11
 */
public class BeanMonitor<E> {
	private E bean;

	private E proxy;

	private PropertyDescriptor[] allProperties;

	private List<String> readedPropertyNames;

	private List<String> writedPropertyNames;

	private List<Object> writedPropertyValues;

	private List<Condition> conditions;

	public E getBean() {
		return bean;
	}

	public E getProxy() {
		return proxy;
	}

	public List<String> getReadedPropertyNames() {
		return readedPropertyNames;
	}

	public List<String> getWritedPropertyNames() {
		return writedPropertyNames;
	}

	public List<Object> getWritedPropertyValues() {
		return writedPropertyValues;
	}

	public List<Condition> getConditions() {
		return conditions;
	}

	private void addReaded(String pName) {
		if (null == readedPropertyNames) {
			readedPropertyNames = new ArrayList<String>(allProperties.length * 3 / 2);
		}
		readedPropertyNames.add(pName);
	}

	private void addWrited(String pName, Object value) {
		if (null == writedPropertyNames) {
			writedPropertyNames = new ArrayList<String>(allProperties.length * 3 / 2);
			writedPropertyValues = new ArrayList<Object>(allProperties.length * 3 / 2);
		}
		writedPropertyNames.add(pName);
		writedPropertyValues.add(value);
	}

	private void addCondition(Condition cond) {
		if (null == conditions) {
			conditions = new ArrayList<Condition>(allProperties.length * 3 / 2);
		}
		conditions.add(cond);
	}

	@SuppressWarnings("unchecked")
	public E proxy(E bean) {
		this.bean = bean;
		Class cls = bean.getClass();
		BeanInfo bi;
		try {
			bi = Introspector.getBeanInfo(cls);
		} catch (IntrospectionException e) {
			throw new RuntimeException(e);
		}
		this.allProperties = bi.getPropertyDescriptors();
		this.proxy = (E) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), new BeanHandler());
		return proxy;
	}

	private class BeanHandler implements InvocationHandler {

		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
			Object invokeResult = method.invoke(bean, args);
			for (int i = 0; i < allProperties.length; i++) {
				PropertyDescriptor pd = allProperties[i];
				// skip default class property
				if (pd.getName().equals("class")) {
					continue;
				}
				if (null != pd.getReadMethod() && pd.getReadMethod().getName().equals(method.getName())) {
					addReaded(pd.getName());
					break;
				} else if (null != pd.getWriteMethod() && pd.getWriteMethod().getName().equals(method.getName())) {
					// args[0] is suitable?
					addWrited(pd.getName(), args[0]);
					break;
				}
			}
			return invokeResult;
		}

	}

	/**
	 * @return
	 */
	public BeanMonitor<E> like() {
		addCondition(Condition.LIKE);
		return this;
	}

	/**
	 * @return
	 */
	public BeanMonitor<E> and() {
		addCondition(Condition.AND);
		return this;
	}

	/**
	 * @return
	 */
	public BeanMonitor<E> or() {
		addCondition(Condition.OR);
		return this;
	}

	/**
	 * (
	 * 
	 * @return
	 */
	public BeanMonitor<E> start() {
		addCondition(Condition.START);
		return this;
	}

	/**
	 * }
	 * 
	 * @return
	 */
	public BeanMonitor<E> end() {
		addCondition(Condition.END);
		return this;
	}

	/**
	 * =
	 */
	public BeanMonitor<E> eq() {
		addCondition(Condition.EQ);
		return this;
	}

	/**
	 * <=
	 * 
	 * @return
	 */
	public BeanMonitor<E> leeq() {
		addCondition(Condition.LE_EQ);
		return this;
	}

	/**
	 * <
	 * 
	 * @return
	 */
	public BeanMonitor<E> le() {
		addCondition(Condition.LE);
		return this;
	}

	/**
	 * >=
	 * 
	 * @return
	 */
	public BeanMonitor<E> gteq() {
		addCondition(Condition.GT_EQ);
		return this;
	}

	/**
	 * >
	 * 
	 * @return
	 */
	public BeanMonitor<E> gt() {
		addCondition(Condition.GT);
		return this;
	}

	public BeanMonitor<E> isNotNull() {
		addCondition(Condition.IS_NOT_NULL);
		return this;
	}

	public BeanMonitor<E> isNull() {
		addCondition(Condition.IS_NULL);
		return this;
	}

	private int whereOffset = 0;

	/**
	 * 
	 */
	public void where() {
		whereOffset = this.writedPropertyNames.size();
	}

	public int getWhereOffset() {
		return whereOffset;
	}

}
1 楼 alin_ass 2007-05-16  

修改自apache dbutils,用来做auto map
public abstract class AutoBeanHandler<T> implements ParameterizedHandler<T> {
	/**
	 * The Class of beans produced by this handler.
	 */
	private Class<T> type = null;

	/**
	 * The RowProcessor implementation to use when converting rows into beans.
	 */
	private RowProcessor convert = BasicRowProcessor.instance();

	public AutoBeanHandler() {
		type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}

	public T handle(ResultSet rs, int rowNum) throws SQLException {
		return this.convert.toBean(rs, rowNum, type);
	}

	public List<T> handle(ResultSet rs) throws SQLException {
		return this.convert.toBeanList(rs, type);
	}

}

public abstract class AutoRowMapper<T> extends AutoBeanHandler<T> implements ParameterizedRowMapper<T> {

	public T mapRow(ResultSet rs, int rowNum) throws SQLException {
		return super.handle(rs, rowNum);
	}

}

相关推荐

    TinyYolo2实时视频流物体检测ONNX模型

    TinyYolo2实时视频流物体检测ONNX模型 运行 ONNX 模型,并结合 OpenCV 进行图像处理。具体流程包括: 1. 加载并初始化 ONNX 模型。 2. 从摄像头捕获实时视频流。 3. 对每一帧图像进行模型推理,生成物体检测结果。 4. 在界面上绘制检测结果的边界框和标签。

    chromedriver-linux64-134.0.6998.23(Beta).zip

    chromedriver-linux64-134.0.6998.23(Beta).zip

    Web开发:ABP框架4-DDD四层架构的详解

    Web开发:ABP框架4-DDD四层架构的详解

    chromedriver-linux64-135.0.7029.0(Canary).zip

    chromedriver-linux64-135.0.7029.0(Canary).zip

    (参考项目)MATLAB人脸门禁系统.zip

    实现人脸识别的考勤门禁系统可以分为以下步骤: 1. 采集人脸图像数据集:首先需要采集员工的人脸图像数据集,包括正面、侧面等多个角度的图像。可以使用MATLAB中的图像采集工具或者第三方库进行采集。 2. 预处理人脸图像数据:对采集到的人脸图像数据进行预处理,包括人脸检测、人脸对齐、人脸裁剪等操作。MATLAB提供了相关的图像处理工具箱,可以用于实现这些处理步骤。 3. 特征提取与特征匹配:使用人脸识别算法提取人脸图像的特征,比如使用人脸识别中常用的特征提取算法如Eigenfaces、Fisherfaces或者基于深度学习的算法。然后将员工的人脸数据与数据库中的人脸数据进行匹配,判断是否为注册员工。 4. 考勤记录与门禁控制:如果人脸匹配成功,系统可以记录员工的考勤时间,并且控制门禁系统进行开启。MATLAB可以与外部设备进行通信,实现门禁控制以及考勤记录功能。

    rdtyfv、ijij

    yugy

    企业IT治理体系规划.pptx

    企业IT治理体系规划.pptx

    基于Nutz、SSH、SSM的新闻管理系统.zip(毕设&课设&实训&大作业&竞赛&项目)

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

    基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,MATLAB代码:基于多目标粒子群算法冷热电联供综合能源系统运行

    基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,基于多目标粒子群算法的冷热电联供综合能源系统优化调度与运行策略分析,MATLAB代码:基于多目标粒子群算法冷热电联供综合能源系统运行优化 关键词:综合能源 冷热电三联供 粒子群算法 多目标优化 参考文档:《基于多目标算法的冷热电联供型综合能源系统运行优化》 仿真平台:MATLAB 平台采用粒子群实现求解 优势:代码注释详实,适合参考学习,非目前烂大街的版本,程序非常精品,请仔细辨识 主要内容:代码构建了含冷、热、电负荷的冷热电联供型综合能源系统优化调度模型,考虑了燃气轮机、电制冷机、锅炉以及风光机组等资源,并且考虑与上级电网的购电交易,综合考虑了用户购电购热冷量的成本、CCHP收益以及成本等各种因素,从而实现CCHP系统的经济运行,求解采用的是MOPSO算法(多目标粒子群算法),求解效果极佳,具体可以看图 ,核心关键词: 综合能源系统; 冷热电三联供; 粒子群算法; 多目标优化; MOPSO算法; 优化调度模型; 燃气轮机; 电制冷机; 锅炉; 风光机组; 上级电网购售电交易。,基于多目标粒子群算法的CCHP综合

    DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发串口通信方案,DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发实现串口通信,DSP28379D串口升

    DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发串口通信方案,DSP28379D串口升级方案:单核双核升级与Boot优化,C#上位机开发实现串口通信,DSP28379D串口升级方案 单核双核升级,boot升级,串口方案。 上位机用c#开发。 ,DSP28379D; 串口升级方案; 单核双核升级; boot升级; 上位机C#开发,DSP28379D串口双核升级方案:Boot串口升级技术使用C#上位机开发

    基于ASP.NET MVC+三层架构和EntityFramework的微博门户网站项目.zip(毕设&课设&实训&大作业&竞赛&项目)

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

    基于PLC的双层自动门控制:光电传感触发,有序开关与延时功能实现,附程序、画面及参考文档 ,基于PLC的双层自动门控制系统:精准控制,保障无尘环境;门间联动,智能安防新体验 ,基于plc的双层自动门控

    基于PLC的双层自动门控制:光电传感触发,有序开关与延时功能实现,附程序、画面及参考文档。,基于PLC的双层自动门控制系统:精准控制,保障无尘环境;门间联动,智能安防新体验。,基于plc的双层自动门控制系统,全部采用博途仿真完成,提供程序,画面,参考文档,详情见图。 实现功能(详见上方演示视频): ① 某房间要求尽可能地保持无尘,在通道上设置了两道电动门,门1和门2,可通过光电传感器自动完成门的打开和关闭。 门1和门2 不能同时打开。 ② 第 1 道门(根据出入方向不同,可能是门 1 或门 2),是由在通道外的开门者通过按开门按钮打开的,而第 2 道门(根据出入方向不同,可能是门 1 或门 2 )则是在打开的第 1 道门关闭后自动地打开的(也可以由通道内的人按开门按钮来打开第2 道门)。 这两道门都是在门开后,经过 3s 的延时而自动关闭的。 ③ 在门关闭期间,如果对应的光电传感器的信号被遮断,则门立即自动打开。 如果在门外或者在门内的开门者按对应的开门按钮时,立即打开。 ④ 出于安全方面的考虑,如果在通道内的某个人经过光电传感器时,对应的门已经打开,则通道外的开门者可以不按开门按钮。

    黑马程序员Java品达通用权限项目,基于SpringCloud SpringBoot 的微服务框架的权限管理解决方案.zip

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

    DeepSeek+DeepResearch-让科研像聊天一样简单

    DeepSeek+DeepResearch——让科研像聊天一样简单 (1)DeepSeek如何做数据分析? (2)DeepSeek如何分析文件内容? (3)DeepSeek如何进行数据挖掘? (4)DeepSeek如何进行科学研究? (5)DeepSeek如何写综述? (6)DeepSeek如何进行数据可视化? (7)DeepSeek如何写作润色? (8)DeepSeek如何中英文互译? (9)DeepSeek如何做降重? (10)DeepSeek论文参考文献指令 (11)DeepSeek基础知识。

    基于springboot+uniapp实现的蛋糕商城小程序.zip(毕设&课设&实训&大作业&竞赛&项目)

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

    jdepend-demo-2.9.1-10.el7.x64-86.rpm.tar.gz

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

    关爱儿童公益网站 web 项目.zip

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

    MATLAB实现WOA-LSTM鲸鱼算法优化长短期记忆网络数据分类预测(含模型描述及示例代码)

    内容概要:本文档详细介绍了如何利用 MATLAB 实现鲸鱼优化算法 (WOA) 和长短期记忆网络 (LSTM) 相结合的技术——WOA-LSTM,在数据分类和预测领域的应用。文章首先概述了LSTM在网络训练中超参数依赖的问题以及WOA作为一种新颖的全局优化算法的优势。接着阐述了该项目的研究背景、目的及其重要意义,并深入讨论了项目面临的六大主要挑战,从模型优化到超参数空间管理。文档特别强调WOA-LSTM融合所带来的性能提升、降低计算复杂度的能力及其实现自动化的超参数优化流程。除此之外,文中展示了模型的应用广泛性,覆盖了从金融市场的股票预测到智能制造业的各种实际场景,并提供了具体的模型架构细节和代码实例,以帮助理解模型的工作原理和技术要点。 适合人群:具有一定编程技能的研究人员、工程师和科学家们,尤其是对深度学习技术和机器学习感兴趣的专业人士。 使用场景及目标:该文档的目标是向用户传授使用MATLAB实现WOA-LSTM进行复杂数据分类和预测的方法论,旨在指导读者理解和掌握如何利用WOA进行超参数寻优,从而改善LSTM网络性能。 其他说明:通过阅读这份文档,使用者不仅能够获得有关WOA-LSTM技术的具体实现方式的知识,而且还可以获取关于项目规划和实际部署过程中的宝贵经验。

    tomcat安装及配置教程.md

    tomcat安装及配置教程.md

    **MATLAB下微电网两阶段鲁棒优化经济调度策略:基于CCG算法与min-max-min结构求解**,MATLAB微电网两阶段鲁棒优化经济调度程序:构建min-max-min结构模型,实现恶劣场景下

    **MATLAB下微电网两阶段鲁棒优化经济调度策略:基于CCG算法与min-max-min结构求解**,MATLAB微电网两阶段鲁棒优化经济调度程序:构建min-max-min结构模型,实现恶劣场景下的低成本调度,灵活调整调度保守性,利用列约束生成算法求解,MATLAB代码:微电网两阶段鲁棒优化经济调度程序 关键词:微网优化调度 两阶段鲁棒 CCG算法 经济调度 参考文档:《微电网两阶段鲁棒优化经济调度方法》 仿真平台:MATLAB YALMIP+CPLEX 优势:代码注释详实,出图效果非常好(具体看图),非目前烂大街版本,请仔细辨识 主要内容:构建了微网两阶段鲁棒调度模型,建立了min-max-min 结构的两阶段鲁棒优化模型,可得到最恶劣场景下运行成本最低的调度方案。 模型中考虑了储能、需求侧负荷及可控分布式电源等的运行约束和协调控制,并引入了不确定性调节参数,可灵活调整调度方案的保守性。 基于列约束生成算法和强对偶理论,可将原问题分解为具有混合整数线性特征的主问题和子问题进行交替求解,从而得到原问题的最优解。 最终通过仿真分析验证了所建模型和求解算法的有效性,具体内容可自行查

Global site tag (gtag.js) - Google Analytics