- 浏览: 2617204 次
- 性别:
- 来自: 小胖儿的大城
文章分类
最新评论
-
ni4wangba0:
ni4wangba0 写道亲测,算法有问题。对不起,其实是我自 ...
谈谈"求线段交点"的几种算法(js实现,完整版) -
ni4wangba0:
亲测,算法有问题。
谈谈"求线段交点"的几种算法(js实现,完整版) -
kers007:
苹果不让Webapp 在appstore 里发布,我不知道对 ...
苹果真的要在 AppStore 里封杀 WebApp 吗? -
striveandlive:
fins = js大牛
[原创]GT-Template, 一个超轻量级的js模板工具. -
AlwaysYang:
基础扎实的才能行走天下。
关于body的"大小"在ie和ff下的一些基础知识
ECSide 里加入了 easyList特性。可以通过在xml里配制sql语句来快速的展现列表。
最近我将该功能模块进行了重构,使其可以脱离ecside来使用,从而可以用来简化其他的数据库操作。
具体用法结合下面的例子来讲解:
示例 :
对 USER_INFO 表进行查询。 查询条件为 USERNAME GENDER。
第1步:定义spring文件:
第2步,在适当的位置(如BO中)执行下列java代码
ok,执行完了,执行的每条结果会放入MAP,所有的MAP最后放入LIST
Map的Key是SQL语句执行结果的各个列的名字。
其中 #{USERNAME} #{GENDER} 为参数在传入的参数Map中的key.
其中 #{IF..} 字句用来拼装SQL.。
其语义为 如果满足条件 就把IF内的字符串拼接到有效的SQL语句中。
支持简单的条件:
A<B : #{IF:A#{_L}B}....{/IF}
A>B : #{IF:A#{_G}B}....{/IF}
A=B : #{IF:A=B}....{/IF}
A!=B : #{IF:A!=B}....{/IF}
A<=B : #{IF:A#{_L}=B}....{/IF}
A>=B : #{IF:A#{_G}=B}....{/IF}
A为参数(的KEY), B为数值,可以是EMPTY NULL 字符串 数字 等如
#{IF:USERNAME!='admin'}....{/IF}
#{IF:AGE #{_L}= 18}....{/IF}
注意 < >于号出现在 sql语句中时也请使用 #{_L} #{_G}
#{IF:A=B}....{/IF} 内部 可以是任何语句,也可以使用任何参数。不一定非要是A.
例如 这样也是可以的
#{IF:USERROLE='1'} and (GENDER = ${XXXX} or AGE ${_L} 25 {/IF}
传入参数可以使用组件中提供的getParameterMap方法从request中自动生成,相应的代码很简单:
如果查询叶面的input区域是
姓名:<input type="text" name="i_user_name">
性别:<input type="text" name="i_user_gender">
通过 getParameterMap 取得参数map后,如果想直接调用sql
那么sql需要改动为
一个DataAccessModel bean里可以写入多个sql.
可以是 delete update insert select {call...
例如下面这个
其中 #{OUT:...} 用来标识 存储过程的输出参数。
其中的 demo.MyDataAccessModel 继承自 org.ecside.easyda.DataAccessModel
你可以在这个类里覆盖父类的registerInterceptors方法,为每个sql添加前后拦截器。
代码如下:
已知不足:
在事务控制方面做的工作几乎为0。
#{IF}功能不够强大,不支持复杂的逻辑判断。
所以目前不适合用在复杂的场合。
另:整个过程输入 输出的sql类型 全是string,所以如果要做类型方面的转换,需要自己在sql语句级别进行。
这篇文章没有提供代码,打算下和 ecside 1.1 final一起推出。
希望大家可以针对这个模块提出些建议和意见 谢谢大家了。
最近我将该功能模块进行了重构,使其可以脱离ecside来使用,从而可以用来简化其他的数据库操作。
具体用法结合下面的例子来讲解:
示例 :
对 USER_INFO 表进行查询。 查询条件为 USERNAME GENDER。
第1步:定义spring文件:
<bean id="testQuery1" class="org.ecside.easyda.DataAccessModel"> <!-- 注入一个标准的数据源 --> <property name="dataSource" ref="test_datasource" /> <property name="sqls"> <map> <!-- 这个key的名字随便取 --> <entry key="queryInfoByNameGender" > <value> select * from user_info where 1=1 #{IF:USERNAME!=EMPTY} and username like #{USERNAME} #{/IF} #{IF:GENDER!=EMPTY} and gender=#{GENDER} #{/IF} </value> </entry> </map> </property> </bean>
第2步,在适当的位置(如BO中)执行下列java代码
// 这里也可以使用 Ioc 注入。 DataAccessModel dam=(DataAccessModel)factory.getBean("testQuery1"); //parameterMap为传入参数,key为USERNAME GENDER。 List list=(List)dam.executeQuery("queryInfoByNameGender", parameterMap);
ok,执行完了,执行的每条结果会放入MAP,所有的MAP最后放入LIST
Map的Key是SQL语句执行结果的各个列的名字。
其中 #{USERNAME} #{GENDER} 为参数在传入的参数Map中的key.
其中 #{IF..} 字句用来拼装SQL.。
其语义为 如果满足条件 就把IF内的字符串拼接到有效的SQL语句中。
支持简单的条件:
A<B : #{IF:A#{_L}B}....{/IF}
A>B : #{IF:A#{_G}B}....{/IF}
A=B : #{IF:A=B}....{/IF}
A!=B : #{IF:A!=B}....{/IF}
A<=B : #{IF:A#{_L}=B}....{/IF}
A>=B : #{IF:A#{_G}=B}....{/IF}
A为参数(的KEY), B为数值,可以是EMPTY NULL 字符串 数字 等如
#{IF:USERNAME!='admin'}....{/IF}
#{IF:AGE #{_L}= 18}....{/IF}
注意 < >于号出现在 sql语句中时也请使用 #{_L} #{_G}
#{IF:A=B}....{/IF} 内部 可以是任何语句,也可以使用任何参数。不一定非要是A.
例如 这样也是可以的
#{IF:USERROLE='1'} and (GENDER = ${XXXX} or AGE ${_L} 25 {/IF}
传入参数可以使用组件中提供的getParameterMap方法从request中自动生成,相应的代码很简单:
public static Map getParameterMap(HttpServletRequest request) { Map parameterMap = new HashMap(); Enumeration names = request.getParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); String[] s = request.getParameterValues(name); if (s != null) { if (s.length == 1) { parameterMap.put(name, request.getParameterValues(name)[0]); } else { parameterMap.put(name, request.getParameterValues(name)); } } } return parameterMap; }
如果查询叶面的input区域是
姓名:<input type="text" name="i_user_name">
性别:<input type="text" name="i_user_gender">
通过 getParameterMap 取得参数map后,如果想直接调用sql
那么sql需要改动为
<entry key="queryInfoByNameGender" > <value> select * from user_info where 1=1 #{IF:i_user_name!=EMPTY} and username like #{i_user_name} #{/IF} #{IF:i_user_gender!=EMPTY} and gender=#{i_user_gender} #{/IF} </value> </entry>
一个DataAccessModel bean里可以写入多个sql.
可以是 delete update insert select {call...
例如下面这个
<bean id="myEasyDA" class="demo.MyDataAccessModel"> <property name="dataSource" ref="test_datasource" /> <property name="sqls"> <map> <entry key="baseInfo1" > <value> {call CM_CUST_REAL_INFO_P( #{I_SERVICE_KIND}, #{I_SERVICE_NO}, #{I_CITY_CODE}, #{I_SERVICE_ID}, #{I_CUSTOMER_ID}, #{OUT:OUT_F_CUST_NAME}, #{OUT:OUT_F_GENDER}, #{OUT:OUT_F_DUTY}, #{OUT:OUT_F_PRODUCT_NAME}, #{OUT:OUT_F_POINT_VALUE}, #{OUT:OUT_F_STATUS}, #{OUT:ON_FLAG}, #{OUT:OS_PROMPT} )} </value> </entry> <entry key="updateUser" > <value> update user_info set passwd=#{PASSWD} , userrole=#{USERROLE} , email=#{EMAIL}, gender=#{GENDER} WHERE userid=#{USERID} </value> </entry> <entry key="deleteUser" > <value> delete from user_info WHERE userid=#{USERID} </value> </entry> <entry key="getUserMemo" > <value> select MEMO,EMAIL from user_info WHERE userid=#{USERID} </value> </entry> </map> </property> </bean>
其中 #{OUT:...} 用来标识 存储过程的输出参数。
其中的 demo.MyDataAccessModel 继承自 org.ecside.easyda.DataAccessModel
你可以在这个类里覆盖父类的registerInterceptors方法,为每个sql添加前后拦截器。
代码如下:
public class MyDataAccessModel extends DataAccessModel { public void registerInterceptors(){ addInterceptor(new DataAccessInterceptor("updateUser"){ public void before(Map parameterMap, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void after(Map parameterMap, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute(ECSideConstants.C_UPDATE_RESULT_MESSAGE,request.getParameter("USERNAME")); ServletUtil.writeDefaultTextToClient(parameterMap, request, response); } }); addInterceptor(new DataAccessInterceptor("deleteUser"){ public void before(Map parameterMap, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void after(Map parameterMap, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute(ECSideConstants.C_UPDATE_RESULT_MESSAGE,request.getParameter("USERNAME")); ServletUtil.writeDefaultTextToClient(parameterMap, request, response); } }); } }
已知不足:
在事务控制方面做的工作几乎为0。
#{IF}功能不够强大,不支持复杂的逻辑判断。
所以目前不适合用在复杂的场合。
另:整个过程输入 输出的sql类型 全是string,所以如果要做类型方面的转换,需要自己在sql语句级别进行。
这篇文章没有提供代码,打算下和 ecside 1.1 final一起推出。
希望大家可以针对这个模块提出些建议和意见 谢谢大家了。
评论
2 楼
fins
2007-02-06
是 1=1 但不知道为什么 贴上来就变成 11=1 了
1 楼
afacd
2007-02-06
where 11=1
为什麽一个1是红色、一个1是蓝色?
为什麽一个1是红色、一个1是蓝色?
发表评论
-
那些成天说我的GT-Grid抄袭的人注意了
2009-03-19 22:01 10298你们能够在浩瀚的网络中找到 sigmawidgets htt ... -
[发布]GT-Grid 1.42 版 ★& "前后台结合示例"★2009-01-15更新
2009-01-15 02:41 27570=============================== ... -
[发布]GT-Grid 1.36 版 ★& "前后台结合示例"★2008-12-01 12AM 更新
2008-12-01 01:27 10483(最后更新时间 :12月1日 中午12点时, 修正了 1.36 ... -
GT-Grid 近期将会发布一个bug修正版本,然后将会进行较大的重构
2008-11-11 00:12 3890GT-Grid 近期将会发布一个bug修正版本, 主要修正上一 ... -
[发布]GT-Grid 1.25 版 ★& "前后台结合示例" ★2008-10-21 更新
2008-10-21 17:25 19852首先 先道个歉. 之前许诺过 10月20日之前发布,结果迟到了 ... -
对于复杂javabean到json串的转换,建议使用FlexJSON
2008-10-16 11:23 9931gt-grid自带的那个 javaBean与json的转换工具 ... -
[通知] GT-Grid 讨论群 变更
2008-10-10 15:54 3046GT-Grid的群建立至今, 用户早已满员, 每日还有很多申请 ... -
10月中旬支持导出excel和csv的gt-grid会推出
2008-10-04 21:19 270210月中旬支持导出excel和csv的gt-grid会推出 ( ... -
[发布]GT-Grid 1.18版 & "前后台结合示例"更新 ★2008-09-12发布
2008-09-12 16:40 12689这个版本带有 与java后台结合的示例. 单独的最新版本的 ... -
调查: 关于GT-Grid导致IE崩溃的问题
2008-09-09 15:39 4222有网友反应 对GT-Grid进行操作时 会导致IE崩溃. ... -
[发布] GT-Grid 1.15 版 (080908发布) ★
2008-09-08 14:10 4217GT-Grid 1.15版 说明文档. 这篇文档主要说明一些 ... -
[发布] GT-Grid 1.12 版 (080904发布) ★
2008-09-03 11:02 5496GT-Grid 1.12版 说明文档. 这篇文档主要说明一些 ... -
奥运结束, GT启航
2008-08-25 10:11 2911前一阵由于关注奥运 GT做的工作比较少 奥运结束了 GT该再 ... -
最近奥运,GT的开发暂停一段时间,抱歉了
2008-08-18 20:13 19648月8号之后 GT的更新速度缓慢了,我回答问题也没有以前及时了 ... -
[发布] GT-Grid 1.0 奥运版 (080808发布) ★ without doc
2008-08-08 17:17 19489由于文档工作滞后 导致我本来放弃了今天发布的念头 但是还是不忍 ... -
GT-Grid 1.0 基础教程(十二)
2008-08-05 02:06 17530GT-Grid 1.0 基础教程(十二) 教程说明: 这是一 ... -
GT-Grid 1.0 基础教程(十一)
2008-08-03 22:29 8240GT-Grid 1.0 基础教程(十一 ... -
GT-Grid 1.0 基础教程(十)
2008-08-03 00:52 16800GT-Grid 1.0 基础教程(十) 教程说明: 这是一个 ... -
GT-Grid 1.0 基础教程(九)
2008-07-28 00:43 15637GT-Grid 1.0 基础教程(九) 教程说明: 这是一个 ... -
我的两点请求, 麻烦关注GT和ecside的朋友看一下,谢谢了
2008-07-27 21:55 30151 恳请大家以后不要通 ...
相关推荐
该系统的设计考虑了智能快递存取系统的适应性和扩展性,采用模块化设计的方法,进行智能快递存取系统的结构设计。 智能快递存取系统的主要功能包括: 1. 自动存储:智能快递存取系统可以自动存储快递包裹,不需要...
3. 内存数据操作:数据被送入内存中的归档数据队列,并进行缓冲处理,以减少对磁盘操作的次数和提高数据存取效率。 4. 磁盘归档:缓冲在内存中的数据最终被归档到磁盘文件中,完成数据存储过程。 ### OPC UA规范中...
ORACLE 数据字典与视图 ORACLE 数据字典是 ORACLE 数据库系统启动后总是可用的,它驻留在 SYSTEM 表空间中。数据字典包含视图集,在许多情况下,每一视图集有三种视图包含有类似信息,彼此以前缀相区别,前缀为 ...
第7章-数据存取:文件.ipynb
数据库模块是软件系统中至关重要的组成部分,它负责管理和存储数据,使得应用程序能够高效、安全地进行数据的存取。在本讨论中,我们将深入探讨数据库模块的核心概念、设计原则以及常见的实现技术。 首先,数据库...
4. **数据库访问模块**:与各类数据库系统(如MySQL、SQLite等)交互,方便数据存取和管理。 5. **图形用户界面模块**:创建窗口、按钮、列表框等各种控件,提升用户交互体验。 6. **多媒体模块**:处理音频、视频、...
12. **数据存取模块**:分别处理借阅、书籍和读者的数据存取,确保数据安全。 13. **数据加密与备份模块**:保障数据的安全,防止数据丢失或泄露。 14. **远程数据同步模块**:在多地点的图书馆网络中实现数据的同步...
在Visual Basic 2005中,文件I/O(Input/Output)和数据存取是程序开发中的核心技能,尤其对于处理磁盘上的文件和数据至关重要。本章内容主要聚焦于磁盘、文件以及文件处理的基本操作,为开发者提供实用的范例和技巧...
2. **数据库模块**:支持连接和操作各种类型的数据库,如SQL Server、MySQL等,简化了数据存取和处理的代码。 3. **网络通信模块**:用于实现网络通信功能,如HTTP请求、TCP/IP连接,便于开发网络应用。 4. **加密...
2. 空间数据存取效率:GIS系统的核心,直接影响系统的运行和用户体验。 3. 源数据处理:数据导入前的预处理,是影响空间数据库性能的关键环节。 4. 数据量大小:数据量越大,存储需求越高,可能影响存取速度。 5. ...
4. 数据库模块:支持数据库操作,如SQL查询、数据存取等。 5. 第三方接口模块:用于与第三方软件或硬件交互,如DLL、ActiveX控件等。 6. 专业领域模块:针对特定领域的应用,如图像处理、音频视频处理等。 学习...
5. **数据库访问模块**:使用J2ME的RMS(Record Management System)存储用户设置、密钥等数据,并提供接口供其他模块存取。 6. **用户界面模块**:实现与用户的交互,包括接收输入、显示结果,使用J2ME提供的高级...
以下详细介绍了该模块的特点及应用范围。 产品特点: 1. EM1000模块包含100Base/T以太网络接口,支持自动MDIX功能,能自动适应线序配置,无需手动调整。 2. 内建高达1024KB的Flash内存,适用于存储固件、应用程序和...
【基于Oracle数据库与ArcSDE的空间数据存取优化】 随着空间信息技术的快速发展,Oracle数据库作为关系型数据库的重要代表,其规模不断扩大,存储空间数据的需求日益增长。为了应对海量空间数据的管理和高效存取,...
4. **数据库访问模块**:提供与数据库系统交互的接口,如MySQL、SQL Server,方便进行数据的存取和处理。 5. **多媒体模块**:支持音频、视频的播放和处理,可用于开发媒体播放器或者进行音视频编辑。 6. **加密...
"数据结构图书管理系统.pdf" ...本文档详细介绍了数据结构图书管理系统的设计和实现,涵盖了系统的设计目的、设计内容和要求、数据结构、功能模块详细设计等方面,展示了系统的整体架构和核心代码。
《Visual C# 2005 文件IO与数据存取秘诀》是一本深入探讨C#编程中关于文件输入/输出(I/O)和数据存储技术的专业书籍,由章立民研究室著。这本书的重点在于教导读者如何高效地管理和操作文件,以及如何在C#环境中...
- data-access-module(数据访问模块):负责数据存取操作。 - web-module(Web模块):处理HTTP请求和响应的模块。 2. **配置文件共享** - **配置文件位置**:在"common-config"模块中,我们可以创建一个名为`...
通过取模块基址,我们可以定位到特定模块的内存区域,进而可以读取或修改其中的数据,甚至调用其中的函数。 实现“取模块基址”通常需要使用系统API函数,例如`GetModuleHandleA`或`GetModuleHandleW`。这些函数...