hibernate操作数据库,用占位符有什么好处??与直接拼字符串相比有什么好处?????
hql.append("fromCategoryRulevcwherevc.ruleCode=:ruleCode");List<CategoryRule>list=thi...
hql.append("from CategoryRule vc where vc.ruleCode = :ruleCode");
List<CategoryRule> list = this.getSession().createQuery(hql.toString()).setString("ruleCode", ruleCode).list();
比下面这种有什么好处???
hql.append("from CategoryRule vc where vc.ruleCode '")
.append(ruleCode)
.append("'");
List<VendorCategoryRule> list = this.getSession().createQuery(hql.toString()).list(); 展开
List<CategoryRule> list = this.getSession().createQuery(hql.toString()).setString("ruleCode", ruleCode).list();
比下面这种有什么好处???
hql.append("from CategoryRule vc where vc.ruleCode '")
.append(ruleCode)
.append("'");
List<VendorCategoryRule> list = this.getSession().createQuery(hql.toString()).list(); 展开
3个回答
展开全部
1.层次清晰,HQL长了之后代码也不显得乱
2.确实可以提高一定效率
3.安全性考虑,防止一些注入性攻击, 举个例子如果你的ruleCode变量从jsp页面获得,是客户手动输入的,那么客户如果恶意的输入一些特殊的字符 如 'or'='or' 那么你的HQL解析成SQL就变成
select * from CategoryRule vc where vc.ruleCode = ‘or’='or' ,如果这是用户名或者密码, 这样可能就能非法登录系统 ,或者获得后台一些数据错误信息的反馈。
采用setString就会把'or'='or' 整体当成一个串,就不会出现这种问题
2.确实可以提高一定效率
3.安全性考虑,防止一些注入性攻击, 举个例子如果你的ruleCode变量从jsp页面获得,是客户手动输入的,那么客户如果恶意的输入一些特殊的字符 如 'or'='or' 那么你的HQL解析成SQL就变成
select * from CategoryRule vc where vc.ruleCode = ‘or’='or' ,如果这是用户名或者密码, 这样可能就能非法登录系统 ,或者获得后台一些数据错误信息的反馈。
采用setString就会把'or'='or' 整体当成一个串,就不会出现这种问题
展开全部
用占位符的目的是绑定变量,这样可以减少数据库对SQL的硬解析,所以执行效率会提高不少。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.系统得将你的HQL语句转换成SQL语句才能执行,用占位符可以预先编译,提高执行效率
2.增加代码可读性
3.防止SQL注入
2.增加代码可读性
3.防止SQL注入
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询