day54_电力项目_webservice改造&报表导出基础

day48_电力系统框架搭建 项目第一天(项目框架)1:项目介绍 参考:《项目分析笔记》和【文档】中的《国家电力系统技术点汇总(简历使用).doc》2:项目框架(SSH) 第一步:创建数据库(格式:UTF-8) 创建表: 第二步:创建项目(格式:UTF-8) 导入jar包(SSH) 第三步:持久层 (1)在cn.itcast.elec.domain中创建ElecText.javapublic class ElecT 阅读详情

项目第七天(webservice+二级缓存+导出设置)

1:使用webservice发布系统元数据,分公司调用的过程(axis2)

需求:
这里写图片描述

操作步骤:详情请看【技术资料\webservice远程技术\axis的jar包】中的《axis发布webservice(使用eclipse的插件生成服务端和客户端.doc》
这里写图片描述

实质上分三步操作:
创建一个服务器端(电力系统),和一个客户端(人员系统)
第一步:使用服务器端提供的接口,生成.wsdl文件
第二步:使用.wsdl文件,在电力系统中生成服务器端的代码
第三步:使用.wsdl文件
http://localhost:8080/itcast0306elec/services/IWebSystemDDLService?wsdl
生成客户端(人员系统)的代码

优化:
客户端使用webservice不要每次都去从远程数据访问,而是在web容器启动的时候(使用监听,servlet,filter)从远程系统中加载一次数据,并将数据放置到application对象,每次使用的时候只需要从application对象中获取即可。

2:hibernate的二级缓存(cache)

优点:对应查询结果相同的数据,可以减少频繁检索数据库的操作。

分析:
项目中使用数据字典的时候,经常会遇见
* 使用数据类型和数据项的编号,获取数据项的值
* 使用数据类型和数据项的值,获取数据项的编号
* 使用数据类型,加载对应数据类型的下的集合
*
解决方案:
使用hibernate的二级缓存优化。
二级缓存中存放的数据结构
这里写图片描述

这里写图片描述

二级缓存整合项目:

第一步:导入jar包:
需要引入三个jar包
在hibernate下能找到
hibernate-distribution-3.5.6-Final\lib\optional\ehcache\ehcache-1.5.0.jar
在srping下能找到
..\lib\concurrent\backport-util-concurrent.jar
..\lib\jakarta-commons\commons-logging.jar

第二步:在hibernate.cfg.xml中添加配置:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 开启二级缓存 -->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <!-- 提供二级缓存的供应商 -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
        <!-- 启用查询缓存 -->
        <property name="hibernate.cache.use_query_cache">true</property>

        <!-- 加载映射文件 -->
        <mapping resource="cn/itcast/elec/domain/ElecSystemDDL.hbm.xml"/>
        <!-- 指定使用二级缓存的类 放在maping下面 -->
        <!-- 配置类级别的二级缓存 -->
        <class-cache usage="read-write" class="cn.itcast.elec.domain.ElecSystemDDL"/>
    </session-factory>
</hibernate-configuration>

第三步:在DAO中执行的hql语句的时候,调用setCacheable(true),例如:


public List<T> findCollectionByConditionNoPageWithCache(String condition,
            final Object[] params, Map<String, String> orderby) {
        String hql = "SELECT o FROM "+entityClass.getSimpleName()+" o WHERE 1=1";
        String orderByHql = this.initOrderByHql(orderby);
        final String finalHql = hql + condition + orderByHql;
        //执行hql语句
        /**方式三*/
        List<T> list = this.getHibernateTemplate().execute(new HibernateCallback() {

            public Object doInHibernate(Session session)
                    throws HibernateException, SQLException {
                Query query = session.createQuery(finalHql);
                if(params!=null && params.length>0){
                    for(int i=0;i<params.length;i++){
                        query.setParameter(i, params[i]);
                    }
                }
                query.setCacheable(true);
                return query.list();
            }
        });
        return list;
    }

3:sql语句的联合查询

项目用使用sql语句的联合查询
这里写图片描述

显示的结果:
输出的结果是:List中存放Object[]数组对象,将List中的对象输出到页面上。
这里写图片描述

Sql语句的联合查询应用(标量查询):
以上功能可以实现步骤:
ElecUserAction类


public String home(){
    List<ElecSystemDDL> jctList = elecSystemDDLService.findSystemDDLListByKeyword("所属单位");
    request.setAttribute("jctList", jctList);
    List<ElecUser> userList = elecUserService.findUserListByConditionWithSql(elecUser); 
    request.setAttribute("userList", userList);
    return "home";
}

ElecUserService类


public List<ElecUser> findUserListByConditionWithSql(ElecUser elecUser) {
    /**方案二:使用sql语句+标量查询*/
    //查询条件
    String condition = "";
    List<Object> paramsList = new ArrayList<Object>();
    //用户名
    String userName = elecUser.getUserName();
    if(StringUtils.isNotBlank(userName)){
        condition += " and a.userName like ?";
        paramsList.add("%"+userName+"%");
    }
    //所属单位
    if(StringUtils.isNotBlank(elecUser.getJctID())){
        condition += " and a.jctID = ?";
        paramsList.add(elecUser.getJctID());
    }
    //入职开始时间
    if(elecUser.getOnDutyDateBegin()!=null){
        condition += " and a.onDutyDate >= ?";
        paramsList.add(elecUser.getOnDutyDateBegin());
    }
    //入职结束时间
    if(elecUser.getOnDutyDateEnd()!=null){
        condition += " and a.onDutyDate <= ?";
        paramsList.add(elecUser.getOnDutyDateEnd());
    }
    Object [] params = paramsList.toArray();
    //排序:按照入职时间升序排列
    Map<String, String> orderby = new LinkedHashMap<String, String>();
    orderby.put("a.onDutyDate", "asc");
    List<ElecUser> list = elecUserDao.findCollectionByConditionNoPageWithSql(condition, params, orderby);
    return list;
}

ElecUserDaoImpl类


public List<ElecUser> findCollectionByConditionNoPageWithSql(
            String condition, final Object[] params, Map<String, String> orderby) {
    String sql = "select a.userID as userID, a.logonName as logonName,a.userName as userName,a.contactTel as contactTel,a.onDutyDate as onDutyDate," +
" b.ddlName as sexID,c.ddlName as postID,d.ddlName as jctID,e.ddlName as isDuty" +
" from elec_user a" +
" inner join elec_systemddl b on a.sexID = b.ddlCode And b.keyword='性别'" + 
" inner join elec_systemddl c on a.postID = c.ddlCode And c.keyword='职位'" +
" inner join elec_systemddl d on a.jctID = d.ddlCode And d.keyword='所属单位'" + " inner join elec_systemddl e on a.isDuty = e.ddlCode And e.keyword='是否在职'";
    String orderbysql = this.orderbyHql(orderby);
    final String finalSql = sql + condition + orderbysql;
    List<Object[]> list = this.getHibernateTemplate().execute(new HibernateCallback() {

        public Object doInHibernate(Session session)
                throws HibernateException, SQLException {
            SQLQuery query = session.createSQLQuery(finalSql)
                        .addScalar("userID",Hibernate.STRING)
                        .addScalar("logonName", Hibernate.STRING)
                        .addScalar("userName", Hibernate.STRING)
                        .addScalar("contactTel", Hibernate.STRING)
                        .addScalar("onDutyDate", Hibernate.DATE)
                        .addScalar("sexID", Hibernate.STRING)
                        .addScalar("postID", Hibernate.STRING)
                        .addScalar("jctID", Hibernate.STRING)
                        .addScalar("isDuty", Hibernate.STRING);
            if(params!=null && params.length>0){
                for(int i=0;i<params.length;i++){
                    query.setParameter(i, params[i]);
                }
            }
            return query.list();
        }
    });

//将list<Object[]>转化成list[ElecUser]      
    List<ElecUser> userList = new ArrayList<ElecUser>();
    if(list!=null && list.size()>0){
        for(Object [] o:list){
            ElecUser elecUser = new ElecUser();
            elecUser.setUserID(o[0]!=null?o[0].toString():"");
            elecUser.setLogonName(o[1]!=null?o[1].toString():"");
            elecUser.setUserName(o[2]!=null?o[2].toString():"");
            elecUser.setContactTel(o[3]!=null?o[3].toString():"");
            elecUser.setOnDutyDate((Date)o[4]);
            elecUser.setSexID(o[5]!=null?o[5].toString():"");
            elecUser.setPostID(o[6]!=null?o[6].toString():"");
            elecUser.setJctID(o[7]!=null?o[7].toString():"");
            elecUser.setIsDuty(o[8]!=null?o[8].toString():"");
            userList.add(elecUser);
        }
    }   
    return userList;
}

4:导出设置

(1)需要的表
这里写图片描述

(2)需求分析
按照导出字段列表的内容,动态的导出excel文档
这里写图片描述

(3)数据库存放的方式
这里写图片描述

注意:
这里写图片描述

操作:
这里写图片描述

(4)掌握js的写法(标签的左右移动)
项目中经常会遇到标签左右移动功能:
页面效果:
这里写图片描述
Js代码:


function Add() {
       $("#colname1 option:selected").appendTo($("#colname2"));     
  }

  function Remove() {
       $("#colname2 option:selected").appendTo($("#colname1")); 
  }


  function upcol() {
       //获取选中的右侧option元素
       var rightcol = $("#colname2 option:selected"); 
       //option的第一个元素无法上移,rightcol.get(0)表示选中的option对象,rightcol.get(0).index表示option对象的位置索引,从0开始
       if(rightcol.get(0).index!=0){  
            rightcol.each(function(){  
                $(this).prev().before($(this));  //在当前选中对象的前面插入该对象
                //$(this).insertBefore($(this).prev());//等同于
            });  
       }    
  }
  function downcol() {
       //选择所有的对象
       var allrightcol = $("#colname2 option");  
       //选择被选中的对象
       var rightcol = $("#colname2 option:selected");  
       //option的最后一个元素无法下移
       if(rightcol.get(rightcol.length-1).index!=allrightcol.length-1){  
            //循环选中的对象
            for(i=rightcol.length-1;i>=0;i--){  
                //获取选中的对象
                var item = $(rightcol.get(i));  
                item.insertAfter(item.next());  //将选中的对象插入到下一个对象的后面
                //item.next().after(item);//等同于
            }  
      } 
  }  

Jsp代码:


<td width="30%" rowspan="4">
        <s:select list="#request.nomap" name="colname1" id="colname1"
                             size="15" multiple="true"
                             cssStyle="width:200px"
    ondblclick="JavaScript:Add('colname1','colname2','colname')">
       </s:select>
</td> 
<td width="15%"></td>
<td width="35%" rowspan="4" id="colnameDiv">
       <s:select list="#request.map" name="colname2" id="colname2"
                             size="15" multiple="true"
                             cssStyle="width:200px"
ondblclick="JavaScript:Remove('colname1','colname2','colname')">
       </s:select>
</td>  

在使用标签实现左右移动的时候,可以使用隐藏域的方式从页面中传递值,这样的好处是:不仅可以传递<select>标签(<option value=”stationRun”>)value中的属性值,也可以传递标签(<option>站点运行情况</option>)option中的文本值。大家要作为一种设计方式要记住。

5:需要掌握的知识点

重点:导出设置的开发,sql语句联合查询
了解知识:webservice(axis2)
二级缓存(ehcache的查询缓存)

day65_activiti Activiti第三天 采购流程监控 流程变量 连线分支第三天:采购流程监控:(重点) 进行采购业务流程的监控: 查询当前正在运行的流程 实现动态图(在流程定义图上标出当前结点的位置,使用红色的框) 查询结束的流程 查询某个流程下历史任务(从流程开始运行到当前所经历的所有任务) 查询某个用户所办理的历史任务流程变量:(重点) Global全局变量(掌握 阅读详情

相关推荐

day51_电力系统_用户管理

项目第四天(用户管理)1:需要的表这里一个用户对应多个用户职称附件,所有用户表和用户职称附件表是一个一对多的关系。2:项目中配置hibernate一对多的关系一对一端 (1)ElecUser.java (2)ElecUser.hbm.xml 多的一端(3)ElecUserFile.java (4)ElecUserFile.hbm.xml 3:jquery的ajax实现二级联动(1)页面

CSDN_AF的博客 1599

通过WebService返回数据的四种方法比较

在使用WebService进行远程数据操作时,细心的你会发现WebServices的性能特别的慢,当然也曾听见很多网友也如此如何如何。说实话,WebServices的确比调用本地数据要慢一些,可究竟有多慢?真的如网友们说的那么难以忍受吗?我个人感觉,多半原因在处理的方式上。让我们亲自编写测试代码,来证明这一切吧。文章由我参考一网友的写法来测试的,因此难免会参杂个人主观因素,如你有新的想法或建议,还

chenxiaoqiang的专栏 2万+

day52_电力系统_角色管理

项目第五天(角色管理)1:用户、角色、权限的设计所以项目页面的设计:使用角色查找权限和用户: 2:需要的表3:项目中配置hibernate多对多的关系(1)用户和角色的关系:使用hibernate ElecUser.java ElecUser.hbm.xml ElecRole.java ElecRole.hbm.xml (2)角色和权限的关系:不使用hibernate 创建角色

CSDN_AF的博客 1462

SSH报错:org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select o from User o where 1=1

Struts Problem Report Struts has detected an unhandled exception:  Messages: 1.User is not mapped [select o from User o where 1=1 order by o.id asc] 2.User is not mapped [select o from User o

u013456370的专栏 3562

day66_activiti_4

Activiti 第四天 组任务 网关课程安排:组任务: Candidate-user 候选人 Candidate-group 候选组(重点)网关(重点): ExclusiveGateway 排他网关 parallelGateway 并行网关 InclusiveGateway 包含网关综合案例(重点) 1 复习采购流程监控查询(常用,重点) 当前流程

CSDN_AF的博客 2785

day64_activiti

Activiti第二天 流程实例、个人任务课程安排:Api: 流程实例: 流程实例是什么? 启动流程实例的方法(掌握) 两种方法,第二种方法在企业开发常用(涉及和业务系统整合) 查询流程实例(掌握) 查询结果如何和业务整合。 流程实例的暂停和激活(了解) 个人任务: 个人任务分配方法。(掌握) 三种分配方法,以第二种(UEL表达

CSDN_AF的博客 2689

day58_lucene详细

1.全文检索基础1.1.我们身边的搜索功能1.Windows系统中的有搜索功能:打开“我的电脑”,按“F3”就可以使用查找的功能,查找指定的文件或文件夹。搜索的范围是整个电脑中的文件资源。 2.Eclipse中的帮助子系统:点击HelpHelp Contents,可以查找出相关的帮助信息。搜索的范围是Eclipse的所有帮助文件。 3.在BBS、BLOG、新闻等系统中提供的搜索文章的功能,如这里的贴

CSDN_AF的博客 1773

day63_activiti

Activiti四天课:第一天:流程定义、流程部署 Activiti是什么?(掌握) Activiti解决了什么问题?(掌握)流程定义(掌握) 流程定义部署(掌握)第二天:流程实例、个人任务 以完整的业务流程,用activiti实现。 Activiti是如何开发!!!第三天:流程监控、流程变量、连接(流程分支) Activiti深入学习,将案例流程进行完善 第

CSDN_AF的博客 1549

day57_电力项目_图形报表&项目分析

项目第十天(图形报表+项目开发流程)1:Jfreechart报表属于工厂模式:提供ChartFactory类,由ChartFactory类创建各种图形 (1)柱状图:原理: 代码: public static void main(String[] args) { //图形的数据集合 DefaultCategoryDataset dataset = new D

CSDN_AF的博客 1534

day88_shiro_2

shiro第二天 shiro授权 shiro和企业项目整合开发8 复习什么是权限管理? 权限管理是系统的安全范畴,要求必须是合法的用户才可以访问系统(用户认证),且必须具有该 资源的访问权限才可以访问该 资源(授权)。 认证:对用户合法身份的校验,要求必须是合法的用户才可以访问系统。 授权:访问控制,必须具有该 资源的访问权限才可以访问该 资源。权限模型:标准权限数据模型包括 : 用户、 角色

CSDN_AF的博客 1530

day56_电力项目_POI导出JXL导入

项目第九天(分页+报表)1:分页原理分析: userIndex.jsp userList.jsp 原理: pub.js(dom对象的ajax封装) 1:在userIndex.jsp中存在2个Form表单(Form1和Form2) 2:传递表单Form1中的元素作为参数传递给服务器的参数,在服务器端进行处理,将处理后的结果(即分页后的结果)显示在userList.jsp中 3:将user

CSDN_AF的博客 1523

day01_html&css

HTML Eclipse:没有插件.(自己装)(免费) MyEclipse:包含大量插件.(收费)HTML概念HTML==> hyper text mark-up language==>超文本标记语言 超文本: 1.表达能力优于普通文本.声音 .图形等.. 2.超链接 标记语言:标记构成的.(HTML XML XHTML) HTML是干什么的? 1.网页. 2.

CSDN_AF的博客 1474

day74_mongoDB

MongoDB1.nosql1.1NoSql简介NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型的数据库 。是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。 关系型数据库中的表都是存储一些结构化的数据,每条记录的字段的组成

CSDN_AF的博客 1453

day61_mybatis

Mybatis 第一天课堂笔记Mybatis课程安排:第一天: Jdbc编程中的问题? Mybatis的框架原理(重点) Mybatis的第一个程序: 实现用户信息的增、删、改、查。 Mybatis如何解决jdbc编程的问题。 与hibernate不同。mybatis开发dao两种方法:(重点) 原始的dao开发方法(接口和接口实现) Mapper动态代码方法Mybatis的配置文件

CSDN_AF的博客 1433

多目标进化算法(MOEA)来处理动态多目标优化问题(DMOPs)Matlab代码.rar

多目标进化算法(MOEA)来处理动态多目标优化问题(DMOPs)Matlab代码.rar

【有功-无功协调优化】基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化研究(Matlab代码实现)

内容概要:本文围绕基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化问题展开研究,旨在通过智能优化算法有效降低网络损耗、提升电压质量并增强配电系统的运行效率。研究系统地介绍了小生境粒子群算法的改进策略,构建了包含功率平衡、电压安全、设备容量等多重约束的多目标优化模型,并采用IEEE标准测试系统进行仿真验证,充分证明了该方法在处理多目标、多约束优化问题上的优越性能。全文涵盖从数学建模、算法设计、约束处理到多目标折衷解选择的完整流程,并配套提供了完整的Matlab代码实现,便于读者复现结果与进行二次开发。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事电力系统优化、智能算法研究或相关领域工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决配电网中有功与无功功率的协同优化问题,实现节能降耗与电压稳定;②学习并掌握多目标粒子群算法及其小生境改进策略在电力系统中的具体应用与实现细节;③通过Matlab代码进行仿真,加深对智能优化算法在工程实践中应用的理解,提升科研与工程实践能力。; 阅读建议:此资源以理论分析与代码实现紧密结合的方式呈现,建议读者在深入理解算法原理和模型构建的基础上,结合所提供的Matlab代码进行仿真实验,重点关注参数设置、收敛性分析与结果可视化等关键环节,从而实现从理论认知到实践验证的完整闭环。

【图论聚类算法】一种图论方法用于非参数聚类分析(Matlab代码实现)

内容概要:本文详细介绍了一种基于图论的非参数聚类分析方法,并提供了完整的Matlab代码实现。该方法通过构建数据样本间的相似性图,利用图论中的图划分技术实现聚类,能够有效处理无需预设簇数量的复杂数据结构,具有良好的适应性与鲁棒性。文中系统阐述了算法的核心原理、关键步骤及具体实现流程,并通过实验验证了其在实际应用中的有效性与优越性。; 适合人群:具备一定数学基础和Matlab编程能力,从事数据分析、模式识别或机器学习相关研究的科研人员及研究生。; 使用场景及目标:①解决传统聚类算法需预先设定簇数的局限性;②应用于存在复杂结构或非球形分布的数据集的无监督分类任务,如生物信息学、社交网络分析、图像分割等领域;③为科研工作者提供一个可复现、可扩展的图论聚类算法实现范例,促进算法的二次开发与改进。; 阅读建议:建议读者结合Matlab代码逐行理解算法实现细节,动手在不同类型的数据集上运行程序,以深入掌握图论聚类的内在机制,并鼓励在此基础上进行算法优化与性能对比研究。

上一篇: day53_电力系统_ztree动态生成&权限控制
下一篇: day55_电力项目_lucene在检索中的应用
csdn_AF
博客等级 码龄9年 161粉丝 122原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值