老师快帮帮我,mybatis的association关联查询不执行

老师快帮帮我,mybatis的association关联查询不执行

在查询科室的时候我想用association关联查询,把科室相应的分类也查询出来,结果就是查询不出来,

然后我用log4j的DEBUG模式查看了一下,结果发现association关联查询根本就没有执行。。。。。。。

下面是相应的两个映射文件

===============================================================

DepartmentDao.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="hdm.dao.DepartmentDao">
 

  <resultMap id="resultMap" type="Department">
     <id property="id" column="id" javaType="Integer" />
     <result property="categoryId" column="category_id" javaType="Integer" />
     <result property="name" column="name" javaType="String" />
     <result property="createTime" column="create_time" javaType="java.util.Date" />
     <result property="updateTime" column="update_time" javaType="java.util.Date" />

     <association property="category" column="categoryId" javaType="Category" select="hdm.dao.CategoryDao.selectById"/>

  </resultMap>

  <insert id="insert" parameterType="Department">
     insert into dept (category_id,name,create_time,update_time)values(#{categoryId},#{name},#{createTime},#{updateTime})
  </insert>

  <delete id="delete" parameterType="Integer">
     delete from dept where id=#{id}
  </delete>

  <select id="selectById" parameterType="Integer" resultMap="resultMap">
     select * from dept where id=#{id}
  </select>

  <select id="selectAll" resultMap="resultMap">
     select * from dept
  </select>

  <select id="selectByCategoryId" resultMap="resultMap" parameterType="Integer">
     select * from dept where category_id=#{cid}
  </select>

  <update id="update" parameterType="Department">
     update from dept set category_id=#{categoryId},name=#{name},update_time=#{updateTime} where id=#{id}
  </update>

</mapper>

=================================================================================================

CategoryDao.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="hdm.dao.CategoryDao">
 

  <resultMap id="resultMap" type="Category">
     <id property="id" column="id" javaType="Integer" />
     <result property="name" column="name" javaType="String"/>
     <result property="createTime" column="create_time" javaType="java.util.Date" />
     <result property="updateTime" column="update_time" javaType="java.util.Date" />
  </resultMap>

  <insert id="insert" parameterType="Category" useGeneratedKeys="true">
     insert into category(name,create_time,update_time) values(#{name},#{createTime},#{updateTime})
  </insert>

  <delete id="delete" parameterType="Integer">
     delete from category where id=#{id}
  </delete>

  <select id="selectAll" resultMap="resultMap">
     select * from category
  </select>

  <select id="selectById" parameterType="Integer" resultMap="resultMap">
     select * from category  where id=#{id}
  </select>

  <update id="update" parameterType="Category">
     update category set name=#{name},update_time=#{updateTime} where id=#{id}
  </update>


</mapper>

正在回答

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

2回答

同学你好,

同学这里的关联条件写错了呢,这里要填写数据库字段,而同学之前数据库中查询出来的是category_id,同学将关的列写为category_id,测试一下

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

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


  • 你上b站不 提问者 #1
    额,我一直以为这里写的是属性名。。。。。
    2019-10-13 10:39:14
  • 好帮手慕柯南 回复 提问者 你上b站不 #2
    同学,不是哦,property是java中的属性名,而column是指数据库字段名或者字段别名。祝学习愉快~
    2019-10-13 10:54:46
好帮手慕柯南 2019-10-12 19:10:44

同学你好,

同学贴出来的代码老师没有发现问题呢,

  1. 请问同学所说的association关联查询根本就没有执行是什么意思是呢?是这里查询科室没有执行吗?如果是同学在调用方法时是否调用错了呢

  2. 同学的控制台是否报错了呢,另外不建议同学的resultMap的id为resultMap,尽量不要使用关键字

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

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


  • 提问者 你上b站不 #1
    association关联查询根本就没有执行的意思是,本来执行Department的查询操作的时候(如getAllDepartment()),根据resultMap里的设置应该把Department对象的 private Category category;这个属性也赋值,但查询的结果是只有这个为null, 然后下面的是log4j打印的部分信息: 27830 DEBUG [http-nio-8080-exec-2] hdm.dao.DepartmentDao.selectAll - ==> Preparing: select * from dept 27830 DEBUG [http-nio-8080-exec-2] hdm.dao.DepartmentDao.selectAll - ==> Parameters: 27835 DEBUG [http-nio-8080-exec-2] hdm.dao.DepartmentDao.selectAll - <== Total: 2 可以看到association标签里设置的语句并没有被执行。。
    2019-10-12 19:51:56
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

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

在线咨询

领取优惠

免费试听

领取大纲

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