qq_27104997
爱吃蛋炒饭加蛋
2018-02-14 12:31
采纳率: 75%
浏览 1.1k

mybatis的sql语句问题

${paramSQL} </ sele ct>

${paramSQL} 是什么,能详细讲讲么
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • tangqiketang
    唐七颗糖 2018-02-14 14:13
    已采纳

    1.假设有一张Book的表,表中字段为 ID ,Name,你要根据id查找名字,操作如下

    Dao层方法为: public Book findBook(@Param("id")Integer id);

    在mybatis中: **select name from Book where ID=${id} **
    $就是把方法中的参数取出来的符号

    点赞 评论
  • tangqiketang
    唐七颗糖 2018-02-14 14:26

    你问题中的${paramSQL}表示的是SQL片段, 就是引用了别处的一段语句, ctrl+c,然后再ctrl+F在xml文件中查询 paramSQL关键字,你会发现paramSQL代表的真实语句

    点赞 评论
  • devmiao
    devmiao 2018-02-14 15:52

    ${paramSQL} sql参数
    放在select里,表示选择的值绑定给它

    点赞 评论
  • ql199308255
    ql199308255 2018-02-14 17:11

    ${paramSQL} paramSQL等于Dao层对应方法的参数
    Dao层 参数可以是实体类 比如 List getStudent(Student std);//传入参数是Student实体类
    则在映射文件中想拿到实体类的值 可以这样写

    SELECT s.*
    FROM student AS s
    WHERE s.age=${std.age} // ${std.age}就等于是你传入的实体类 .age就是实体类的属性 一般实体类都是标准JAVAbean
    如果Dao层是多参数形式, 则可以用@Param注解
    谢谢采纳, 纯手打

    点赞 评论
  • qq_18893879
    qq_18893879 2018-02-15 04:16

    ${paramSQL} paramSQL等于Dao层对应方法的参数
    Dao层 参数可以是实体类 比如 List getStudent(Student std);//传入参数是Student实体类
    则在映射文件中想拿到实体类的值 可以这样写

    SELECT s.*
    FROM student AS s
    WHERE s.age=${std.age} // ${std.age}就等于是你传入的实体类 .age就是实体类的属性 一般实体类都是标准JAVAbean

    点赞 评论
  • weixin_36146275
    weixin_316529 2018-02-17 07:06

    下面是我工程的一段sql,其实你应该问mybatis中的**#**{paramSQL}、**$**{paramSQL}的区别

        <select id="findCity" parameterType="Object" resultType="com.xfj.base.seller.domain.City">
            select * from t_city where city_id=#{cityId} and city_site_id = ${citySiteId};
        </select>
    

    1.以上sql使用“#”传参和使用“$”传参的执行结果:
    --使用“#”传参的话,打印sql的log就会出现“?”占位符;使用“$”传参则会直接与sql进行拼接
    --假设cityId = 9527 (是integer类型),citySiteId = "1"(是string类型); sql执行打印的log下方有形如这样的参数
    【==> Preparing : select * from t_city where city_id=**?** and city_site_id = '1'】
    【==> Parameters: 9527(**Integer**)】

    2.我曾经遇到这样的一个问题,在mybatis下编写一条sql做过滤

    业务是搜索用户时应过滤界面已展示用户,我就获取已展示用户的id以逗号做分隔符

    像这样的:1,2,3,4,5,6

    在java后台用String接收:String listUserId= "1,2,3,4,5,6";
    sql如下:

      select * from user u where u.id not in (#{listUserId})
    
    

    期望执行结果:select * from user u where u.id not in (**1,2,3,4,5,6**)
    实际执行结果: select * from user u where u.id not in (**'1,2,3,4,5,6'**)
    使用“#”传参,参数因为是String类型,会被加上单引号导致sql抛异常

    解决办法就是使用“$”传参

     select * from user u where u.id not in (${listUserId})
    

    实际执行结果: select * from user u where u.id not in (**1,2,3,4,5,6**)

    点赞 评论
  • qq_29777207
    张音乐 2018-02-24 06:39
     字段类型是整形用$符号,其他字段用#号,否则在查询的时候回默认加双引号,如你想要的sql是select * from tb_user where id=11111,用#号的话就会变成select * from tb_user where id="11111"
    
    点赞 评论
  • moer4372
    meweiweifeng 2018-03-23 05:23

    $符号表示 直接把传进来的参数 直接+到sql里执行
    如果只有一个${paramSQL}代表 传的参数就是一个 java编写好的sql

    点赞 评论

相关推荐