写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

  前几篇记录完了对枚举类的处理,顺便简单记录一下对布尔值的处理,因为遇到了一个小坑。

新增属性:

先看下保存相关代码:

    // 实体属性
    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>

我遇到的小坑是:

  1. 多判了!='':<if test="localFlag != null and localFlag  != '' ">  这样的后果是可以正常保存true数据库中为1,但是保存false的时候数据库为空不为0
  2. 属性使用boolean:应该使用包装类Boolean,使用boolean的时候@Data注解生成的是is**方法,而不是get**方法,导致取值有问题。
  3. 另外注意一下在判断日期类型和枚举类型的时候也不要判 !='',只判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进行测试。 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐