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>
没看错,就是把每一行的语句都和数据库对上映射了下,真心暴力。然后空值就出来了-。
疑问
这里我也不知道为什么封装不进去,用的是实体类封装,照理是可以的,希望大佬指点,感谢。虽然解决了问题,却像没解决。