`

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>  


没有判断,直接加载

 

 

分享到:
评论

相关推荐

    详解Mybatis通用Mapper介绍与使用

    通用Mapper介绍与使用 Mybatis通用Mapper是一种基于Mybatis的插件,旨在解决单表增删改查操作的烦恼。它可以自动生成CRUD操作的SQL语句,无需手动编写SQL语句,极大地提高了开发效率。 通用Mapper的优点 1. 高度...

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

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

    Mybatis逆向工程代码生成器.zip

    例如,`selectByPrimaryKey`、`insert`、`updateByPrimaryKey`和`deleteByPrimaryKey`等。 4. **Mapper XML配置文件**:这些XML文件包含了SQL语句的具体实现,与Mapper接口相对应。MBG会自动生成INSERT、UPDATE、...

    MyBatis的Mapper接口以及Example的实例函数及详解

    MyBatis是一个流行的Java持久层框架,它简化了数据库操作,通过XML或注解的方式将SQL与Java代码绑定。在MyBatis中,Mapper接口和Example类是两个核心概念,它们帮助开发者方便地进行CRUD(创建、读取、更新、删除)...

    Mybatis逆向生成使用扩展类的实例代码详解

    - **BaseMapper.java**:这是基础Mapper接口,包含了Mybatis的CRUD操作,如`deleteByPrimaryKey`, `insert`, `insertSelective`, `updateByPrimaryKeySelective` 和 `updateByPrimaryKey`。这些方法由Mybatis的逆向...

    Mybatis架构原理开源架构源码2021.pdf

    6. `updateByPrimaryKey()`:根据主键更新对象,同样会忽略值为 `null` 的字段。 7. `delete()` 和 `deleteByPrimaryKey()`:删除数据,前者根据对象条件删除,后者直接按主键删除。 此外,MyBatis 还提供了 `...

Global site tag (gtag.js) - Google Analytics