Mybatis 你可以通过这样 把传过来的参数集合变成一张临时表

SELECT tab1.val from
<foreach collection="list" index="index" item="item" open="(" separator="union" close=")">
     select #{item.dormUserPin} as val
</foreach>
tab1
WHERE tab1.val not in (select hu.pin from hr_userinfo hu)

注意到没有,其实就是简单的拼接 用的union 记录一下;

(2)这个也需要记录一下 用来卡权限的

SELECT COUNT(1)
    from hr_userinfo hu
    JOIN dorm_user_info dui on dui.dorm_user_pin = hu.pin
    JOIN dorm_structure ds on ds.dorm_id =dui.dorm_structure_id
  where hu.pin in(SELECT dorm_user_pin FROM dorm_user_info)
  <if test="dorm_structure_id!=null and dorm_structure_id!=''">
       and (dui.dorm_structure_id=#{dorm_structure_id} or dui.dorm_structure_id in
      (select ds1.dorm_id from dorm_structure ds1 where ds1.dorm_parent_id = #{dorm_structure_id}))
  </if>
  <if test="name!=null and name!=''">
    and hu.`name` like CONCAT('%','#{name}','%')
  </if>
  <if test="pin!=null and pin!=''">
    and hu.pin=#{pin}
  </if>
  <if test="userName !=null and userName !=''">
        and  dui.dorm_user_dept_id in (select hd.dept_id from hr_dept hd
        join sys_role_dept srd on hd.dept_id = srd.dept_id
        join sys_role sr on srd.sys_role_id = sr.id
        join sys_user_role sur on sr.id = sur.sys_role_id
        join sys_user su on sur.sys_user_id = su.id
        where su.name = #{userName})
 </if>
MyBatis在与Oracle数据库配合时,有时需要将参数集合映射到临时表以便执行更复杂的SQL查询。这通常通过动态SQL(Dynamic SQL)和存储过程结合来实现。你可以这样做: 1. **创建存储过程**: 首先,在Oracle数据库中编写一个存储过程,该过程接受一个表类型的参数,这个参数是你希望映射的参数集合。 ```sql CREATE OR REPLACE PROCEDURE procedure_name (p_param_table IN TABLE_TYPE) AS BEGIN -- 存储过程的具体逻辑,如插入临时表、处理数据等 END; / ``` 2. **MyBatis XML映射文件**: 在`mybatis-config.xml`或对应的Mapper XML文件中配置该存储过程,并指定参数类型为`java.util.Map`或`List<YourParameter>`。 ```xml <mapper namespace="your.package.YourMapper"> <procedure name="callProcedure" resultType="void"> <parameter type="map" javaType="java.util.Map<String, Object>"/> <!-- 或者如果你的参数List --> <!-- parameter type="list" javaType="java.util.List<YourParameter>" collectionType="java.util.List" /> --> </procedure> </mapper> ``` 3. **调用存储过程**: 在你的Mapper接口方法中,调用存储过程并将参数集合传入。 ```java public void callProcedure(@Param("params") Map<String, Object> params) { yourMapper.callProcedure(params); } ``` 4. **传递参数**: 在实际使用中,你需要将Java对象转换为Map或List形式的参数发送给存储过程。 注意:这种方式虽然可以实现功能,但可能会降低性能,因为它涉及到额外的数据传输和存储过程的执行。如果可能的话,尽量优化查询,减少对存储过程的依赖。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值