`
liveHappy
  • 浏览: 82775 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

struts2 批量提交 多条插入

阅读更多
这个是在前两天做项目的时候 , 遇到的问题 。用strust2+ibatis+mysql做的。直接用的action 中一个很普通的循环插入。
后来经部长提示,如果数据很多的话,那么对于库的压力,工程的压力,要改进插入的方式。

jsp页面中,可能每一条数据都是一组bean。在页面中存在多个bean组成的一个form表单,然后一次性的把你添的所有的数据都插入到你的数据库中去。首先想到的就是能不能用一个集合去做?答案是当然可以的。要不也不能在这里说了。有人用的map 做的。在这里呢 ,我用的是list 给大家演示吧,也许很多朋友看了将来也能够遇到吧。我的原来的bean中包含了很多个字段在这我就简化一下。

javaBean:

我们在做的时候,要求以dto的形式提交数据(其实用什么都随便的)

public class PersonCareerDto {

 private String name;  //姓名
 private String personId;  //身份证

  ....//省略get , set

}

 

PersonCareerAction:

public class PersonCareerRegisterAction extends ActionSupport{

    private PersonCareerDto dto;
    private List<PersonCareerFormBean> careerList; //用于去接受页面的数据,对应的封装到集合中
    private PersonCareerRegistDao dao;
 
    public PersonCareerRegisterAction() {
      dao = new PersonCareerRegistDao();
    }
 
   @Override
   public String execute() throws Exception {
   dto = new PersonCareerDto();
   List<PersonCareerDto> dtoList;

   //这里是身份证为空的
   if(!"".equals(dto.getPersonId1()) || !"".equals(dto.getPersonId2())){
      if(careerList.size()!=0){
          dao.personCareerRegist(dtoList);
    }
  }
  
  return SUCCESS;
 }

 public List<PersonCareerFormBean> getCareerList() {
  return careerList;
 }

 public void setCareerList(List<PersonCareerFormBean> careerList) {
  this.careerList = careerList;
 }

}

 

PersonCareerRegistDao :

public class PersonCareerRegistDao {

   private SqlMapClient sqlMap;
   private List<PersonCareerDto> careerList;
  
   public PersonCareerRegistDao(){
      sqlMap= IbizIntraManager.getSqlMap();
   }

   public void personCareerRegist(List<PersonCareerDto> dtoList){
    try {
      sqlMap.insert("personCareerRegist",dtoList);
     } catch (Exception e) {
       e.printStackTrace();
     }
   }

} 


最主要的地方就在xml 和 jsp 中了。

sqlMap.xml:

<sqlMap>
    <typeAlias alias="careerDto" type="com.ibizware.ibizintra.person.regist.dto.PersonCareerDto"/>
    
    <insert id="personCareerRegist" parameterClass="java.util.List">
        insert into person_career (person_id, name)
        values 

        <!--

        这个地方是个关键的地方。它是ibatis中带有的一个迭代标签,很方便的用于你要处理多个元素的时候用的。最终我写的这个sql语句正成的时候是:

       insert into (person_id,name) person_career values (personId,name),(personId,name)...

生成一个完成的sql语句,一次执行完插入所有的数据。这个是mysql自己本身的一个插入多条的语法。

下面这个迭代,有几个属性,conjunction 是你要以什么作为分割,还有open 是以什么开始,close属性是以什么结束。property 是你要迭代的变量。这里我只写了一个,是有原因的。我开始的时候也写了property 但是找不到所要的list中的元素也就是bean,后来我把它删掉了。就好使了。

         -->
        <iterate conjunction=",">
            (#careerList[].personId#,#careerList[].name#
        </iterate>
    </insert>

</sqlMap>



jsp:

这个就好说了,把对应的属性元素写好就Ok了。但有一点,我下面写的,它们都会自动去匹配到action中声明的list集合中,封装成一个一个对应的bean.

<s:iterator value="careerDtoList" status="stat">
   <tr>
     <td>

       <input name="careerList[<s:property value={#stat.index}'/>].personId" type="text" id="projectPerform" size="17" maxlength="30"/></td>
     <td align="left>

       <input name="careerList[<s:property value='%{#stat.index}'/>].name" type="text" id="partPeriod2" size="4" maxlength="7" ></td>
  </tr>
</s:iterator>




这样就搞定了。
分享到:
评论
1 楼 吴小健 2010-10-31  
唉。看见这些代码都迷糊,谢谢你的鼓励...

相关推荐

    Struts2批量插入

    总的来说,Struts2批量插入涉及到前端表单提交、Action处理、数据库操作等多个环节,理解并熟练掌握这些知识点,能够有效提高开发效率和系统性能。同时,结合源码阅读和工具应用,能进一步提升开发者的专业技能。

    Struts2关于批量提交数据-解决方案

    ### Struts2批量提交数据解决方案 在Web应用开发过程中,特别是在使用Struts2框架时,经常需要处理大量的数据提交操作。这些数据可能来自于用户输入或者是系统内部的数据迁移等场景。对于这种需求,本文档将详细...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    例如,在插入1万条数据时,将这些操作放在同一个SqlSession中,而不是逐一提交,可以显著减少数据库交互次数,从而提升效率。在这个例子中,"不到2秒"完成1万条数据的插入,体现了批处理的高效性。 接下来是事务...

    struts2框架写的增删查改完整例子

    4. **批量修改和删除**:批量操作在企业管理应用中非常常见,这个例子中可能实现了选择多条记录进行统一修改或删除的功能,这通常涉及到前端的选中机制和后端的批处理逻辑。 5. **下拉列表动态加载**:数据库中的...

    Struts批量录入

    在Java编程中,Struts2框架提供了一种批量数据提交的解决方案,这使得开发者能够方便地处理用户在页面上输入的多条记录,并一次性提交到数据库。以下是对这个主题的详细解释: 首先,批量数据提交的关键在于Struts2...

    Struts 1.x中批量封装对象

    这种批量封装的方式大大简化了处理多条记录的流程,避免了编写大量重复的代码。然而,需要注意的是,这种方式在处理大量数据时可能会导致内存压力,因为它会一次性加载所有数据到内存中。因此,对于大数据量的场景,...

    Struts2 Excel导入导出数据

    6. **事务管理**:由于数据库操作可能会涉及到多条记录,因此在导入数据时,使用事务管理可以确保数据的一致性,即使发生错误也能回滚。 7. **异常处理**:捕获并处理可能出现的异常,如文件读写错误、数据库连接...

    增删改查struts入门程序-操作多条记录-回滚

    在“增删改查struts入门程序-操作多条记录-回滚”这个主题中,我们将深入理解如何使用Struts实现对数据库中的多条记录进行基本的CRUD(创建、读取、更新、删除)操作,并且包含事务管理和回滚功能,这对于初学者来说...

    图书查询_struts_cooloyj_图书模糊查询及删除_

    对于删除操作,应确保只有拥有权限的用户才能执行,同时,对于涉及多条记录的操作,比如批量删除,需要考虑事务控制以保证数据一致性。 总结,"图书查询_struts_cooloyj_图书模糊查询及删除_"项目展示了如何利用...

    6.2、框架—其他(12题)1

    - 使用`&lt;foreach&gt;`标签:在XML映射文件中,利用`&lt;foreach&gt;`循环插入多条数据。 - 利用`ExecutorType.BATCH`:创建一个配置为批量操作的SqlSession,对每个对象调用insert方法,最后提交事务。 5. Session机制: ...

    06.2、框架—其他(12题)1

    利用ExecutorType.BATCH执行器,创建SqlSession时指定ExecutorType为BATCH,这样可以将多条SQL语句放入批处理,最后调用commit()提交,如果出现异常则rollback()回滚,确保事务一致性。 6. Session机制: Session...

    jdbc+jsp实现简单员工管理系统.doc

    7. **批量删除**:对于批量删除,通过`request.getParameterValues("chks")`获取用户选中的多个员工ID,然后遍历数组并逐一调用`deleteEmployee()`方法,实现多条记录的删除。 8. **页面跳转**:最后,JSP页面可能...

    JAVA面试题

    通过这种方式,可以在一次数据库连接中执行多条插入语句,大大提高了插入效率。 #### Spring、SpringBoot、SpringMVC的区别 - **Spring**:作为基础框架,提供IoC容器和AOP等功能,是整个Spring家族的核心。 - **...

    导入导出excel优化

    4. **数据库批量插入**:在将Excel数据保存到数据库时,尽量使用批量插入而非一条一条插入,以减少数据库交互次数,提高效率。SSH框架中的Hibernate支持批处理操作,可以设置批处理大小,提高性能。 5. **错误处理...

    J2EE平台的框架Hibernate

    例如,使用Struts2的Action类与Hibernate Session进行交互,实现业务逻辑和数据操作的分离。 总之,Hibernate作为J2EE平台的重要组件,极大地简化了Java应用的数据库操作,提高了开发效率。通过熟练掌握Hibernate,...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题75:批量插入几百万条数据.mp4 │ Java面试题76:有没有使用过redis.mp4 │ Java面试题77:redis的使用场景.mp4 │ Java面试题78:redis存储对象的方式.mp4 │ Java面试题79:redis数据淘汰机制.mp4 │...

Global site tag (gtag.js) - Google Analytics