- 浏览: 673925 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
qq826928141:
longxing898 写道请教:使用jtds连接sql 20 ...
rapid-framework v3.9新版本发布 -
qq826928141:
美味人间 写道大哥,这个代码生成器怎么无法获取表和列的备注信息 ...
rapid-framework v3.9新版本发布 -
walle1027:
能发一下的测试代码吗?
rabbitmq性能测试 -
在世界的中心呼喚愛:
好东西,我就是参考这个!!!
iBatis3基于方言(Dialect)的分页 -
暂不存在:
怎么将{key}中的值替换掉
rapid系列:发布一款动态构造sql的工具: XsqlBuilder
特性列表:
- 动态构造sql条件语句,提供sql拼接与使用占位符两种方式
- 数据类型的修饰
- 对SQL注入攻击的防范
问题:
手工构造SQL语句的情况
String sql = "select * from user where 1=1 "; String user_id = (String)filters.get("user_id"); if( user_id != null && user_id.length() > 0) { sql = sql + " and user_id = " + user_id; } String age = (String)filters.get("age"); if(age != null && age.length() > 0) { sql = sql + " and age > " + age; }
过多的if判断导致sql语句不清晰,我们再来看下rapid-xsqlbuilder的做法
rapid-xsqlbuilder构造SQL例子
示例:
// 清晰的sql语句,/~ ~/为一个语法块 String sql= "select * from user where 1=1 " + "/~ and username = {username} ~/" + "/~ and password = {password} ~/"; // filters为参数 Map filters = new HashMap(); filters.put("username", "badqiu"); filters.put("sex", "F"); XsqlFilterResult result = new XsqlBuilder().generateHql(sql,filters); assertTrue(result.getAcceptedFilters().containsKey("username")); assertFalse(result.getAcceptedFilters().containsKey("sex")); assertEquals("select * from user where 1=1 and username = :username ", result.getXsql());
XsqlFilterResult为处理完返回的东西,包含两个属性xsql,acceptedFilters
被过滤掉的东西:
SQL过滤: /~ and password = {password} ~/
这一段由于在filters中password不存在而没有被构造出来
filters过滤: sex
filters中由于没有类似/~ sex={sex} ~/ 这一段,所以在过滤完的filters中不存在
最终构造生成的结果
HQL: XsqlFilterResult.xsql属性
select * from user where 1=1 and username=:username
构造后返回的Map filters: XsqlFilterResult.acceptedFilters 属性
username=badqiu
语法
语法
/~ {key} ~/
/~ [key] ~/
/~ {key_1} [key_2] ... {key_3} ~/
/~ {key?modifier} ~/
/~ {key?modifier(arg1,arg2) ~/
/~ {key?modifier?modifier?...?modifier} ~/
示例:
/~ username = {username} ~/
/~ password like '%[password]%' ~/
/~ birthDate > {startBirthDate} and birthDate < [endBirthDate] ~/
数据据类型修饰
将Map filters中的数据类型修饰为另外一种类型
/~ {username} ~/
/~ {age?int} ~/
/~ {birthDate?timestamp(yyyy年MM月dd日)} ~/
中括号[]与大括号{}的区别
中括号会直接替换为其值,用于拼接SQL
在XsqlFilterResult.getAcceptedFilters()中不会存在该key的值
如 /~ username like '%[username]%' ~/,如果filters中username=badqiu
则会生成: username like '%badqiu%'
大拓号只是起到标记作用,用于占位符
原始方法是XsqlBuilder.applyFilters(sql,filters);
如"/~ and username = {username} ~/",过滤完还是为 and username = {username}
但在这时我们使用将{username}替换为HQL的:username或是SQL的?号
SQL注入攻击的防范
问题:
拼接的SQL如果不对单引号(有些数据库有反斜杠)进行过滤,则会存在SQL注入攻击问题
解决:
使用SafeSqlProcesser,进行sql过滤
XsqlBuilder builder = new XsqlBuilder(SafeSqlProcesserFactory.getMysql());
SafeSqlProcesser其中的一个源码分析
/** * 过滤单个单引号为双引号的SafeSqlFilter<p> * 适用数据库(MS SqlServer,Oracle,DB2) */ public String process(String value) { if(value == null) return null; return value.replaceAll("'", "''"); // Mysql还需过滤反斜框 }
评论
如果不是,那你只是复制来的。
能否给个例子。
能不能把这个1=1去掉?看着不顺眼
# String sql= "select * from user where 1=1 "
# + "/~ and username = {username} ~/"
# + "/~ and password = {password} ~/";
#
这个sql 能通过代码生成工具生成
那么条件查询就简单多了
[url]http://svn.javascud.org/svn/si/validation/trunk/doc/index.html [/url]
你看下同行显示,validation正在开发,计划下周发布一个版本.
发表评论
-
rapid-framework v3.9新版本发布
2010-07-13 21:17 13569hi,all 本次新版本发布最主要的更新内容 ... -
为velocity,freemarker提供jsp:include功能
2010-06-13 19:26 11461一.介绍 使用JSP的都知道jsp:include指令,可以 ... -
rapid-framework发布新版本: v3.5
2010-03-23 19:01 4541本次的主要更新内容是重新拾起flex,重整了flex插件. 而 ... -
扩展freemarker,velocity,实现模板的管道操作
2010-01-12 20:54 4657操作系统中有一个很重要的功能,就是可以使用管道,即将前一个应用 ... -
扩展Velocity,实现模板的继承
2009-12-28 12:00 5545与我之前的扩展freemarker类似,现新增加三个指令:bl ... -
扩展freemarker,实现模板的继承
2009-12-22 10:11 9291现扩展freemarker,新增加三个指令: @ ... -
spring REST中的内容协商(同一资源,多种展现:xml,json,html)
2009-12-21 14:14 21787接上一篇对spring rest的描述. ... -
在jsp中实现"类"的继承关系
2009-12-09 17:59 72781.介绍 使用过python django模板 ... -
rapid-framework发布v3.0 版本
2009-11-11 09:46 4963虽然spring 3.0及ibatis3还未发布,但rap ... -
iBatis3基于方言(Dialect)的分页
2009-10-19 09:29 23831(注:以下代码是基于ibatis3 beta4的扩展,ibat ... -
与Spring BlazeDS Integration相比,更简单的实现来调用spring bean
2009-10-12 11:15 4169注:后面使用SBI替代Spring BlazeDS In ... -
rapid-framework发布v2.5.0版本
2009-09-21 09:54 2301赶在国庆之前发布一个版本,庆祝国庆,:) 更新内 ... -
rapid-framework工具类介绍一: 异步IO类
2009-05-08 01:16 2293在一些特殊的场合,我们可能需要使用异步的IO来大幅提高性能. ... -
rapid-validation发布v1.5版本
2008-12-09 11:44 8240在线演示:http://www.rapid-framework ... -
rapid-framework v2.x路线图
2008-09-09 20:43 2716在1.0.2发布以后,很多同学认为切换至struts2 ... -
rapid-framework v1.0.x带控制条的演示视频放出
2008-08-20 13:28 2045很多同学报怨rapid-framework的演示视频太快,现在 ... -
rapid-framework发布v1.0.2版本
2008-08-13 11:39 2698该版本主要增加的相关文档导航,及一些模板及目录的调整 在线文档 ... -
很高兴大家下载rapid-framework
2008-08-04 11:42 7205看到有很多人下载,心情蛮爽的,这个就是做开源最高兴的吧. 大家 ... -
正式发布类似rails的框架:rapid-framework,文档补充中...
2008-07-29 09:11 5147基于spring,struts(struts2),hibe ... -
最适合实际开发需要的:<代码生成器>发布:rapid-generator-v1.0
2008-07-22 09:05 4310现阶段内置模板可以生成的包括: 可以生成java的hibern ...
相关推荐
总的来说,Rapid-XSQLBuilder 是一款优秀的工具,它使得动态构造 SQL 语句变得更加简洁、安全,极大地提高了代码的可读性和可维护性,特别适合在代码生成器或者需要动态构建复杂查询的场景中使用。通过掌握其特有的...
它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...
本书详细介绍了T-SQL的内部构造,包含了非常全面的编程参考。数据库开发人员和DBA可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的问题。本书涵盖了T-SQL程序...
它详细介绍了T-SQL的内部构造,包含了非常全面的编程参考。它提供了使用Transact-SQL(T-SQL)的专家级指导,T-SQL是用于SQL Server的最常见的也是功能最强大的编程语言。该书由Itzik Ben-Gan权威执笔,重点关注语言...
Microsoft SQL Server 2005技术内幕: T-SQ程序设计 中文版本的 第一部分 第二部分地址:http://download.csdn.net/source/2680866
本书主要聚焦于T-SQL(Transact-SQL)编程语言的使用,T-SQL是SQL Server使用的SQL方言,它不仅包括标准SQL的功能,还扩展了许多专为SQL Server设计的独特特性。T-SQL编程基础部分涵盖了以下内容: - **SQL语句语法...
它详细介绍了t-sql的内部构造,包含了非常全面的编程参考。它提供了使用transact-sql(t-sql)的专家级指导,t-sql是用于sql server的最常见的也是功能最强大的编程语言。该书由itzik ben-gan权威执笔,重点关注语言...
generator,极易进行二次开发 struts1,struts2的零配置 spring集成及加强,自动搜索hibernate的entity annotation class 集成动态构造sql的工具:rapid-xsqlbuilder 集成javascript表单验证:rapid-validation 集成...
Microsoft SQL Server 2005技术内幕:T-SQL查询 pdf 中文版 第二部分 第一部分地址:http://download.csdn.net/source/2684220
Microsoft.Press.Inside.Microsoft.SQL.Server.2005.T-SQL.Querying
在这个案例中,"附录A_Microsoft SQL Server 2008技术内幕:T-SQL查询.pdf"很可能是对书中T-SQL查询部分的详细补充,可能包含更复杂的查询示例、最佳实践或者常见问题解答。 "TSQLQuerying20090710.zip"这个文件很...
本书是InsideMicrosoftSQLServer2005系列四本著作中的一本
Microsoft SQL Server 2005技术内幕: T-SQ程序设计 Microsoft.Press.Inside.Microsoft.SQL.Server.2005.T-SQL.Querying
——《Microsoft SQL Server 2005 技术内幕:T-SQL程序设计》、《Microsoft SQL Server 2005 技术内幕:T-SQL查询》、《Microsoft SQL Server 2005 技术内幕:查询、调整和优化》、《Microsoft SQL Server 2005 技术...
本文将深入探讨与“sql-map-2.dtd”和“sql-map-config-2.dtd”相关的知识点,以及它们在Ibatis中的作用。 Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句直接写在配置文件中,通过XML映射...
项目名称:多功能SQL构造器SQLBuilder.Core 项目概述: SQLBuilder.Core是一个C#编写的多功能SQL构造器库,旨在简化不同数据库系统下的SQL语句构建工作。该库支持主流的数据库平台,包括SqlServer、MySql、Oracle、...
我找了很久,都是那种hubgit上的那种,一直没明白怎么用,终于后来会了,不明白为什么不直接提供jar包,还要自己生成。...仅支持Oracle, H2, MySql, PostgreSql, SQLServer。包括core和utils,以及source源码
——《Microsoft SQL Server 2005 技术内幕:T-SQL程序设计》、《Microsoft SQL Server 2005 技术内幕:T-SQL查询》、《Microsoft SQL Server 2005 技术内幕:查询、调整和优化》、《Microsoft SQL Server 2005 技术...
基于数据库,内建好数据库的model,并支持多种数据库(mysql,sql server,oracle测试通过) 半手工方式,生成的代码放在某个目录,再手工拷贝回来工作区 易于做二次开发,整个生成器本身就是java源代码,源代码核心十分精简,...
根据给定的文件信息,我们将深入探讨SQL注入的相关知识点,特别是如何通过构造SQL注入点来实现对系统的攻击。首先,我们需要了解SQL注入的基本概念、原理以及防范措施。 ### SQL注入基本概念 SQL注入是一种常见的...