2 qq 27104997 qq_27104997 于 2018.02.14 20:31 提问

mybatis的sql语句问题

${paramSQL} </ sele ct>

${paramSQL} 是什么,能详细讲讲么

8个回答

tangqiketang
tangqiketang   2018.02.14 22:13
已采纳

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

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

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

devmiao
devmiao   Ds   Rxr 2018.02.14 23:52

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

ql199308255
ql199308255   2018.02.15 01: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 12: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_36146275   2018.02.17 15: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
qq_29777207   2018.02.24 14:39
 字段类型是整形用$符号,其他字段用#号,否则在查询的时候回默认加双引号,如你想要的sql是select * from tb_user where id=11111,用#号的话就会变成select * from tb_user where id="11111"
moer4372
moer4372   2018.03.23 13:23

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

tangqiketang
tangqiketang   2018.02.14 22:26

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!