`

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逆向生成使用扩展类的实例代码详解

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

    思科java面试试题.txt

    - `updateByPrimaryKey` 和 `updateByPrimaryKeySelective`:更新记录,后者支持部分字段更新。 - `selectByUsername`:根据用户名查询记录。 4. **Mapper XML配置**:配置SQL语句,用于执行具体的数据库操作。 ...

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

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

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

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

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

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

    mybatis代码生成器

    使用MyBatis时,这些接口通常会被实现,而代码生成器会自动为每个接口生成相应的抽象方法,如`selectById`、`insert`、`updateByPrimaryKey`等。 3. Mapping映射文件(Mapper XML):映射文件中包含了SQL查询语句和...

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

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

    逆向工程Example方法使用说明

    - **`int updateByPrimaryKeySelective(User record)`**:按主键更新非空字段。 - **`int updateByExample(User record, UserExample example)`**:按条件更新记录。 - **`int updateByExampleSelective(User record...

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

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

    java将数据库表反射成java实体类xml中sql语句

    在Java开发中,数据库表与Java实体类的映射是一个常见的需求,特别是在使用ORM(对象关系映射)框架如MyBatis时。本主题聚焦于如何利用Java将数据库表自动反射为Java实体类,并自动生成对应的XML配置文件中的SQL操作...

    generator, A code generator for MyBatis and iBATIS..zip

    这些方法对应于SQL查询,如selectByPrimaryKey、insert、updateByPrimaryKey等。生成的Mapper接口可以直接与MyBatis的SqlSession进行交互,执行数据库操作。 XML映射文件包含了具体的SQL语句,MBG会根据表结构生成...

    mybatis-generator.rar

    2. Mapper接口(Mapper Interface)生成:MBG会为每张表生成一个Mapper接口,接口中包含了常见的CRUD(Create、Read、Update、Delete)操作方法,如insert、selectOne、updateByPrimaryKey等。 3. SQL映射文件...

    mybatis basedao

    在Java Web 开发中,MyBatis 是一个非常流行的持久层框架,它允许开发者将SQL语句与Java代码直接结合,避免了传统的ORM(对象关系映射)框架中的复杂性。 MyBatis BaseDAO 的核心理念是将通用的数据库操作抽象出来...

    Mybatis-Generator自动生成Dao、Model、Mapping相关文件

    DAO接口则包含了各种CRUD操作,如`selectByPrimaryKey`、`insert`、`updateByPrimaryKey`等。而Mapper XML文件则包含了SQL查询语句,与DAO接口相对应。 总的来说,Mybatis-Generator是一个强大的代码生成工具,通过...

    mybatis的generator工具

    生成的Dao接口会包含CRUD操作的方法,如`selectByPrimaryKey`、`insert`、`updateByPrimaryKey`和`deleteByPrimaryKey`。Model类将根据数据库表的结构生成对应的属性,而Mapping XML文件则包含了SQL语句,与Dao接口...

    详解Mybatis通用Mapper介绍与使用

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

    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 ...

Global site tag (gtag.js) - Google Analytics