Mybatis之更新方法: updateByPrimaryKeySelective() 和 updateByPrimaryKey() 的区别
int updateByPrimaryKeySelective(TbItem record);
int updateByPrimaryKey(TbItem record);
上面的是逆转工程生成的Mapper接口
对应的xml为
<update id="updateByPrimaryKeySelective" parameterType="com.taotao.pojo.TbItem">
update tb_item
<set>
<if test="title != null">
title = #{title,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
---------------------------------------------------------------------
<update id="updateByPrimaryKey" parameterType="com.taotao.pojo.TbItem">
update tb_item
set title = #{title,jdbcType=VARCHAR},
where id = #{id,jdbcType=BIGINT}
</update>
updateByPrimaryKeySelective 会对字段进行判断再更新(如果为Null就忽略更新),如果你只想更新某一字段,可以用这个方法。
更新为空时不会保存空
updateByPrimaryKey 对你注入的字段全部更新,将为空的字段在数据库中置为NULL
@Override
public Page<Community> search(Map searchMap) {
//通用Mapper多条件搜索,标准写法
Example example = new Example(Community.class);//指定查询的表tb_community
//1.初始化分页条件
int pageNum = 1;
int pageSize = 2;
if (searchMap != null) {
Example.Criteria criteria = example.createCriteria();//创建查询条件
//时间区间
if (StringUtil.isNotEmpty((String) searchMap.get("startTime"))) {
criteria.andGreaterThanOrEqualTo("createTime", searchMap.get("startTime"));
}
if (StringUtil.isNotEmpty((String) searchMap.get("endTime"))) {
criteria.andLessThanOrEqualTo("createTime", searchMap.get("endTime"));
}
//名称模糊搜索
if (StringUtil.isNotEmpty((String) searchMap.get("name"))) {
criteria.andLike("name", "%" + (String) searchMap.get("name") + "%");
}
//分页
if ((Integer) searchMap.get("pageNum") != null) {
pageNum = (Integer) searchMap.get("pageNum");
}
if ((Integer) searchMap.get("pageSize") != null) {
pageSize = (Integer) searchMap.get("pageSize");
}
}
PageHelper.startPage(pageNum, pageSize);//使用PageHelper插件完成分页
Page<Community> communities = (Page<Community>) communityMapper.selectByExample(example);
return communities;
}