`

updateByPrimaryKey与updateByPrimaryKeySelective

 
阅读更多

在abator中可生成iBatis的代码。其中,Sql_map中带有的两个函数是:

updateByPrimaryKeySelective

updateByPrimaryKey

前者只是更新新的model中不为空的字段。

后者则会将为空的字段在数据库中置为NULL。

例如:Action

 

[java] view plaincopy
 
  1. Labor labor = new Labor();  
  2. labor.setIdentitycard(identitycard);  
  3. labor.setName(name);  
  4. labor.setDepartmentid(Integer.parseInt("1"));  
  5. labor.setEmployeenumber(Integer.parseInt("1006"));  
  6. labor.setLeadernumberid(Integer.parseInt("1001"));  
  7.   
  8. result = laborAO.doSave(labor, "updateByIdentitycard");  
  9. if (!result.isSuccess()) {  
  10.     return INPUT;  
  11. else {  
  12.     System.out.println("message : insert " + name + " . \n");  
  13.     return SUCCESS;  
  14. }  


如果DAO中使用的是updateByPrimaryKeySelective,则按照不为空的labor值去更新。

 

如果使用updateByPrimaryKey,这在labor中未定义的字段更新后就没有了。

从SQL语句上分析,二者的不同:

 

[html] view plaincopy
 
  1. <update id="updateByPrimaryKeySelective" parameterClass="com.sk.maxdrive.dal.model.Labor" >  
  2.     <!--  
  3.       WARNING - @ibatorgenerated  
  4.       This element is automatically generated by Apache iBATIS Ibator, do not modify.  
  5.       This element was generated on Thu Sep 01 13:55:37 CST 2011.  
  6.     -->  
  7.     update labor  
  8.     <dynamic prepend="set" >  
  9.       <isNotNull prepend="," property="name" >  
  10.         NAME = #name:VARCHAR#  
  11.       </isNotNull>  
  12.       <isNotNull prepend="," property="tagid" >  
  13.         TAGID = #tagid:VARCHAR#  
  14.       </isNotNull>  
  15.       <isNotNull prepend="," property="departmentid" >  
  16.         DEPARTMENTID = #departmentid:INTEGER#  
  17.       </isNotNull>  
  18.       <isNotNull prepend="," property="duty" >  
  19.         DUTY = #duty:VARCHAR#  
  20.       </isNotNull>  
  21.       <isNotNull prepend="," property="employeenumber" >  
  22.         EMPLOYEENUMBER = #employeenumber:INTEGER#  
  23.       </isNotNull>  
  24.       <isNotNull prepend="," property="leadernumberid" >  
  25.         LEADERNUMBERID = #leadernumberid:INTEGER#  
  26.       </isNotNull>  
  27.       <isNotNull prepend="," property="home" >  
  28.         HOME = #home:VARCHAR#  
  29.       </isNotNull>  
  30.       <isNotNull prepend="," property="address" >  
  31.         ADDRESS = #address:VARCHAR#  
  32.       </isNotNull>  
  33.       <isNotNull prepend="," property="emergencynumber" >  
  34.         EMERGENCYNUMBER = #emergencynumber:VARCHAR#  
  35.       </isNotNull>  
  36.       <isNotNull prepend="," property="emergencycontact" >  
  37.         EMERGENCYCONTACT = #emergencycontact:VARCHAR#  
  38.       </isNotNull>  
  39.       <isNotNull prepend="," property="hoursetel" >  
  40.         HOURSETEL = #hoursetel:VARCHAR#  
  41.       </isNotNull>  
  42.       <isNotNull prepend="," property="postcode" >  
  43.         POSTCODE = #postcode:INTEGER#  
  44.       </isNotNull>  
  45.       <isNotNull prepend="," property="cellphone" >  
  46.         CELLPHONE = #cellphone:VARCHAR#  
  47.       </isNotNull>  
  48.       <isNotNull prepend="," property="email" >  
  49.         EMAIL = #email:VARCHAR#  
  50.       </isNotNull>  
  51.       <isNotNull prepend="," property="resume" >  
  52.         RESUME = #resume:VARCHAR#  
  53.       </isNotNull>  
  54.       <isNotNull prepend="," property="employeedate" >  
  55.         EMPLOYEEDATE = #employeedate:VARCHAR#  
  56.       </isNotNull>  
  57.       <isNotNull prepend="," property="headpic" >  
  58.         HEADPIC = #headpic:VARCHAR#  
  59.       </isNotNull>  
  60.       <isNotNull prepend="," property="bankaccount" >  
  61.         BANKACCOUNT = #bankaccount:VARCHAR#  
  62.       </isNotNull>  
  63.     </dynamic>  
  64.     where IDENTITYCARD = #identitycard:VARCHAR#  
  65.   </update>  


一系列的isNull判断

 

 

[html] view plaincopy
 
  1. <update id="updateByPrimaryKey" parameterClass="com.sk.maxdrive.dal.model.Labor" >  
  2.     <!--  
  3.       WARNING - @ibatorgenerated  
  4.       This element is automatically generated by Apache iBATIS Ibator, do not modify.  
  5.       This element was generated on Thu Sep 01 13:55:37 CST 2011.  
  6.     -->  
  7.     update labor  
  8.     set NAME = #name:VARCHAR#,  
  9.       TAGID = #tagid:VARCHAR#,  
  10.       DEPARTMENTID = #departmentid:INTEGER#,  
  11.       DUTY = #duty:VARCHAR#,  
  12.       EMPLOYEENUMBER = #employeenumber:INTEGER#,  
  13.       LEADERNUMBERID = #leadernumberid:INTEGER#,  
  14.       HOME = #home:VARCHAR#,  
  15.       ADDRESS = #address:VARCHAR#,  
  16.       EMERGENCYNUMBER = #emergencynumber:VARCHAR#,  
  17.       EMERGENCYCONTACT = #emergencycontact:VARCHAR#,  
  18.       HOURSETEL = #hoursetel:VARCHAR#,  
  19.       POSTCODE = #postcode:INTEGER#,  
  20.       CELLPHONE = #cellphone:VARCHAR#,  
  21.       EMAIL = #email:VARCHAR#,  
  22.       RESUME = #resume:VARCHAR#,  
  23.       EMPLOYEEDATE = #employeedate:VARCHAR#,  
  24.       HEADPIC = #headpic:VARCHAR#,  
  25.       BANKACCOUNT = #bankaccount:VARCHAR#  
  26.     where IDENTITYCARD = #identitycard:VARCHAR#  
  27.   </update>  


没有判断,直接加载

 

 

分享到:
评论

相关推荐

    带有lombok的可以自定义插件、方法的mybatis自动化代码生成器

    updateByPrimaryKeySelective 按主键更新所选字段 updateByPrimaryKey 按主键更新 selectOne 查询一个 selectList 查询列表 selectAll 查询所有记录 insertBatch 批插入 deleteBatchIds 按多个ID批量删除 ...

    MyBatis Generator + PostgreSQL 逆向工程单独使用包及使用说明.rar

    如果要操作的表没有主键字段,则生成的xml中只有insert,没有select、update、delete,因为这三种操作都与主键有关,如deleteByPrimaryKey(Long id)、selectByPrimaryKey(Long id)、updateByPrimaryKey...

    MySQL一种错误修改语句的做法

    micro-hcnet-website-1_1 | ### The error may involve cn.hcnet2006.blog.hcnetwebsite.mapper.SysArticleMapper.updateByPrimaryKey micro-hcnet-website-1_1 | ### The error occurred while executing an

    乐优商城.xmind

    用来标识实体类中属性与数据表中字段的对应关系 name 定义了被标注字段在数据库表中所对应字段的名称; mapper service Controller 测试 报错500 实体类@table路径写错 新增 Controller @RequestBody ...

    基于matlab实现实现了基于项目的协同过滤代码,MATLAB实现.rar

    基于matlab实现实现了基于项目的协同过滤代码,MATLAB实现.rar

    各地区年末城镇登记失业人员及失业率.xls

    数据来源:中国劳动统计NJ-2023版

    企业固定资产信息管理系统设计与实现.doc

    企业固定资产信息管理系统设计与实现.doc

    node-v11.14.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.9.1-sunos-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v12.10.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于VB实现的学生成绩管理系统(源代码+系统+开题报告+答辩PPT).zip

    【作品名称】:基于VB实现的学生成绩管理系统(源代码+系统+开题报告+答辩PPT) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    银行信贷管理系统设计与实现-(毕业设计)1.docx

    银行信贷管理系统设计与实现-(毕业设计)1.docx

    基于VB实现的银行代扣代发工资系统(源代码+系统+开题报告).zip

    【作品名称】:基于VB实现的银行代扣代发工资系统(源代码+系统+开题报告) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    (更新至2022年)全国镇分年龄、性别的人口数.xls

    数据来源:中国人口与就业统计NJ-2023版

    基于Java的考试管理系统

    java,大学课后作业

    数据更新至2020年分地区发电装机容量增速(风电).xls

    数据来源:中国电力统计NJ-2021版

    基于VB实现的网上餐饮管理系统设计(论文+源代码+开题报告+英文文献).zip

    【作品名称】:基于VB实现的网上餐饮管理系统设计(论文+源代码+开题报告+英文文献) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    基于matlab实现烟花算法进行函数最小-最大值寻优,对十多个测试函数进行了寻优,效果良好,代码附带详细说明.rar

    基于matlab实现烟花算法进行函数最小_最大值寻优,对十多个测试函数进行了寻优,效果良好,代码附带详细说明.rar

    数据更新至2020年分地区单机6000千瓦及以上 水力发电机组分类情况(合计).xls

    数据来源:中国电力统计NJ-2021版

    基于VB实现的商场管理系统设计(源代码+系统).zip

    【作品名称】:基于VB实现的商场管理系统设计(源代码+系统) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

Global site tag (gtag.js) - Google Analytics