连表更新(更新空字段) 
updateJoinAndNull 1.4.5+ 
java
/**
 * 根据 whereEntity 条件,更新记录
 *
 * @param entity  实体对象 (set 条件值,可以为 null)
 * @param wrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
 */
int updateJoinAndNull(T entity,MPJBaseJoin<T> wrapper);wrapper设置set语句和where条件 
这种方式和 updateJoin 方法没有区别, 因为set语句实体为null
java
class MpJoinTest {
    @Resource
    private UserMapper userMapper;
    /**
     * 手动set条件
     * 更新 user表name字段和address表address字段
     */
    @Test
    void update() {
        UpdateJoinWrapper<User> update = JoinWrappers.update(User.class)
                .set(User::getName, "aaaaaa")
                .set(Address::getAddress, "bbbbb")
                .leftJoin(Address.class, Address::getUserId, User::getId)
                .eq(User::getId, 1);
        int i = userMapper.updateJoinAndNull(null, update);
    }
}对应sql
sql
UPDATE
    `user` t
    LEFT JOIN address t1
ON (t1.user_id = t.id)
    SET t.`name`=?, t1.address=?
WHERE (t.id = ?)根据实体更新, wrapper作为where条件 
java
class MpJoinTest {
    @Resource
    private UserMapper userMapper;
    /**
     * 根据实体更新, wrapper作为where条件
     */
    @Test
    void update() {
        //主表实体 用于生成 set 语句
        User user = new User().setName("aaa").setUpdateBy(123);
        UpdateJoinWrapper<User> update = JoinWrappers.update(User.class)
                .leftJoin(Address.class, Address::getUserId, User::getId)
                .eq(User::getId, 1);
        int i = userMapper.updateJoinAndNull(user, update);
    }
}对应log 更新user全部字段(包括空字段)
log
==>  Preparing: UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) SET t.pid=?, t.`name`=?, t.`json`=?, t.sex=?, t.head_img=?, t.create_time=?, t.address_id=?, t.address_id2=?, t.create_by=?, t.update_by=? WHERE (t.id = ?)
==> Parameters: null, aaa(String), null, null, null, null, null, null, null, 123(Integer), 1(Integer)
<==    Updates: 1注意事项:
实体类更新所有字段( 包括空字段 ), 如果要只更新非空字段
参考updateJoin方法
主表根据实体更新, 副表手动设置set语句 
java
class MpJoinTest {
    @Resource
    private UserMapper userMapper;
    /**
     * 根据实体更新, wrapper作为where条件
     */
    @Test
    void update() {
        //主表实体 用于生成 set 语句
        User user = new User().setName("aaa").setUpdateBy(123);
        UpdateJoinWrapper<User> update = JoinWrappers.update(User.class)
                //设置副表 set 语句
                .set(Address::getAddress, "bbbbb")
                .leftJoin(Address.class, Address::getUserId, User::getId)
                .eq(User::getId, 1);
        int i = userMapper.updateJoinAndNull(user, update);
    }
}对应log
log
==>  Preparing: UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) SET t.pid=?, t.`name`=?, t.`json`=?, t.sex=?, t.head_img=?, t.create_time=?, t.address_id=?, t.address_id2=?, t.create_by=?, t.update_by=?, t1.address=? WHERE (t.id = ?)
==> Parameters: null, aaa(String), null, null, null, null, null, null, null, 123(Integer), bbbbb(String), 1(Integer)
<==    Updates: 10注意事项:
实体类只更新非空字段, 如果要更新全部字段(非空字段和空字段)
参考updateJoinAndNull方法
根据主表和副表实体类更新, wrapper作为where条件 
这里提两个方法
java
//更新实体非空字段
.setUpdateEntity(Object... entityList);
//更新实体空字段和非空字段
.setUpdateEntityAndNull(Object... entityList);java
class MpJoinTest {
    @Resource
    private UserMapper userMapper;
    /**
     * 场景: 
     * 三表联查并且按照实体更新这三张表
     * 主表 user 副表 address 和 area
     */
    @Test
    void update() {
        //主表类 用于生成 set 语句
        User user = new User().setName("aaa").setUpdateBy(123);
        //两个关联表 用于生成 set 语句
        Address address = new Address().setTel("119").setAddress("人民广场");
        Area area = new Area().setProvince("北京").setCity("北京!");
        UpdateJoinWrapper<User> update = JoinWrappers.update(User.class)
                //设置两个副表的 set 语句
                .setUpdateEntity(address, area)
                //address和area 两张表空字段和非空字段一起更新 可以改成如下setUpdateEntityAndNull
                //.setUpdateEntityAndNull(address, area)
                .leftJoin(Address.class, Address::getUserId, User::getId)
                .leftJoin(Area.class, Area::getId, Address::getAreaId)
                .eq(User::getId, 1);
        int i = userMapper.updateJoinAndNull(user, update);
    }
}对应log
log
==>  Preparing: UPDATE `user` t LEFT JOIN address t1 ON (t1.user_id = t.id) LEFT JOIN area t2 ON (t2.id = t1.area_id) SET t.pid=?, t.`name`=?, t.`json`=?, t.sex=?, t.head_img=?, t.create_time=?, t.address_id=?, t.address_id2=?, t.create_by=?, t.update_by=?, t1.tel=?,t1.address=?,t2.province=?,t2.city=? WHERE (t.id = ?)
==> Parameters: null, aaa(String), null, null, null, null, null, null, null, 123(Integer), 119(String), 人民广场(String), 北京(String), 北京!(String), 1(Integer)
<==    Updates: 19注意事项:
实体类更新所有字段( 包括空字段 ), 如果要只更新非空字段
参考updateJoin方法