访问数据库的方式
WebBuilder默认提供基于JDBC的数据库访问控件和APi来访问数据库,具有灵活的访问方式和高效的性能。这些控件和API提供了从运行SQL,获取数据到自动生成指定类型的脚本等一系列操作。
使用数据库访问控件
数据库访问控件默认位于控件箱DataAccess目录下。
query
查询控件,用于运行SQL语句,返回SQL运行生成的结果集ResultSet或影响记录数。
该控件执行后,其返回结果和输出参数存储在HttpServletRequest对象的attribute中。在ServletScript中可以使用app.run()方法完成相同功能。
dataprovider
数据源控件,用于根据SQL生成指定类型的输出,比如用于表格的JSON语句,用于图片或者下载的流数据等。
configs: dictTableNames
数据字典表名列表(数据字典表就是数据表),多个表名以“,”f分隔。**用于数据源中的字段元数据信息对应到字典表中的同名字段设置的字典信息。**数据库实体表名无需对应到指定的字典表,因为字典信息仅仅通过字段名称来进行对照和识别,因此相同的字典表可以应用到不同的实体表中。如果指定多个字典表时存在重复字段,可以通过设置dictFieldsMap属性来区分。
通俗来讲就是给表格的列加上我们在数据表中给每列加的注释。
updater
数据更新控件,用于根据输入的参数自动对指定数据库表进行增删查改操作。它可以根据需要增删改的数据,自动生成增删改SQL语句。增删改数据中包含了新的记录字段值,也包含了新的需要被修改或删除记录的原值。该控件默认自动启用数据库事务,使所有的增删改操作在同一个事务内处理。该控件还支持批量操作,可以对数据表执行批量的增删改。
tableName
需要更新的实体表名称。所有自动生成的SQL语句均基于该表
mode
数据更新的类型,设置此属性则只更新此种类型
app.update({
tableName:'value',
mode:'update/insert/delete'
})
sqlswitcher
SQL切换控件,用于根据系统指定的默认数据库类型自动切换到对应的SQL语句。
使用数据库访问API
数据库访问API可以方便在Java或者ServerScript中对数据库进行访问。
以下是适用于ServerScript的API:
app.run
用于运行SQL语句,等同于query控件
app.update(config)
执行上下文绑定的insert, update, delete数据库更新操作。
config:配置参数对象,见updater组件
config实例:
app.update({
tableName:'WB_MISC',
mode:'update'
});
app.output(sql, [config], [returnScript])
从数据库获取数据,并且输出指定格式的脚本,图片或者流数据到客户端
sql就是sql语句
config时配置参数对象,见DataProvider控件的使用
returnScript:是否返回脚本,false直接输出,true返回生成的脚本,默认为false.
app.output('select BLOB_FIELD from WB_MISC where ID_FIELD = {?ID_FIELD?}', {type:'object'});
相关控件
store
store封装了客户端的数据模型,可以通过设置url属性来读取后台的数据,这个控件默认位于控件箱Data Access目录。设置autoLoad属性为true可以使store自动加载url指向的数据,如果不设置此属性可以通过store.locad()方法来加载数据。
grid
表格控件。 用以表格的形式显示数据。该控件封装了Ext.grid.panel类
Configs: gridLine
是否显示表格的网格线,默认是false
Configs:multiSelect
允许多选
新建表格
新建click点击事件,点击按钮就新建一行
Wb.addEdit(app.edit1);
Wb
verrifyGrid(Object):boolean
验证可编辑表格数据是否合法。如果非法,系统将焦点转移到第一个非法的单元格
返回ture合法,false不合法
if(!Wb.verifyGrid(app.grid1))
return;
sync(configs)
把表格或者store数据同步到后台。同步操作在一个请求内完成
Wb.sync({
grid:app.grid1,
url:'m?xwl=demo/crud-database-access/simple-save',
message:'正在保存中',
success:function(resp){
app.store.commitChanges();//如果存在多个store可以设置normalName属性或者通过app.grid.store方式找到store对象,执行完这一句应该是表格也更新了。
Wb.toast('已经成功保存数据.');
}
})
setTitile(panel, subTitle)
设置面板的子标题,子标题将以“标题-子标题”的形式显示在面板标题上。
这里的增删查改就是window的标题,添加就是通过ServerScript脚本设置的
app.win.show();
app.win.setIconCls('record_add_icon');
Wb.setTitle(app.win, '添加');
app.isNew = true;
apply(object, config)
把config中的值复制到object中,defaults为config的默认值。
add(object, records)
var newRecords = Wb.add(app.grid1, [{field: 'foo'}, {field:'bar'}]);
其中object是表格或store对象
records是添加包含数据的对象或对象列表
applyIf
如果object中不存在相同名称的值,则把config中的值复制到object中
返回的还是object对象本身
var values;
values = Wb.applyIf(Wb.getValue(win), Wb.getData(app.editRec, true));
getData(records, [mergeFields], [fieldNames])
获取表格记录中的数据对象。
records记录或数组。如果值为grid或store将获取表格中所有记录数据。
mergeFields:是否合并记录原始值和修改值,原始记录的字段加#前缀。默认为false
返回记录或记录组成的列表。
update(record, data, commit)
把指定对象的数据更新到记录中。如果对象的属性未在记录中找到对应的字段,该对象属性将被忽略。
record:需要更新的记录
data:数据对象
commit:更新完成之后是否自动提交,默认为true.
setValue(components, values)
对指定控件下的一组控件进行赋值, 其值由values对象指定,values中的每一个子项的名称为控件为itemId,值为控件值
Wb.setValue(win, {text1:'foo', date1:new Date()});
del(object, [config])
删除表格中选择的记录。 首先提示确定是否删除,然后向后台发送请删除数据请求, 最后在请求返回后删除表格中的数据
object:表格或者store对象
configs配置参数
- url: 后台url地址
- params: 参数对象
- failure:调用失败后触发的事件
- success:调用成功后触发的事件
- titleField:用户提示信息的标题字段名称。
window
弹出的可拖动并调整大小的容器控件,用于实现应用的窗口。该控件疯转了Ext.window.window类
editWin
指定该窗口为编辑窗口,编辑窗口是指dialog为true,autoReset为true的窗口
forceController
应该是必须是字符串的类型
ok(win, options)
如果窗口是对话框,该事件将在点击确认按钮或按回车键时触发.
obj就是该事件。
getValue(compoents, [itemIds], [getFileName], [excludeTextValue])
要获取指定控件及其所包含的所有控件的值和显示文本组成的对象,对象中每一个值的名称为指定控件的itemId,显示文本的名称为指定控件的itemId加前缀’%’.只有具有getValue()方法的控件的值才能被获取。如果控件还具有getTextValue()方法。则其显示文本也将被提取。如Text控件将获得值,conbo控件将获得值和显示文件,panel控件不获得值(添加getValue()方法除外)。如果控件下存在重复itemI的()控件,则只返回第一个控件值,其余重名的控件将被忽略。Example:
var jsonObject1 = Wb.getValue(app.window1);//获取window1下所有控件的值组成的对象
var jsonObject2 = Wb.getValue([text1, date1]);//获取text1和date1的值组成的对象。
Parma
默认窗口
添加默认窗口为隐藏,非模态,可调整大小,可拖动,关闭时默认隐藏的窗口。
设置model属性为true可以模态显示窗口,
设置autoShow属性为true可以在窗口关闭(隐藏)时自动重置窗口内所有组件。
当需要显示窗口时,可以使用类似以下的代码:
app.win.show();
消息框
win.toast()
显示无标题栏的自动隐藏的消息窗口
sys:系统参数和变量
sys.id
当前发起请求时服务器产生的id号,每次请求id均唯一
今天将将做完这个basic-dialog-edit,基本所有知识点都在这篇博客里面,明天再做一遍加深以下。