工作笔记struts+mybatis+spring

jsp页面注意表单form id <select name="select_term" id="select_term">
     <option></option>
     <option value="RE_GOODS_CODE">货物编号</option>
     <option value="RE_OLD_CODE">流水号</option>
     <option value="RE_GOODS_NAME">货物名称</option>
   </select>&nbsp;&nbsp;
<input type="text" style="width:100px;" name="text_term" id="text_term" />
&nbsp;少货类型
   <select name="si_type" id="si_type">
     <option></option>
     <option value="4">少货</option>
     <option value="3">串货</option>
     <option value="1">内埠剩货</option>
     <option value="2">外埠剩货</option>
   </select>&nbsp;&nbsp;
js页面
//页面初始化
$(function(){
 // 当窗口大小发生变化时,调整DataGrid的大小
  $(window).resize(function() {
   $(‘#reData‘).datagrid(‘resize‘, {
    width:($(window).width()*0.995),
    height:($(window).height()*0.88)
   });
   widthValue = $(window).width()*0.995;
   heightValue = $(window).height()*0.88;
  });
  $(‘#reData‘).datagrid(‘getPager‘).pagination({
        beforePageText: ‘第‘,//页数文本框前显示的汉字  
        afterPageText: ‘页    共 {pages} 页‘,  
        displayMsg: ‘当前显示 {from} - {to} 条记录   共 {total} 条记录‘
    });
 //查询
function dosubmit(){
 
   //查询参数
   var queryParams = {
   ‘sl_start_time‘:$("#sl_start_time").val(),
   ‘sl_end_time‘:$("#sl_end_time").val(),
   ‘select_term‘:$("#select_term").val(),
   ‘text_term‘:$("#text_term").val(),
   ‘si_type‘:$("#si_type").val(),
   ‘grSendName‘:$("#grSendName").val(),
   ‘grSendCode‘:$("#re_send_code").val(),
   ‘ghSendCode‘:$("#re_send_hcode").val(),
   ‘grArriveName‘:$("#grArriveName").val(),
   ‘ghArriveCode‘:$("#re_arrive_hcode").val(),
   ‘grArriveCode‘:$("#re_arrive_code").val() 
 };
 
 //获得列表数据
 var dataList=$(‘#reData‘).datagrid(‘getData‘);
 
 //判断是否有数据
 if(dataList.total > 0){
  //查询明细
  $(‘#reData‘).datagrid(‘load‘, queryParams);
 }
 else{
  //查询明细
  $(‘#reData‘).datagrid({
      url:"scanLessQuery!select",
      queryParams: queryParams,
  });
 }
 
 $(‘#reData‘).datagrid(‘getPager‘).pagination({
        beforePageText: ‘第‘,//页数文本框前显示的汉字  
        afterPageText: ‘页    共 {pages} 页‘,  
        displayMsg: ‘当前显示 {from} - {to} 条记录   共 {total} 条记录‘
    });
 
    return true;
}
/**
 * 查询条件验证
 * @returns {Boolean}
 */
function checkPage(){
 var startTime = $("#sl_start_time").val().replace(/\-/g, "" );
 var endTime = $("#sl_end_time").val().replace(/\-/g, "" );
 if(parseInt(startTime)>parseInt(endTime)){
  $.messager.alert(‘提示信息‘,‘起始时间不能大于结束时间!‘,‘warning‘);
  return true;
 }
 return false;

机构码
select gr_name,gr_hcode from T_GROUP t order by gr_hcode
机构名称,层次码
//将查询结果给jq中的grid
public String select(){
  ScanLessQuery sg = new ScanLessQuery();
  sg = queryParameter();
        jsonObject = scanLessQueryService.select(sg);
  return "jsonObject";
 }
 //通过jq给属性赋值,把属性值赋给实体类
 private ScanLessQuery queryParameter() {
  ScanLessQuery sg = new ScanLessQuery();
  // 当前页
  intPage = Integer.parseInt((page == null || page == "0") ? "1" : page);
  // 每页显示条数
  number = Integer.parseInt((rows == null || rows == "0") ? "25" : rows);
  // 每页的开始记录 第一页为1 第二页为number +1
  start = (intPage - 1) * number;
  sg.setPage_start(start);
  sg.setPage_end(start + number);
  // 页面查询时间类型判断
  sg.setSl_start_time(sl_start_time);
  sg.setSl_end_time(sl_end_time);
  sg.setGrSendName(grSendName);
  sg.setGrSendCode(grSendCode);
  sg.setGhSendCode(ghSendCode);
  sg.setGrArriveCode(grArriveCode);
  sg.setGrArriveName(grArriveName);
  sg.setGhArriveCode(ghArriveCode);
        sg.setSi_type(si_type);
        sg.setSelect_term(select_term);
  sg.setText_term(text_term);
  return sg;
 }
service中,拼装jsonObject,格式。
 public JSONObject select(ScanLessQuery scanLessQuery) {
  List<ScanLessQuery> result = scanLessQueryDao.select(scanLessQuery);
  int count = scanLessQueryDao.selectCount(scanLessQuery);
  Map<String, Object> jsonMap = new HashMap<String, Object>();
  jsonMap.put("total", count);
  jsonMap.put("rows", result);
  return JSONObject.fromObject(jsonMap);
 }
  dao中通过mybatis将xml和dao关联起来
  public interface ScanLessQueryDao {
 
 /**
  * 查询数据
  * @param scanLessQuery
  * @return
  */
 public List<ScanLessQuery> select(ScanLessQuery scanLessQuery);
 
 /**
  * 查询数据条数
  * @param scanLessQuery
  * @return
  */
 public int selectCount(ScanLessQuery scanLessQuery);
 /**
  * 导出数据
  * @param scanLessQuery
  * @return
  */
 public List<ScanLessQuery> selectForExcel(ScanLessQuery scanLessQuery);
 
}
注意名称是xml中的名称
<mapper namespace="com.strong.cjtransit.dao.scan.ScanLessQueryDao">
 <!-- 查询数据 -->
 <select id="select" resultType="ScanLessQuery" parameterType="ScanLessQuery">
  <![CDATA[
 SELECT RE_GOODS_CODE,
       RE_GOODS_NAME,
       RE_GOODS_COUNT,
       RE_GROUP_NAME,
       RE_TARGETGOODS_NAME,
       SL_TYPE,
       SL_DUTY_GROUP,
       SL_EXCEPTION_COUNT,
       RE_RECEIVE_MAN,
       RE_PAYED_MONEY,
       RE_ARRIVE_PAY,
       RE_MAT_TRAFFIC,
       RE_GETS_GOODS
  FROM (SELECT RE_GOODS_CODE,
               RE_GOODS_NAME,
               RE_GOODS_COUNT,
               RE_GROUP_NAME,
               RE_TARGETGOODS_NAME,
               SL_TYPE,
               SL_DUTY_GROUP,
               SL_EXCEPTION_COUNT,
               RE_RECEIVE_MAN,
               RE_PAYED_MONEY,
               RE_ARRIVE_PAY,
               RE_MAT_TRAFFIC,
               RE_GETS_GOODS,
               ROWNUM AS ROWNO
          FROM (SELECT RE_GOODS_CODE,
                       RE_GOODS_NAME,
                       RE_GOODS_COUNT,
                       (SELECT GR_NAME
                          FROM T_GROUP
                         WHERE GR_CODE = RE_GROUP_CODE) AS RE_GROUP_NAME,
                       (SELECT GR_NAME
                          FROM T_GROUP
                         WHERE GR_CODE = RE_TARGETGROUP_CODE) AS RE_TARGETGOODS_NAME,
                       (CASE SL_TYPE
                         WHEN 1 THEN
                          ‘内埠剩货‘
                         WHEN 2 THEN
                          ‘外埠剩货‘
                         WHEN 3 THEN
                          ‘串货‘
                         WHEN 4 THEN
                          ‘少货‘
                         ELSE
                          ‘‘
                       END) AS SL_TYPE,
                       (SELECT GR_NAME
                          FROM T_GROUP
                         WHERE GR_CODE = SL_DUTY_GROUP) AS SL_DUTY_GROUP,
                       SL_EXCEPTION_COUNT,
                       RE_RECEIVE_MAN,
                       RE_PAYED_MONEY,
                       RE_ARRIVE_PAY,
                       RE_MAT_TRAFFIC,
                       RE_GETS_GOODS
                  FROM T_RECEIVE
                  JOIN T_SCANNING_LESS
                    ON RE_RECEIVE_CODE = SL_RECEIVE_CODE
  WHERE SL_SEND_DATE >= TO_DATE( #{sl_start_time} ,‘YYYY-MM-DD‘) ]]>
      <![CDATA[ AND SL_SEND_DATE < TO_DATE( #{sl_end_time} ,‘YYYY-MM-DD‘)+1
     ]]>
     <!-- 查询条件 -->
  <if test="select_term != ‘‘ and text_term != ‘‘">
    <![CDATA[
     AND ${select_term} LIKE ‘%‘ || #{text_term} || ‘%‘
     ]]>
  </if>
  <!-- 类别不为空 -->
  <if test="si_type!=null and si_type !=‘‘">
   AND SL_TYPE = #{si_type}
  </if>
  <if test="grArriveCode!=null and grArriveCode !=‘‘">
   AND RE_TARGETGROUP_CODE IN (SELECT GR_CODE FROM T_GROUP
   WHERE GR_HCODE LIKE #{ghArriveCode} || ‘%‘)
  </if>
  <if test="grSendCode !=null and grSendCode !=‘‘">
   AND RE_GROUP_CODE IN (SELECT GR_CODE FROM T_GROUP WHERE
   GR_HCODE LIKE #{ghSendCode} || ‘%‘)
  </if>
  ) A
  <![CDATA[
  WHERE ROWNUM <= #{page_end}
  ]]>
  ) B
 <![CDATA[
 WHERE B.ROWNO > #{page_start}
 ]]>
 </select>
 注意daoxml中的oracle 分页查询
  ***需要修改的配置文件***
  在web-info下的class中
  1.mybatis-config.xml
  配置类的别名,注意新建实体类一定要修改此文件
  配置映射,配置daoxml的位置
  2.struts-config配置
   
  <!-- 扫描少货信息查询 -->
  <action name="scanLessQuery" class="scanLessQueryAction">
   <result name="main">/WEB-INF/jsp/scan/scan_less_query.jsp</result>
   <result name="jsonObject" type="json">
     <param name="root">jsonObject</param>
   </result>
   <result name="excel" type="stream"> 
           <param name="contentType">application/vnd.ms-excel</param> 
           <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> 
           <param name="bufferSize">1024</param>
           <param name="inputName">excelFile</param> 
             </result>
   <interceptor-ref name="mydefault" />
  </action>
  配置action 配置result等
  注意class中对应地址在spring中相对应
 3.spring-config起到胶水的作用
 例如:
 <!-- 货物扫描信息查询dao -->
 <bean id="scanGoodsQueryDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="com.strong.cjtransit.dao.scan.ScanGoodsQueryDao"/>
  <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
 </bean>
  <!-- 货物扫描信息查询service -->
 <bean id="scanGoodsQueryService" class="com.strong.cjtransit.service.scan.ScanGoodsQueryService">
  <property name="scanGoodsQueryDao" ref="scanGoodsQueryDao"></property>
 </bean>
  <!-- 货物扫描信息查询Action -->
 <bean id="scanGoodsQueryAction"  class="com.strong.cjtransit.action.scan.ScanGoodsQueryAction" scope ="prototype">
  <property name="scanGoodsQueryService" ref="scanGoodsQueryService"></property>
 </bean> 
 4.applicationContext-default.xml
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/aop
               http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.springframework.org/schema/tx
               http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" >
               
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="locations">
      <list>
       <value>classpath:bonecp.properties</value>
       <value>classpath:report_name_cn.properties</value>
      </list>
     </property>
    </bean>
   
<!-- 配置主库数据源,bonecp连接池配置 -->
  <bean id="dataSource" destroy-method="close" class="com.jolbox.bonecp.BoneCPDataSource">
        <property name="driverClass" value="${bonecp.driverClassName}"/>
        <property name="jdbcUrl" value="${bonecp.url}"/>
        <property name="username" value="${bonecp.username}"/>
        <property name="password" value="${bonecp.password}"/>
        <!-- 检查数据库连接池中空闲连接的间隔时间 -->
        <property name="idleConnectionTestPeriod" value="${bonecp.idleConnectionTestPeriod}"/>

<!--连接池中未使用的链接最大存活时间-->
        <property name="idleMaxAge" value="${bonecp.idleMaxAge}"/>

<!--设置每个分区含有connection最大个数-->
        <property name="maxConnectionsPerPartition" value="${bonecp.maxConnectionsPerPartition}"/>

<!--设置每个分区含有connection最小个数-->
        <property name="minConnectionsPerPartition" value="${bonecp.minConnectionsPerPartition}"/>

<!--设置每个分区数-->
        <property name="partitionCount" value="${bonecp.partitionCount}"/>

<!--设置分区中的connection增长数量-->
        <property name="acquireIncrement" value="${bonecp.acquireIncrement}"/>

<!--设置连接池阀值-->

<property name="poolAvailabilityThreshold" value="${bonecp.poolAvailabilityThreshold}"></property>
        <!--连接时间-->
        <property name="connectionTimeout" value="${bonecp.connectionTimeout}"></property>
    </bean>
   
    <!-- 配置MyBatis -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:MyBatis-Config.xml"></property>
        <property name="dataSource" ref="dataSource" />
    </bean>

<bean id="commonQuery" class="com.strong.cjtransit.entity.common.CommonQuery"/>
 <!-- ========================TransactionManager============================ -->
 <!-- spring 管理事务 -->
 <bean id="myTxManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"></property>
 </bean>
 
 <!-- =======================advice====================================== -->
 <tx:advice id="txAdvice" transaction-manager="myTxManager">
  <!-- 声明事务规则 主库-->
  <tx:attributes>
   <tx:method name="find*" propagation="REQUIRED" read-only="false" />
   <tx:method name="check*" propagation="REQUIRED" read-only="false" />
   <tx:method name="test*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="reg*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
   <tx:method name="*" propagation="SUPPORTS" read-only="false" />
  </tx:attributes>
 </tx:advice>
    <aop:config>
    <aop:pointcut id="canyin" expression="execution(* com.strong.cjtransit.service..*.*(..))"/>
   <aop:advisor advice-ref="txAdvice" pointcut-ref="canyin" />
    </aop:config>
   
</beans>
配置连接池,配置事务,配置spring文件
5.struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
   
<struts> 
 <constant name="struts.i18n.encoding" value="UTF-8" />
 <!-- 设置浏览器是否缓存静态内容 -->
 <constant name="struts.serve.static.browserCache" value="false" />
 <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认为false
 <constant name="struts.configuration.xml.reload" value="true" />-->
 <!-- 打印出更详细的错误信息 -->
 <constant name="struts.devMode" value="true" />

<package name="cjtransit" extends="struts-default,json-default">
 
  <!-- 定义一个拦截器 --> 
  <interceptors> 
   <interceptor name="sessionout"  class="interceptor.SessionIterceptor"></interceptor> 
   <!-- 拦截器栈 -->
   <interceptor-stack name="mydefault">
      <interceptor-ref name="defaultStack" />
      <interceptor-ref name="sessionout"/>
   </interceptor-stack>
  </interceptors> 
  <!-- 定义全局Result -->
  <global-results> 
   <!-- 限制使用系统提示界面 -->
   <result name="none">/WEB-INF/jsp/restricted_use.jsp</result>
   <!-- 跳转到error页面 -->
   <result name="error">/error.jsp</result>
   <!-- 当返回login视图名时,转入/login.jsp页面 -->
   <result name="login">/WEB-INF/jsp/redirect_login.jsp</result>
  </global-results>
       
  </package>
 
 <include file="struts-config/struts-*.xml"></include>
</struts>

时间: 2024-11-14 22:24:02

工作笔记struts+mybatis+spring的相关文章

工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

上文中我们介绍<工作笔记2.软件开发常用工具> 从今天开始本文将教大家如何进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个独立配置:struts2. Hibernate. Spring 2)2个整合:整合Sring和struts2. 整合Spring和Hibernate 3)资源分类 开发包.软件.框架源码,已经共享到百度网盘:http://pan.baidu.com/s/1o6FkbA6 一.3个独立配置 1.Struts2: 1

struts2,hibernate,spring整合笔记(4)--struts与spring的整合

饭要一口一口吃,程序也要一步一步写, 很多看起来很复杂的东西最初都是很简单的 下面要整合struts和spring spring就是我们的管家,原来我们费事费神的问题统统扔给她就好了 先写一个测试方法 package com.hibernate; import static org.junit.Assert.*; import org.hibernate.SessionFactory; import org.junit.Test; import org.springframework.conte

mybatis学习笔记一mybatis结合spring配置

这两天,开始学习mybatis,有点感觉,分享一下,在这里要感谢一号门博客  链接:http://www.yihaomen.com/article/java/426.htm 首先项目示例图给大家看一下: applicationContext.xml类: <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/bea

myBatis+Spring+SpringMVC框架面试题整理

myBatis+Spring+SpringMVC框架面试题整理(一) 2018年09月06日 13:36:01 新新许愿树 阅读数 14034更多 分类专栏: SSM 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41541619/article/details/82459873 目录 ■ SpringMVC 的工作原理 ■ 谈谈你对SpringMVC的理解 ■ SpringMVC

springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题

解决Spring MVC 对AOP不起作用的问题 分类: SpringMVC3x+Spring3x+MyBatis3x myibaits spring J2EE2013-11-21 11:22 640人阅读 评论(1) 收藏 举报 用的是 SSM3的框架 Spring MVC 3.1 + Spring 3.1 + Mybatis3.1第一种情况:Spring MVC 和 Spring 整合的时候,SpringMVC的springmvc.xml文件中 配置扫描包,不要包含 service的注解,S

struts + Hibernate + Spring WEB框架

struts:负责显示层,是一个完美的MVC实现,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写. Hibernate:创建一系列的持久化类,将每个类的属性与数据库表的属性一一对应. Spring:依赖注射和控制反转.只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里.所有类之间的这种依赖关系就完全通过配置文件的方式替代了. Java Web应用程序架构:Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层.

Struts+Hibernate+Spring面试题合集及答案

Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 1.2. 什么是Hibernate的并发机制?怎么处理并发问题? 2 1.3. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页? 3 1.4. hibernate的对象的三种持久化状态,并给出解释? 3 1.5. hibernate的三种状态之间

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)

<Spring学习笔记>:Spring.Hibernate.struts2的整合(以例子来慢慢讲解,篇幅较长) 最近在看马士兵老师的关于Spring方面的视频,讲解的挺好的,到了Spring.Hibernate.struts2整合这里,由于是以例子的形式来对Spring+Hibernate+struts2这3大框架进行整合,因此,自己还跟着写代码的过程中,发现还是遇到了很多问题,因此,就记录下. 特此说明:本篇博文完全参考于马士兵老师的<Spring视频教程>. 本篇博文均以如下这

mybatis+spring事务

http://www.mybatis.org/spring/zh/transactions.html 第四章 事务 一个使用 MyBatis-Spring 的主要原因是它允许 MyBatis 参与到 Spring 的事务管理中.而 不是给 MyBatis 创建一个新的特定的事务管理器,MyBatis-Spring 利用了存在于 Spring 中的 DataSourceTransactionManager. 一旦 Spring 的 PlatformTransactionManager 配置好了,你