写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
前几篇记录完了对枚举类的处理,顺便简单记录一下对布尔值的处理,因为遇到了一个小坑。
新增属性:
先看下保存相关代码:
// 实体属性
private Boolean localFlag;
// xml中
<insert id="savePerson" parameterType="com.example.springbootmybatis.bean.Person">
insert into t_person
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="pname != null and pname != ''">pname,</if>
<if test="ptype != null">ptype,</if>
<if test="sex != null">sex,</if>
<if test="localFlag != null">local_flag,</if>
</trim>
<trim prefix="values(" suffix=")" suffixOverrides=",">
<if test="pname != null and pname != ''">#{pname},</if>
<if test="ptype != null">#{ptype},</if>
<if test="sex != null">#{sex},</if>
<if test="localFlag != null">#{localFlag},</if>
</trim>
</insert>
我遇到的小坑是:
- 多判了!='':<if test="localFlag != null and localFlag != '' "> 这样的后果是可以正常保存true数据库中为1,但是保存false的时候数据库为空不为0
- 属性使用boolean:应该使用包装类Boolean,使用boolean的时候@Data注解生成的是is**方法,而不是get**方法,导致取值有问题。
- 另外注意一下在判断日期类型和枚举类型的时候也不要判 !='',只判null即可,否则会报错
补充一下查询:
@GetMapping("/query")
public ResponseEntity query(@RequestParam PersonType ptype,@RequestParam Boolean localFlag){
List<Person> personDtos = personService.queryByType(ptype,localFlag);
return ResponseEntity.ok().body(personDtos);
}
<select id="queryByType" resultType="com.example.springbootmybatis.bean.Person">
select * from t_person
<where>
<if test="ptype != null">ptype = #{ptype}</if>
<if test="localFlag != null">and local_flag = #{localFlag}</if>
</where>
</select>
测试下:
布尔类型参数在数据库中会保存为0/1,查询时Boolean类型参数直接传true/false即可,顺便看一下使用swagger测试的页面:
直接就可以在页面上通过下拉选择,还是挺方便的,而且还能避免一些坑,像是之前测试Long类型失精度问题,在postman/apipost上是表现不出来的,只有在swagger上才能体现,建议用swagger进行测试。