MyBatis中Association联合select使用

mapper配置:

 

Java代码   收藏代码
  1. <resultMap type="com.demo.sys.entity.Menu" id="menuMap">  
  2.     <id property="id" column="id" />  
  3.     <result property="name" column="menu_name" />  
  4.     <result property="url" column="url" />  
  5.     <result property="active" column="isactive" />  
  6.     <result property="createDate" column="createdate" />  
  7.     <result property="updateDate" column="updatedate" />  
  8.     <result property="bak1" column="bak1" />  
  9.     <result property="bak2" column="bak2" />  
  10.     <result property="bak3" column="bak3" />  
  11.     <result property="locale" column="locale" />  
  12.     <result property="orderNum" column="ordernum" />  
  13.     <association property="module" column="module_id"  resultMap="moduleMap" select="queryModule">  
  14.             </association>  
  15. </resultMap>  

 

Java代码   收藏代码
  1. <resultMap type="com.demo.sys.entity.Module" id="moduleMap">  
  2.     <id property="id" column="id" />  
  3.     <result property="name" column="module_name" />  
  4.     <result property="remark" column="remark" />  
  5.     <result property="createDate" column="createdate" />  
  6.     <result property="updateDate" column="updatedate" />  
  7. </resultMap>  

 

Java代码   收藏代码
  1. <select id="queryModule" resultMap="moduleMap" >  
  2.     select * from sys_module where id =#{id}  
  3. </select>  

 

 

这种配置导致问题:

Menu.module的属性很多都是为null,除了id不为空。

 

经过调试发现问题出在:

Java代码   收藏代码
  1. <association property="module" column="module_id"  resultMap="moduleMap" select="queryModule">  
  2.                 </association>  

 

去掉resultMap,修改为:

Java代码   收藏代码
  1. <association property="module" column="module_id"  select="queryModule">  
  2.                 </association>  

 

 

结果Menu.module的属性可以正确被mybaties设置进去,都有值了。

 

 

 

 

Association联合select使用值得注意的细节地方:

这是我使用mybatis的Association联合select使用存着问题的地方,

 

 

Java代码   收藏代码
  1. <association property="module" column="module_id"   select="queryModule">  
  2.           
  3.         </association>  

 

    mybatis会根据类似resultSet.getInt("module_id")的值,压入到select 为queryModule 的SQL输入参数里面。

Java代码   收藏代码
  1. <select id="queryModule" resultMap="moduleMap" >  
  2.     select * from sys_module where id =#{id}  
  3. </select>  

 

  我以前一直纠结于#{id}是指Menu.id还是module的主键或外键id属性。

 

   而select 为queryModule的SQL输入参数可以随便给名称,只要是输入参数与压入进去的值类型相同就行了,可以写成:

  

Java代码   收藏代码
  1. select * from sys_module where id =#{jjjasdasdid}  

 

不管输入参数名称是什么,mybatis最终会执行:

 效果为:select * from sys_module where id =resultSet.getInt("module_id");




<association property="fncg_PD_QRY_MANAGE" column="###" select="###" />

column如果传多个参数怎么写?

<association property="fncg_PD_QRY_MANAGE" column="{COD_FN_ENT=COD_FN_ENT,COD_PD_LINE=COD_PD_LINE,ID_GRP_PD=ID_GRP_PD,NUM_TARF=NUM_TARF}" select="sql123" />

那么sql123怎么接收这4个值?

<select id="sql123" parameterType="java.util.Map" resultMap="com.cvicin.products.productManage.fngg.mapper.poRes.FNCG_PD_QRY_MANAGE"> SELECT * FROM FNCG_PD_QRY_MANAGE WHERE COD_FN_ENT = #{COD_FN_ENT} AND COD_PD_LINE = #{COD_PD_LINE} AND ID_GRP_PD = #{ID_GRP_PD} AND NUM_TARF = #{NUM_TARF} </select>

注意:

parameterType一定要是 Java.util.Map ,否则会出现什么“there is no setter ### in ###” 我记不太清具体的错误信息了。





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis ,association 是一种用于将两个实体类关联起来的机制。当两个实体类之间存在一对一的关系时,可以使用 association。 在 Mapper XML 文件使用 <association> 元素来定义 association。例如,假设我们有两个实体类 Order 和 User,每个 Order 对象都对应一个 User 对象,那么可以在 Order 的 Mapper XML 文件定义如下的 <association> 元素来关联 Order 和 User: ``` <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id" /> <result property="orderNo" column="order_no" /> <result property="createTime" column="create_time" /> <association property="user" javaType="User"> <id property="id" column="user_id" /> <result property="username" column="username" /> <result property="password" column="password" /> </association> </resultMap> ``` 在上面的例子,<association> 元素的 property 属性指定了 Order 对象与 User 对象关联的属性名,而 javaType 属性则指定了 User 对象的类型。在 <association> 元素内部,使用 <id> 元素来定义 User 对象的主键属性,以及 <result> 元素来定义 User 对象的其他属性。 在查询 Order 对象时,可以通过嵌套查询的方式将 User 对象关联起来。例如: ``` <select id="getOrderById" resultMap="orderResultMap"> SELECT o.id AS order_id, o.order_no, o.create_time, u.id AS user_id, u.username, u.password FROM orders o INNER JOIN users u ON o.user_id = u.id WHERE o.id = #{id} </select> ``` 在上面的查询语句使用了 INNER JOIN 将 orders 表和 users 表关联起来,并通过 AS 子句给每个属性起了别名。最终查询结果会将 Order 对象和 User 对象关联起来返回。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值