查询语句后台数据库显示,封装的值有些为空,但数据库中有值

在使用MyBatis和Spring框架时,遇到查询结果在数据库有值,但在Service层部分字段为空的奇怪问题。通过在Mapper接口中添加详细的结果映射解决了该问题。尽管找到了解决方案,但作者对于为何实体类无法自动封装所有字段感到困惑。
摘要由CSDN通过智能技术生成

mybatis框架,spring框架:查询语句以后,后台数据库显示,但是返回给service层发现,封装的值有些为空,但是数据库中有值@TOC

问题描述

附上最开始的代码:

   <select id="findStuByClasses" resultType="com.school.pojo.StuInfo">
        select * from stu_info where classes like '%${classes}%'
    </select>

日志显示查询数据库有值,附图片
在这里插入图片描述
在这里插入图片描述
注:涉及个人信息,因此打码了。
问题出现在service层调用了mapper,结果在service输出层发现并没有赋值完全。
service层的代码

public List<StuInfo> findClassesAllStudentByClassName(List<String> category) {
//        拿目录的最后一个值
        String className = category.get(category.size()-1);
        System.out.println("className = " + className);

//        到数据库去查学生
        List<StuInfo> stuInfoList = stuInfoMapper.findStuByClasses(className);
//        更新数据
        List<StuInfo> infos = new ArrayList<>();
        for (int i = 0; i < stuInfoList.size(); i++) {
            StuInfo stuInfo = stuInfoList.get(i);
            // 输出信息
            System.out.println("stuInfo = " + stuInfo);
            if(stuInfo.getSex().equals("0")){
                stuInfo.setSex("女");
            }else if(stuInfo.getSex().equals("1")){
                stuInfo.setSex("男");
            }
            infos.add(stuInfo);
        }
        return infos;
    }

代码中的输出信息问题:
在这里插入图片描述
可以看到classes有值,说明每行查询对上了,但是其他值全为空,碰到这奇葩问题,我emmmmm,(此时一万句脏话飘过)

碰巧的解决方案

非常菜的解决方案了,用的我认为的最暴力匹配。
上代码

 <resultMap id="stuInfoMap" type="com.school.pojo.StuInfo">
        <!--
        id:表示定义主键列
        property: 实体类中属性名
        column:表中列名
        -->
        <id property="stu_id" column="stu_id"/>
        <!-- result:定义普通列和Java实体类的属性对应关系-->
        <result property="stu_name" column="stu_name"/>
        <result property="sex" column="sex"></result>
        <result property="id_card" column="id_card" />
        <result property="classes" column="classes" ></result>
        <result property="enrol_date" column="enrol_date" />
        <result property="grad_date" column="grad_date" />
        <result property="profession" column="profession" />
        <result property="pro_direction" column="pro_direction" />
        <result property="faculty" column="faculty" />
        <result property="scheme" column="scheme" />
    </resultMap>

    <select id="findStuByClasses" parameterType="java.lang.String" resultMap="stuInfoMap">
    select * from stu_info where classes like '%${classes}%'
</select>

没看错,就是把每一行的语句都和数据库对上映射了下,真心暴力。然后空值就出来了-

疑问

这里我也不知道为什么封装不进去,用的是实体类封装,照理是可以的,希望大佬指点,感谢。虽然解决了问题,却像没解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值