实例讲解Java批量插入、更新数据

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有。今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库。

前台页面:

<span style="font-size:14px;"><body class="main_body" scroll="no">
<div class="employee_gun_dong">
  <form name="webform" method="post">
      <div class="main_content_bg">
        <div class="main_content_title">
            <div id="baseinfo" onclick="activeTabPanel(1)" style="margin-right:2px;" class="tab1">基本信息</div>
            <div id="semsinfo" onclick="activeTabPanel(2)" style="margin-right:2px;" class="tab1" >页签1</div>
            <div id="changeinfo" onclick="activeTabPanel(3)"style="margin-right:2px;" class="tab1" >页签2</div>
            <div id="familyinfo" onclick="activeTabPanel(4)" style="margin-right:2px;" class="tab1" >页签3</div>
            <div id="changeinfo" onclick="activeTabPanel(5)"style="margin-right:2px;" class="tab1" >页签4</div>
            <div id="familyinfo" onclick="activeTabPanel(6)" style="margin-right:2px;" class="tab1" >页签5</div>
            <div id="familyinfo" onclick="activeTabPanel(7)" style="margin-right:2px;" class="tab2" >页签6</div>
        </div>
      </div> 

      <div class="main_content_bg" id="bankCardDiv">
        <div class="main_middle_bg">
        <div class="main_content_title">信息展示
          <input id="addBank" type="button" value="新增一行" class="modul_button_operate" onclick="addNewRow();" />
        </div>
            <div class="main_table_bg">
            <table id="parttable" width='100%' border='0' cellspacing='1' cellpadding='0' class='content_table_list'>
                <tr>
                  <th class='content_table_number'>序号</th>
                  <th class='content_table_thnowarp'>属性1</th>
                  <th class='content_table_thnowarp'>属性2</th>
                  <th class='content_table_thnowarp'>属性3</th>
                  <th class='content_table_thnowarp'>属性4</th>
                  <th class='content_table_thnowarp'>属性5</th>
                  <th class='content_table_thnowarp'>属性6</th>
                  <th class='content_table_thnowarp'>属性7</th>
                  <th class='content_table_thnowarp'>属性8</th>
                  <th class='content_table_thnowarp'>属性9</th>
                  <th class='content_table_thnowarp'>操作</th>
                </tr>
                <c:if test="${fn:length(personFamilyInfoList) > 0}">
                <c:forEach items="${personFamilyInfoList}" var="personFamilyInfoList" varStatus="st">  

                <tr>
                  <!-- 序号 -->
                  <td class="content_table_number">${st.count}
                    <input type="hidden" name="personFamilyInfoList[${st.count-1}].SGuid" value="${personFamilyInfoList.SGuid}"/>
                    <input type="hidden" name="personFamilyInfoList[${st.count-1}].SPersonGuid" value="${personFamilyInfoList.SPersonGuid}"/>
                    <input type="hidden" name="personFamilyInfoList[${st.count-1}].SUnitGuid" value="${personFamilyInfoList.SUnitGuid }">
                    <input type="hidden" name="personFamilyInfoList[${st.count-1}].isEnable" value="${personFamilyInfoList.isEnable }">
                  </td>
                  <!-- 属性1-->
                  <td class="content_table_td_centernowrap">
                    <input id="sFamilyName${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyName" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyName}">
                  </td>
                  <!-- 属性2-->
                  <td class="content_table_td_centernowrap">
                    <input id="sFamilyIdcardNo${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyIdcardNo" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyIdcardNo}">
                  </td>
                  <!-- 属性3-->
                  <td class="content_table_td_centernowrap">
                    <select id="iFamilySex${st.count-1}" name="personFamilyInfoList[${st.count-1}].IFamilySex">
                      <zw:basedictlist itemCode="<%=Constants.I_PERSON_SEX %>" selectValue="${personFamilyInfoList.IFamilySex}"></zw:basedictlist>
                    </select><font color="red">*</font>
                  </td>
                  <!-- 属性4-->
                  <td class="content_table_td_centernowrap">
                    <select id="sFamilyRelation${st.count-1}" name="personFamilyInfoList[${st.count-1}].SFamilyRelation">
                      <zw:basedictlist itemCode="<%=Constants.S_FAMILY_RELATION %>" selectValue="${personFamilyInfoList.SFamilyRelation}"></zw:basedictlist>
                    </select><font color="red">*</font>
                  </td>
                  <!-- 属性5-->
                  <td class="content_table_td_centernowrap">
                    <input id="sFamilyInsurancePlace${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyInsurancePlace" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyInsurancePlace}">
                  </td>
                  <!-- 属性6-->
                  <td class='content_table_td_centernowrap'>
                    <input id="sFamilyResidencePalce${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyResidencePalce" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyResidencePalce}">
                  </td>
                  <!-- 属性7-->
                  <td class="content_table_td_centernowrap">
                    <input id="sFamilyPhone${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].SFamilyPhone" class="content_content_input" maxlength="20" value="${personFamilyInfoList.SFamilyPhone}">
                  </td>
                  <!-- 属性8-->
                  <td class="content_table_td_centernowrap">
                    <input id="dDentifySucessDate${st.count-1}" type="text" name="personFamilyInfoList[${st.count-1}].DDentifySucessDate" value="${personFamilyInfoList.DDentifySucessDate}" onfocus="WdatePicker()" notnull="true" vdisp="首次参保时间" class="content_content_input" size="18" maxlength="18" style="width:70px;"/>
                    <font color="red">*</font>
                  </td>
                  <!-- 属性9-->
                  <td class="content_table_td_centernowrap">
                    <input id="dDentifyLostDate${st.count-1}" type="text" name="personFamilyInfoList[${st.count - 1}].DDentifyLostDate" value="${personFamilyInfoList.DDentifyLostDate}" onfocus="WdatePicker()" notnull="true" vdisp="首次参保时间" class="content_content_input" size="18" maxlength="18" style="width:70px;"/>
                  </td>
                  <td class='content_table_td_centernowrap'>取消</td>
                </tr> 

                </c:forEach>
                </c:if>
              </table>
          </div>
        </div>
      </div>
      <div class="main_content_bg">
      <div class="main_content_title">
        <table style="width:100%">
          <tr>
            <td width="100%" align="center">
              <input id="btnNextstep" type="button" value="上一步" class="modul_button_operate" onclick="" />
              <input id="btnAdd" type="button" value="保存" class="modul_button_operate" onclick="saveOrUpdate()" />
              <input id="" type="button" value="完成" class="modul_button_operate" onclick="" />
              <input id="btnReturn" type="button" value="返回" class="modul_button_operate" onclick="" />
            </td>
          </tr>
        </table>
      </div>
     </div>
  </form>
</div>
</body></span> 

javascript函数:

<span style="font-family:KaiTi_GB2312;font-size:14px;"><script type="text/javascript">
  $(function(){
    loadCheck();
  }); 

  function loadCheck(){
    var trs = $('#parttable tr').length;
    if(trs == 1){
    addNewRow();
    }
  } 

  //初始变量
  var num = 0;//页面计数变量
  var row = 1;//行增加计数变量
  var index = 2;//List列表计数变量
  function addNewRow(){
    var trNum = $('#parttable tr').length;
    if(trNum>1){
      row = trNum;
      num = trNum - 1;
    }
    var htmlText ='<tr>'
      +'<td class="content_table_number">'+row+'</td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<input id="sFamilyName'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyName" class="content_content_input" maxlength="20"></td>'  

      +'<td class="content_table_td_centernowrap">'
      +'<input id="sFamilyIdcardNo'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyIdcardNo" class="content_content_input" maxlength="20"></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<select id="iFamilySex'+num+'" name="personFamilyInfoList['+num+'].IFamilySex">'
      +'<zw:basedictlist itemCode="2000" selectValue="personFamilyInfoList['+num+'].IFamilySex"></zw:basedictlist>'
      +'</select><font color="red">*</font></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<select id="sFamilyRelation'+num+'" name="personFamilyInfoList['+num+'].SFamilyRelation">'
      +'<zw:basedictlist itemCode="135" selectValue="personFamilyInfoList['+num+'].SFamilyRelation"></zw:basedictlist>'
      +'</select><font color="red">*</font></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<input id="sFamilyInsurancePlace'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyInsurancePlace" class="content_content_input" maxlength="20"></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<input id="sFamilyResidencePalce'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyResidencePalce" class="content_content_input" maxlength="20"></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<input id="sFamilyPhone'+num+'" type="text" name="personFamilyInfoList['+num+'].SFamilyPhone" class="content_content_input" maxlength="20"></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<input id="dDentifySucessDate'+num+'" type="text" name="personFamilyInfoList['+num+'].DDentifySucessDate" onfocus="WdatePicker()" notnull="true" vdisp="首次参保时间" class="content_content_input" size="18" maxlength="18" style="width:70px;"/><font color="red">*</font></td>' 

      +'<td class="content_table_td_centernowrap">'
      +'<input id="dDentifyLostDate'+num+'" type="text" name="personFamilyInfoList['+num+'].DDentifyLostDate" onfocus="WdatePicker()" notnull="true" vdisp="首次参保时间" class="content_content_input" size="18" maxlength="18" style="width:70px;"/></td>'     

      +'<td class="content_table_td_centernowrap">'
      +'<a onclick="delInsuranceInfo(this);">取消</a>'
      +'</td>'
      +'</tr>';
    $("#parttable").append(htmlText);
    num = num + 1;
    row += 1;
  } 

  //删除动态列表
  function delInsuranceInfo(t){
    if(row>0){row=row-1} else{return false;}
    $(t).parent().parent().remove();
  } 

  //保存或修改
  function saveOrUpdate(){
    $.ajax({
      url: "personFamilyInfo_addOrUpdatePersonFamilyInfo_include_json.action",
      type: "POST",
      data: jQuery(document.forms[0]).serializeArray(),
      success: function(resObj) {
        //判断返回值
        if (resObj.trim() == 'true') {
          Ext.MessageBox.alert("提示","保存成功",function(){ 

          });
        }else if(resObj.trim() == 'update'){
          Ext.MessageBox.alert("提示","更新成功",function(){ 

          });
        } else {
          Ext.MessageBox.alert("提示","保存失败");
        }
      }
    });
  }      </span>
<span style="font-family:KaiTi_GB2312;font-size:14px;"></script></span>

后台添加方法:

<span style="font-family:KaiTi_GB2312;font-size:14px;">/**
   * <p>Description: 批量添加多条信息</p>
   * @param personFamilyInfoList 实体列表
   * @return 布尔值,true为添加成功,否则为添加失败
   * @throws Exception
   * @author    : gaoying
   * @update    :
   * @date     : 2015-7-20
   */
  public boolean addPersonFamilyInfo(List<PersonFamilyInfo> personFamilyInfoList) throws Exception{
    boolean bool = false;
    if(personFamilyInfoList.size()>0 && personFamilyInfoList != null){
      for(int i=0; i<personFamilyInfoList.size(); i++){
        String personFamilyID = UUIDHexGenerator.getUUID();
        String sunitGuid = "11111111";
        String spersonGuid = "0000000";
        if(personFamilyInfoList.get(i) != null){
          personFamilyInfoList.get(i).setSGuid(personFamilyID);
          personFamilyInfoList.get(i).setSUnitGuid(sunitGuid);
          personFamilyInfoList.get(i).setSPersonGuid(spersonGuid);
          personFamilyInfoList.get(i).setIsEnable(0);
          personFamilyInfoList.get(i).setDOperateDate(new Date());
          //设置系统的当前时间为生效时间,失效时间置为空
          personFamilyInfoList.get(i).setDDentifySucessDate(new Date());
          personFamilyInfoList.get(i).setDDentifyLostDate(null);
          try {
            String sGuidString = personFamilyInfoService.saveNeedPk(personFamilyInfoList.get(i)).toString();
            if(!"".equals(sGuidString)&&sGuidString.length()>0){
              bool = true;
            }else{
              System.out.println("供养亲属信息表 第"+i+"条信息存储失败!");
              bool = false;
              return bool;
            } 

          } catch (Exception e) {
            e.printStackTrace();
          }
        }
      } 

    }
    return bool;
  }</span>

后台更新方法:

<span style="font-family:KaiTi_GB2312;font-size:14px;">/**
   * <p>Description: 批量更新信息</p>
   * @param personFamilyInfolist 实体列表
   * @param personId 人员id
   * @return 布尔值,true代表更新成功,否则更新失败
   * @throws Exception
   * @author    : gaoying
   * @update    :
   * @date     : 2015-7-20
   */
  public void updatePersonFamilyInfo(List<PersonFamilyInfo> personFamilyInfolist, String personId) throws Exception{
    //根据人员id查询页面有多少条数据
    List<PersonFamilyInfo> oldPersonFamilyInfolist = personFamilyInfoService.getPersonFamilyInfoByPersonId(personId);
    int num = oldPersonFamilyInfolist.size();
    if(personFamilyInfolist != null&&personFamilyInfolist.size() > 0){
      //检查页面的信息是否有修改,然后更新到数据库
      for(int i = 0; i<num; i++){
        try{
          //设置一个布尔值,如果变动字段设置为false,如果不变动则设置为true
          boolean bool = true;
          //判断哪些字段更改过
          if(!oldPersonFamilyInfolist.get(i).getSFamilyName().equals(personFamilyInfolist.get(i).getSFamilyName())){
            bool = false;
          }
          if(!oldPersonFamilyInfolist.get(i).getSFamilyIdcardNo().equals(personFamilyInfolist.get(i).getSFamilyIdcardNo())){
            bool = false;
          }
          if(!oldPersonFamilyInfolist.get(i).getIFamilySex().equals(personFamilyInfolist.get(i).getIFamilySex())){
            bool = false;
          }
          if(!oldPersonFamilyInfolist.get(i).getSFamilyRelation().equals(personFamilyInfolist.get(i).getSFamilyRelation())){
            bool = false;
          }
          if(!oldPersonFamilyInfolist.get(i).getSFamilyInsurancePlace().equals(personFamilyInfolist.get(i).getSFamilyInsurancePlace())){
            bool = false;
          }
          if(!oldPersonFamilyInfolist.get(i).getSFamilyResidencePalce().equals(personFamilyInfolist.get(i).getSFamilyResidencePalce())){
            bool = false;
          }
          if(!oldPersonFamilyInfolist.get(i).getSFamilyPhone().equals(personFamilyInfolist.get(i).getSFamilyPhone())){
            bool = false;
          }
          System.out.println("未更改前时间:"+oldPersonFamilyInfolist.get(i).getDDentifySucessDate().getTime());
          System.out.println("更改后的时间:"+personFamilyInfolist.get(i).getDDentifySucessDate().getTime());
          if(oldPersonFamilyInfolist.get(i).getDDentifySucessDate().getTime() != personFamilyInfolist.get(i).getDDentifySucessDate().getTime()){
            bool = false;
          } 

          if(bool == false){//证明字段更改过
            //更新数据前,要把原来没改动的数据复制一条,添加进数据库,把系统的当前时间设为该条数据的失效时间
            PersonFamilyInfo personFamilyInfo = new PersonFamilyInfo(); 

            BeanUtils.copyProperties(oldPersonFamilyInfolist.get(i), personFamilyInfo);
            System.out.println("该条数据主键:" + personFamilyInfo.getSGuid());
            personFamilyInfo.setSGuid(UUIDHexGenerator.getUUID());
            System.out.println("设置主键:" + personFamilyInfo.getSGuid());
            personFamilyInfo.setDOperateDate(new Date());
            //将当前保存数据库的是否有效置为1:无效
            personFamilyInfo.setIsEnable(1);
            personFamilyInfo.setDDentifyLostDate(new Date());             

            personFamilyInfoService.save(personFamilyInfo); 

            //更新该条数据,把系统的当前时间设为系统的生效时间和操作时间,是否有效设为0:有效,失效时间为空
            personFamilyInfolist.get(i).setIsEnable(0);
            personFamilyInfolist.get(i).setDDentifySucessDate(new Date());
            personFamilyInfolist.get(i).setDOperateDate(new Date());
            personFamilyInfolist.get(i).setDDentifyLostDate(null);
            personFamilyInfoService.merge(personFamilyInfolist.get(i));
          }
        }catch (Exception e) {
          e.printStackTrace();
        }  

      }
    }</span>  

这样,java多字段、多条数据批量添加的例子就完成了,主要要注意前台页面叠加出现多行的js函数和后台的添加和更新方法,用list接收,循环遍历进行添加。除此之外这里我想说一下下面这段代码:

代码如下:

<span style="font-family:KaiTi_GB2312;font-size:14px;">$(function(){ 
    loadCheck(); 
});</span>

它就是如下代码的缩写:

代码如下:

<span style="font-family:KaiTi_GB2312;font-size:14px;"> $(document).ready(function(){ 
        loadCheck(); 
});</span>

其实这个代码和下面的代码是一个意思:

代码如下:

<span style="font-family:KaiTi_GB2312;font-size:14px;">window.onload=function(){ 
       loadCheck(); 
}</span>

这样就不用在body的onload事件里面调用,只需要在js程序段里面编写就可以了。虽然下面的代码可以和上面两个互换,但他们之间又有不同。首先是执行时间不同,$(document).ready在页面框架下载完毕后就执行,而window.onload必须在页面全部加载完毕(包含图片下载)后才能执行。很明显前者的执行效率高于后者。再就是执行数量的不同,$(document).ready可以重复写多个,而且每次执行结果不同;而window.onload尽管可以执行多个,但仅输出最后一个执行结果,无法完成多个结果的输出。

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Java快速批量移动文件的实现方法

    文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现.但是在Java文件的编程实现中,大多是通过复制文件到目的地,再删除所有文件来实现的.这对于小文件来说看不出什么弊端,但是如果移动几个大的文件,则会使操作缓慢并且浪费系统资源.本实例将通过File类的renameTo()方法直接实现文件的快速移动,哪怕是移动几GB的文件也不会需要等待太长时间. 思路分析: 首先是视图层.在这里有个建议,因为在某些控件的事件中,常常会访问其他控件,且控件的事件方法用到的参

  • Java批量修改文件名的实例代码

    复制代码 代码如下: import java.io.*; import java.util.*;public class Test { public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new FileReader("output1.txt"));        List<String> newName = new

  • java文件重命名(文件批量重命名)实例程序代码分享

    首先,查到java里文件重命名的方法为:renameTo(); 我将180张图片放在d:\\backup下,用下面的程序进行重命名: 复制代码 代码如下: public void reName(){        String dir = "D:\\backup\\";        File file = new File(dir);        String fileName[] = file.list();        int number = fileName.length

  • javaweb文件打包批量下载代码

    本文实例为大家分享了javaweb文件打包批量下载,供大家参考,具体内容如下 // 批量下载未批改作业 @RequestMapping(value = "/downloadAllHomework", method = RequestMethod.GET) public void downloadAllHomework(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response, St

  • Java文件批量重命名批量提取特定类型文件

    原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一个一个找出来太麻烦,所以做了第二个功能. 最近刚刚学了Java文件和流的知识,所以正好练练手,这也是自己的第一个exe程序,分享一下哈. (导出jar文件,以及用工具exe4j生成exe文件,这部分省略了哈) 用到的知识: 用到Java中文件,流的知识,以及简单的GUI知识. 功能: 功能一:去除文

  • Java实现文件批量重命名具体实例

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应的文件进行重命名.此外,还可以在重命名模板中添加特殊符号,程序会将这些特殊符号替换成重命名后的文件编号. 思路分析: 1.先看视图层,需要一些JLabel控件分别显示指示用户的信息,三个JTextField控件分别显示所选路径.输入文件名模板即输入扩展名,两个JButton控件分别用来浏览文件夹和开

  • Java实现mybatis批量插入数据到Oracle

    最近项目中遇到一个问题:导入数据到后台并将数据插入到数据库中,导入的数据量有上万条数据,考虑采用批量插入数据的方式:  结合网上资料,写了个小demo,文章末尾附上demo下载地址 1.新建项目:项目目录结构如下图所示,添加相应的jar包 2.新建数据库表:ACCOUNT_INFO CREATE TABLE ACCOUNT_INFO ( "ID" NUMBER(12) NOT NULL , "USERNAME" VARCHAR2(64 BYTE) NULL , &q

  • java实现jdbc批量插入数据

    首先介绍三种JDBC批量插入编程方法,进行比较,具体内容如下 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一:使用PreparedStatement加批量的方法 try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName, pass

  • Java 批量删除html中注释内容的方法

    其实删除html文本中的注释有很多方法,这里就自己随便写了一个处理方法,权当笔记,有需要的同学可以参考. html文本的注释有几个特点: 1. 成对出现,有开始就一定有结束. 2. 注释标签没有嵌套,注释开始标签(以下称为 <!--)下一个一定是其对应的结束标签(以下称为 -->). 3. 一行中可能有多个注释标签对儿. 4. 注释也可以换行. 大致有以下几种情况: 复制代码 代码如下: <html>  <!--This is a head-->  <head&g

  • 实例讲解Java批量插入、更新数据

    Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

  • Mybatis批量插入Oracle数据的方法实例

    目录 基本环境 需求 方案 改进 带自增 id 的批量插入 插入完成之后返回 sessionId 注意事项 总结 Reference 基本环境 语言:Java 8 数据库:Oracle ORM 框架:MyBatis 3.4.5 需求 批量插入数据,数据需要有自增 id.每次插入有一个唯一的 sessionId 来标记这些记录,插入完成之后返回这个 sessionId. 方案 循环插入单条记录,伪代码: int sessionId = dao.querySessionId(); for (Reco

  • 实操MySQL+PostgreSQL批量插入更新insertOrUpdate

    目录 一.百度百科 1.MySQL 2.PostgreSQL 3.PostgreSQL相对于MySQL的优势 二.postgres中insertOrUpdate代码实例 1.创建user表 2.简单的方式实现 3.利用unnest函数实现 4.如果数据已存在,就就什么也不做 三.相关重点函数简介 1.unnest(anyarray) 四.userMapper.xml写法 五.MySQL中insertOrUpdate代码实例 1.建表语句 2.普通方式 3.ON DUPLICATE KEY UPD

  • MyBatis批量插入大量数据(1w以上)

    问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBatis开始报错.项目使用技术:SpringBoot.MyBatis 批量插入碰到的问题: java.lang.StackOverflowError: null 该问题是由于一次性插入数据1w条引起的,具体插入代码如下: userDao.batchInsert(list); <insert id="batchInsert" parameterType="java.util.Li

  • 实例讲解JAVA 适配器模式

    在讲述这个模式之前,我们先看一个案例:中国球员去NBA打篮球 中国球员去NBA打篮球,可是他不懂英语,所以听不懂教练安排的战术,所以现在有三种解决方式 1.球员学会英语.2.教练学会中文.3.请个翻译. 1和2是长久之计,但不能解决迫在眉睫的问题.请个翻译是短暂的更好的选择. 放在软件设计层面上,这就叫做适配器模式.https://www.jb51.net/article/189484.htm 将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以

  • 实例讲解JAVA设计模式之备忘录模式

    在讲述这个模式之前,我们先看一个案例:游戏回档 游戏的某个场景,一游戏角色有生命力.攻击力.防御力等数据,在打Boss前和后会不一样,我们允许玩家如果感觉与Boss决斗的效果不理想,可以让游戏恢复到决斗前.下面是代码: 游戏角色类,用来存储角色的生命力.攻击力.防御力的数据. public class GameRole { private int vit;//生命力 private int atk;//攻击力 private int def;//防御力 //状态显示 public void st

  • 实例讲解Java HashSet

    HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合. HashSet 允许有 null 值. HashSet 是无序的,即不会记录插入的顺序. HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的. 您必须在多线程访问时显式同步对 HashSet 的并发访问. HashSet 实现来 Set 接口. HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类. 基本类型对应的包装类表如下: 基本类型 引用类型

  • 实例讲解Java中的synchronized

    一.使用场景 在负责后台开发的时候,很多时候都是提供接口给前端开发人员去调用,会遇到这样的场景: 需要提供一个领奖接口,每个用户名只能领取一次,我们可以将成功领取的用户在数据库用个标记保存起来.如果这个用户再来领取的时候,查询数据库看该用户是否领取过. 但是问题来了,假设用户手速很快,极短时间内点了两次领奖按钮(前端没有进行控制,我们也不能依赖前端去控制).那么可能掉了两次领奖接口,而且有可能第二次调用的时候查询数据库的时候,第一次领奖还没有执行完成更新领奖标记. 这种场景就可以使用到synch

  • 实例讲解Java 自旋锁

    一直以来不是怎么清楚自旋锁,最近有点时间,好好的学习了一下: 所谓的自旋锁在我的理解就是多个线程在尝试获取锁的时候,其中一个线程获取锁之后,其他的线程都处在一直尝试获取锁的状态,不会阻塞!!!那么什么叫做一直尝试获取锁呢?就是一个循环,比较经典的是AtomicInteger中的一个updateAndGet方法,下图所示(当然也可以直接看unsafe类中的getAndAddInt等类似方法): 我们可以看出在while循环中使用CAS去尝试更新一个变量,如果更新失败,就会一直在这个循环中一直在尝试

  • C#.NET中如何批量插入大量数据到数据库中

    在WEB项目开发过程中有时会碰到批量插入数据到数或者是将EXCEL文件据入到数据库中.为了方便实现可以先将EXCEL导入到GRIDVIEW中然后一次批量插入.实现代码如下: 前台代码 <asp:GridView ID="dgBom" runat="server" AutoGenerateColumns="false" CellPadding="1" CellSpacing="2"> <He

随机推荐