通用Mapper的使用方便了对Mybatis单表的增删改查等操作,不需要写SQL语句,只需调用接口中提供的方法.
updateByPrimarykey vs updateByPrimaryKeySelective
前者,只是更新新的model中非NULL的字段
后者,更新非NULL字段,其他字段均置为NULL。
如有 表t_order:
表 t_order,对应的实体类是Order:
</pre><p style="margin-top: 0px; margin-bottom: 25px; font-size: 15px; line-height: 1.7; word-break: break-word; color: rgb(47, 47, 47); font-family: 'lucida grande', 'lucida sans unicode', lucida, helvetica, 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif;"><pre name="code" class="java">package ...
import ...
@Table (name ="t_order")
public classOrder {
@Id
private String id;//UUID
private String orderno;//订单号
private String userid;//下单人
private Date enteringdate;//下单日期
private String shipto;//送达地址
public String getId() { return id; }
public void setId(String id) { this.id= id; }
public String getOrderno() { return orderno; }
public void setOrderno(String orderno) { this.orderno= orderno; }
public String getUserid() { return userid; }
public void setUserid(String userid) { this.userid= userid; }
public Date getEnteringdate() { return enteringdate; }
public void setEnteringdate(Date enteringdate) { this.enteringdate= enteringdate; }
public String getShipto() { returnshipto; }
public void setShipto(String shipto) { this.shipto= shipto; }
}
在.java中通过调用Mapper中的方法对表t_order进行操作,用其中一函数说明。
public void updateOrderShipAddress(String orderNo){
<span style="white-space:pre"> </span>if (isNotBlank(order)){
<span style="white-space:pre"> </span>Order order = new Order();
<span style="white-space:pre"> </span>order.setOrderno(orderNo);
<span style="white-space:pre"> </span>// 从数据库中找到要修改的这条数据
<span style="white-space:pre"> </span>List<Order> list = mapper.select(order);
<span style="white-space:pre"> </span>String id = null;
<span style="white-space:pre"> </span>if (list != null && list.size() != 0) {
<span style="white-space:pre"> </span>id = list.get(0).getId();
<span style="white-space:pre"> </span>order.setId(id);
<span style="white-space:pre"> </span>order.Shipto("安徽省马鞍山市xx小区xx号");
<span style="white-space:pre"> </span>// 更新收货地址
<span style="white-space:pre"> </span>mapper.updateByPrimaryKey(order);
}
}
}
如果用以上updateByPrimaryKey(order)方法,order对象中非null的数据将会对应地去t_order表中进行数据更新,其他的数据均置为NULL。
执行结果如下:
updateByPrimaryKey方法执行结果
若 mapper.updateByPrimaryKey(order) 改为 mapper.updateByPrimaryKeySelective(order);
执行结果如下:
updateByPrimaryKeySelective 方法执行结果