记录谷粒学院的一些问题--------------chapter2

1.(讲师接口)多条件组合查询带分页
一般用VO对象来封装查询条件,用该对象传递到接口中去。封装一个TeacherQuery对象用于封装条件。

@ApiModel(value = "Teacher查询对象", description = "讲师查询对象封装")
@Data
public class TeacherQuery implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "教师名称,模糊查询")
    private String name;

    @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
    private Integer level;

    @ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")
    private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换

    @ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")
    private String end;
}

注 :条件值拼接问题可以使用mbp中的wrapper和动态sql,我觉得使用还是使用动态sql比较好,对mybatis的书写加深印象。
在mapper映射文件EduTeacherMapper.xml中加入一个条件查询语句拼接条件。
首先是resultTyperesultMap的区别
resultTyperesultMap功能类似 ,都是返回对象信息 ,但是resultMap要更强大一些 ,可自定义。
resultMap配置表和类名一一对应。就算字段名和属性名不一样也能映射出来。

<select id="pageQuery" resultType="com.lys.eduservice.entity.EduTeacher" >
        SELECT *
        FROM edu_teacher t
        where 1 = 1
        <if test="teacherQueryVo != null">
            <if test="teacherQueryVo.name != null">
                AND t.name LIKE concat('%',#{teacherQueryVo.name},'%')
            </if>
            <if test="teacherQueryVo.level != null">
                AND t.level = #{teacherQueryVo.level}
            </if>
            <if test="teacherQueryVo.begin != null and teacherQueryVo.begin != '' and teacherQueryVo.end != null and teacherQueryVo.end != ''">
                BETWEEN #{teacherQueryVo.begin} AND #{teacherQueryVo.end}
            </if>
        LIMIT #{page},#{limit}
        </if>
    </select>

今天一个下午在写一个接口,踩了各种坑,如果是接口的问题还好说,但连环境都没配好,我真的哭辽。

1.首先第一个是Mapper文件一直没绑定成功,如图所示
在这里插入图片描述
解决方法:
解决方法 ① 因为idea编译器的问题,在java文件下的mapper文件中xml不会进行编译,所以在相应的模块pom文件中加入

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

解决方法 ② 直接xml放在Resource文件夹下

2.此方法过后仍然没有解决,我觉得依然是配置文件的问题如下
在这里插入图片描述
解决方法:使用MBP相对应的mapper映射文件要对应好

3.最后终于解决过后,虽然接口出了问题,但已经过了一个下午了,能出现接口的问题基本问题都已经解决了,真的哭辽.(原因很简单,对mybatis运用不熟练

在这里插入图片描述
4.最后一个问题很严重,出现了null值
在这里插入图片描述

解决:发现EduTeacherVo为空,所以在xml映射文件中加入if判断是否为空,,这样还是无法解决为空值问题。并且where后面1=1查询出了所有讲师
where 1= 1也可以用where标签

<select id="pageQuery" resultType="com.lys.eduservice.entity.EduTeacher" >
        SELECT *
        FROM edu_teacher t
        where 1 = 1
        <if test="teacherQueryVo != null">
            <if test="teacherQueryVo.name != null">
                AND t.name LIKE concat('%',#{teacherQueryVo.name},'%')
            </if>
            <if test="teacherQueryVo.level != null">
                AND t.level = #{teacherQueryVo.level}
            </if>
            <if test="teacherQueryVo.begin != null and teacherQueryVo.begin != '' and teacherQueryVo.end != null and teacherQueryVo.end != ''">
                BETWEEN #{teacherQueryVo.begin} AND #{teacherQueryVo.end}
            </if>
        LIMIT #{page},#{limit}
        </if>
    </select>

其实最大问题出现在这里,在参数列表中如果加入了@RequestBody,则接口不能用@GetMapping而是要用@PostMapping,不然其后的对象就为空值了。

那么来讲一下@RequestBody和@ResponseBody的区别
① @Responsebody 表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中
一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中
注解用于@Controller方法中,将结果用以Json数据格式返回

② @RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

注:当使用该注解的时候相应的Mapping接口应该是PostMapping

 @GetMapping("pageTeacherCondition/{page}/{limit}")
    public R pageQuery(
            @PathVariable Long page,
            @PathVariable Long limit,
            @RequestBody(required = false) TeacherQueryVo teacherQueryVo
            ){
        //将当前页,和当前页的个数封装到page对象中
        List<EduTeacher> records = eduteacherService.pageEduTeacherQuery(page,limit,teacherQueryVo);
        long total = records.size();
        return R.ok().data("records",records).data("total",total);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破晓以胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值