major为null是什么原因?

major为null是什么原因?

studentsMapper.xml语句如下:

<select id="findStudents" resultMap="forStudent">
   select * from student
   <where>
       <if test="id!=null">
           id=#{id}
       </if>
       <if test="reg_no!=null">
           AND reg_no=#{reg_no}
       </if>
       <if test="name!=null">
           AND name=#{name}
       </if>
       <if test="sex!=null">
           AND sex=#{sex}
       </if>
       <if test="age!=null">
           AND age=#{age}
       </if>
       <if test="grade!=null">
           AND grade=#{grade}
       </if>
       <if test="major!=null">
           AND major=#{major}
       </if>
   </where>
</select>

<resultMap id="forStudent" type="com.pan.entity.Student">
   <id column="id" property="id"></id>
   <collection property="courses" column="major"  ofType="com.pan.entity.Course" select="getCourse"></collection>
</resultMap>

<select id="getCourse" resultType="com.pan.entity.Course">
   select * from course where major_name=#{major}
</select>

页面不显示专业的内容:

http://img1.sycdn.imooc.com//climg/5dea6283098cfa5e00000000.jpg

控制台打印major=null

Student{id=3, reg_no=20171203, name='飞流', sex='女', age=18, grade='2016', major='null', courses=[Course{id=1, courseid='C1011', major_name='哲学系', courname='哲学概论', courtime=0.0, courteacher='黄玉生'}, Course{id=2, courseid='C1012', major_name='哲学系', courname='科学技术哲学', courtime=0.0, courteacher='吴彤'}, Course{id=3, courseid='C1013', major_name='哲学系', courname='伦理学', courtime=0.0, courteacher='方俊人'}, Course{id=4, courseid='C1014', major_name='哲学系', courname='宗教学', courtime=0.0, courteacher='圣凯'}, Course{id=5, courseid='C1015', major_name='哲学系', courname='美学', courtime=0.0, courteacher='肖鹰'}, Course{id=6, courseid='C1016', major_name='哲学系', courname='心理学', courtime=0.0, courteacher='陈洁'}, Course{id=7, courseid='C1017', major_name='哲学系', courname='逻辑学', courtime=0.0, courteacher='文明'}]}

但是student表中是有内容的

http://img1.sycdn.imooc.com//climg/5dea6463098db0db09380515.jpg

在不增加collection标签时查询页面显示是正常的,有专业的内容

3    20171203    飞流    18    女    2016    哲学系    查看 修改 删除    

4    20171204    肖景恒    23    男    2006    整治系    查看 修改 删除    

估计是collection标签的使用不正确,请详细解释一下collection标签里面的各属性该怎么用,课程中解释不到位,没弄懂。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,建议同学在resultMap中添加result映射,将Student类中的major和数据库中major对应,如:

http://img1.sycdn.imooc.com//climg/5deb79f709f0eba609730251.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 慕沐8221787 提问者 #1
    major在实体类和表中的名字是一样的,为什么还要这么写呢?
    2019-12-07 22:30:57
  • 好帮手慕阿莹 回复 提问者 慕沐8221787 #2
    同学你好,如果不加这一行,则底层会认为 这个数据库中的major字段和 courses是对应的,而这个实体类中的 major属性就无法对应到了,实际上这里都是通过数据库中的major字段进行封装的,但如果咱们只写了这个collection,则它就容易认为major字段只是对应的实体类中的courses字段,而不会去封装实体类中的major属性了。所以,这里也要写上哦。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-12-08 15:16:20
好帮手慕阿满 2019-12-07 14:33:03

同学你好,初步怀疑可能是major没有获取到值,所以造成getCourse查询为null。

http://img1.sycdn.imooc.com//climg/5deb461d09079ae805740120.jpg

在collection标签中,

http://img1.sycdn.imooc.com//climg/5deb466d09d1b0f207900208.jpg

property指的是实体类的属性,column是指数据表中的字段,ofType是指返回值select的返回值类型,select指的是如下的查询:

http://img1.sycdn.imooc.com//climg/5deb471c09028d8705490124.jpg

祝:学习愉快~

  • 提问者 慕沐8221787 #1
    为什么获取不到major的值,应该怎么处理?
    2019-12-07 14:50:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师