在数据库中,$和#代表什么意思?

模糊查询,select*fromteacherwhereteacher_namelike'%${dim}%'为什么是$而不是#?模糊查询中,想要即可以查名字,又可以查性别... 模糊查询,select * from teacher where teacher_name like '%${dim}%' 为什么是$而不是#? 模糊查询中,想要即可以查名字,又可以查性别等等,该怎么修改牧户查询语句 展开
 我来答
micro0369
2016-11-14 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4066万
展开全部
${} 这是你的编程语言定义参数的写法吧,和数据库没有太大的关系
追问
我用的是ssm框架,在mapper.xml文件里,其他的参数都是#{},唯独模糊查询#不被允许,查不出来,只能是$符号
追答

#{}与${}

1.     #{}实现向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符。

 

<select id="findUserById" parameterType="int"  resultType="User">  
    SELECT * FROM USER WHERE id = #{value}  
</select>


使用占位符可以防止sql的注入,在使用时不需要关心参数的类型,mybatis会自动的进行Java与jdbc的转换。#{} 可以接受简单类型和pojo的属性值。如果parameterType中指定的是单个的简单类型,#{}中可以使用value或是其他值。


 2. #{}与${}的不同:

   通过${}可以将parameterType传入的内容拼接在sql中,并且不进行jdbc类型转换,${}可以接受简单类型和pojo的属性值,若parameterType为单个简单类型时,${}中必须使用value。使用${}不能防止sql注入,但有时会很方便,例如:


<select id="findUserByUsername" parameterType="java.lang.String" resultType="User">  
            SELECT * FROM USER WHERE username LIKE '%${value}%'  
</select>

3. 再比如order by排序,如果将列名通过参数传入sql,根据传的列名进行排序,应该写为:

ORDER BY${columnName}

如果使用#{}将无法实现此功能。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式