一、 环境准备

1: 连接外围数据库是Mendix的内置功能,不同数据库的连接方式都大同小异,本文以SQL Server为例讲解;

2:本文假设读者是Mendix初级学者,因此对每一步骤作者都尽量表述详尽,熟练学者可1.5倍速阅读。

3:安装清单:

  • Mendix Marketplace - Studio Pro Download (建议安装次新版本)
  • SQL Server 下载 | Microsoft: Developer版
  • 下载 SQL Server Management Studio (SSMS) - SQL Server Management Studio (SSMS) | Microsoft Docs

二、 下载Database Connector及相关配置

假设你已经安装了Mendix Studio Pro并建好了你的项目,在Studio Pro的右上角点击图标(App Store)进入App Store界面(内嵌在Mendix Studio Pro工作区当中)。

在左边目录中选择 Connectors->Data或者直接在搜索框输入 Database, 找到“Database Connector”,点开:

首先点击“Download”按钮下载,默认选择“Add as a new module”将其作为新的组件添加到项目中。

导入后,你可以在项目路径 App Store modules下找到它。

然后,在App Store里点击Document页签下的Database Connector链接,在网页中打开参考文档,查看具体使用信息及注意事项。值得注意的是前提条件的部分:

你需要下载相关的JDBC driver/驱动文件,并解压放到Mendix项目的userlib目录下,然后在Mendix项目中定义数据库连接常量的时候需要将对应的路径信息维护上(下文会讲到),如果你选择的数据库是PostgreSQL就参照这里给的例子。我们的数据库是SQL Server,因此我们点击链接Common JDBC Drivers跳转到下文JDBC Drivers部分来下载我们需要的驱动。

选择我们要的SQL Server数据库,就会到了我们需要下载Driver的地址(https://www.microsoft.com/en-us/download/details.aspx?id=11774),下载即可。

可自选保存在临时的目录下,解压,解压后到目录jre8下(比如~\Microsoft JDBC Driver 6.0 for SQL Server\sqljdbc_6.0\enu\jre8)将.jar (我这里是sqljdbc42.jar)文件拷贝到项目的userlib(我这里是C:\Users\xxx\Documents\Mendix\MyLaunchPad\userlib)目录下。

至此,Mendix Studio Pro里的数据库连接器下载安装工作完成。

三、 数据库中的准备工作

下面我们进到数据库,做一些数据准备工作,包括:建数库,建表和建用户。

当然,首先你要构思好你需要进行操作的数据模型,比如我这里的设计是维护一张服务成本表(Service Cost Rate)。

打开你的数据库管理器,我这里是SQL Server Management Studio。

1. 新建数据库

姑且命名为ExternalDB,保存。

2. 建数据表

根据设计好的表结构建字段及属性。

我的参考信息:

Table: CostRates

CostRateID  (主键)

int

CostDescription

nvarchar(500)

CompanyID

nvarchar(50)

ValidTo

nvarchar(50)

CostRate

decimal(18, 2)

3. 建用户

定义数据库访问用户。在SSMS中,访问路径 Security->Login,右键->New Login (不同数据库的位置可能略有差别,总之是定义一个数据库的访问用户)。

  • 命名为:MXadmin
  • 密码:mendix

将用户设置成为数据库Owner:双击左边的User Mapping, 选中你的数据库“ExternalDB”, 右下角的数据库角色里勾选 db_owner,保存。

这时可以看到该用户已经建成:

四、 Mendix Studio Pro中建数据模型与数据库连接常量

1. 数据模型/Data Model

同样的数据模型,我们在Mendix中也建一遍,数据类型保持一致。

2. 创建数据库访问常量

  • URL:  右键MyFirstModule -> Add other -> Constant:

  • 命名:DB_URL
  • 类型:String
  • 默认值:jdbc:sqlserver://localhost;database=ExternalDB;

回到Mendix Studio Pro,继续建两个常量:

DB_USER:

DB_PASS:

至此,访问本地数据库的准备工作已经就位,下面就开始开发你的应用,实现对数据库的增删改查了。

五、 实现增删改查

1. 应用框架设计

简单描述一下本文所演示的应用页面的主体设计思路。首先应用采用SAP模板,入口为My Launchpad(我的工作面板),点击我的面板中的第一个应用 “成本维护”将跳转至成本维护的概览界面,在这里我们完成增删改查的动作。页面链接部分这里不做赘述,在对应链接属性中配置On Click的响应为“Show a Page”,然后选择默认的List控件即可。看截图:

2. 概览页面数据初始化填充

新建的页面命名为CostRateOverview,用于展示成本的概览信息,并提供增删改查入口。

2.1 调整CostRateOverview页面布局

调整CostRateOverview页面布局,删除不需要的控件。

修改页面抬头和描述;

修改现有字段,属性,将需要展示的信息按顺序排列在页面上: CostDescription, CompanyID, ValidTo, CostRate.

在参数的位置,点击“New”,选择CostDescription.

将参数{1} 添加到字段描述中。

同样的方法修改其他属性字段。

同时确保暂时无事件响应的按钮,其属性中 On Click 响应的值选为Do Nothing.

2.2 数据填充微流设计

选中List控件,从右边的工具框Connector页签下将定义好的Data Entity “CostRates”拖拽到List控件。

弹窗选择通过Microflow/微流的方式来填充数据,勾选掉“Automatically fill the content of the list view”,我们暂时选择手动添加属性字段并通过微流填充数据。

双击左边导航栏中微流名称“Show_CostOverview”进入微流编辑工作区。现在我们来实现从数据库查询CostRates表信息并填入刚才定义的页面的ListView组件中。

如同我们写代码之前需要构思函数架构一样,我们在设计微流之前先要想好它要帮我们干什么:

从指定的数据库ExternalDB读取CostRates表信息并填入刚才定义的CostRateOverview页面的ListView控件中;

<- 而“填入xx控件”这个动作是不是已经通过属性配置/关联好了,那么我的任务描述是不是就可以简化成:

<-从指定的数据库ExternalDB读取CostRates表信息,这里面还蕴含一个内置逻辑(输出的结构必须跟Listview中接收的结构一致是不是,不难想象,这里是DataEntity: CostRates), 于是我就有了我的函数设计:

<-

输入:

数据库访问URL(我已经定义好的常量DB_URL);

数据库访问用户(DB_USER);

数据库访问密码(DB_PASS);

输出:一个DataEntity: CostRates 类型的结构/表(这个参数我好像还没定义吧,没关系,往下看);

好,我们来实现微流:

<-

1. 定义一个DataEntity: CostRates类型的参数传进微流函数,接收查询出来的数据:

微流编辑区提供了非常方便的快捷Action Activity,点一下,在要放置的目的地再点一下,就好了,这里我们来定义一个;

双击Activity,选择Action类型,这里我们要定义一个Object参数,因此选择Create Object.

直接可以选择定义好的Entity 关联进来,非常方便(Select->在弹框里选择你的Entity)。

取个名字方便区分,比如:CostRate_Obj.

这样输出参数就定义好了,可以执行查询函数了。

2. 定义数据库查询

Mendix Studio Pro的 Toolbox给我们提供了很多可以直接拖拽使用的Action,比如我们将要使用到的“Execute Query”, 选中直接拖拽至工作区。

双击Execute Query这个Activity,在弹框里按照之前的设计填入参数即可,像极了我们平时写函数,对不对。

点击每个参数输入区域后面的按钮“Edit”, 按照这个语法格式选择参数即可。

选择常量的时候,只要输入个@字符即可联想出已定义好的常量,支持模糊查找。

按照这种方式,定义好输入参数“Jdbc url”, “User name”, “User password”。

Sql的部分,我们要编辑SQL查询语句来查询数据表信息,格式如下:

'Select CostRateID CostDescription, CompanyID, ValidTo, CostRate from CostRates'

【备注】CostRateID暂时不用显示在界面上,但需要取出,后续进行数据库操作时使用;

Result Object选择刚定义的参数$CostRate_Obj.

输出端:

List name: ListofCostRate (在微流的终端时候使用,作为整个微流的输出)

3. 设置输出格式

在微流的终点,双击,选择输出类型为List,值为刚才定义的List Name $ListofCostRate。

这样微流定义完毕了。

2.3 试运行

点击Run Locally编译试运行 。

点击View进入应用界面。

点击成本维护,查看服务成本Overview界面,因为数据表目前为空,因此没有数据展示。

数据库表添加信息:

添加信息之后再次运行:

3. 添加

页面设计

- 增加的按钮在主页面的右上角

- 新建一条成本记录需要填写一个新的表单,因此需要一个新的Page

- 新建的时候输入的信息包括:成本描述/ CostDescription,公司ID/ CompanyID, 截至时间/ValidTo, 价格/CostRate.

- 输入完成后应该有保存按钮

- 保存成功应该有弹窗提示

- 放弃新建应该有Cancel按钮,并返回上一页面

根据上述设计进行分解实现:

 

 

新建页面CostRateNew

 

Save按钮响应事件 Call a microflow,新建一个微流

 

 实现微流CostRate_InsertUpdate,向数据库插入页面CostRateNew上输入的信息:

定义写数据库的需要用到的参数,以CostRateID为例:

同样方式定义其他参数,完成后如下:

添加一条记录对应就是向数据库插入一条数据,因此下一步我们要执行SQL语句向数据库插入一条记录,插入的值为当前页面上的输入值(上述定义的参数获取)。在Toolbox里找到Execute Statement的动作,拖拽至工作区。

完成之后关闭当前页面,因此我们要在后面加一个Action:Close Page。

同时为了用户友好,我们弹框提示信息已保存,信息中可以引用参数CostRateDescription表明是该条记录已保存,这个Activity叫“Show Message”。

运行程序,验证添加按钮

到数据库中验证记录添加成功:

通过对上述过程尤其是“添加”按钮的详细的介绍之后,我们基本覆盖了Mendix Studio Pro 快速开发的基础操作,因此后续的功能实现我们会介绍基本逻辑总览界面,不再赘述了,如有问题可以后续在讨论。

4. 编辑/修改

编辑/修改的界面设计:

- “编辑”按钮位于每一条成本记录的左下角

- 点击“编辑”按钮后进入新的编辑界面,界面应该跟新建一条记录的界面相似,不同的是新建界面中各属性字段为空,编辑时各属性字段为被编辑的值

- 可编辑的信息包括:成本描述/ CostDescription,公司ID/ CompanyID, 截至时间/ValidTo, 价格/CostRate.

- 输入完成后应该有保存按钮

- 保存成功应该有弹窗提示:某条记录已修改

- 放弃修改应该有Cancel按钮,并返回上一页面

根据上述设计进行分解实现:

点击Edit按钮之后实现一个微流来调出编辑(新建)页面并将当前值填充到页面上。

响应Edit事件的微流主要做两件事情,第一按照CostRateID去数据库读取当前的数据,第二是调出页面CostRateNew并将上一步读出的数据放到页面里供编辑。

'Select * from CostRates where CostRateID = '+ $CostRates/CostRateID+';'

在点击Save按钮的时候,微流CostRate_InsertUpdate会被调用,之前在添加的时候我们已经实现了这个微流,这里要对实现的逻辑做一些修改,使得它也能满足Edit的需求:

- 如果Cost已经存在则Edit,否则新建/添加

- 在Edit这条线上:执行SQL Update语句进行Update

- Close Page

- 弹框提示修改成功

- 回到主流程

因此实现后的微流(核心部分)如下,并配有详细信息参考:

判断条件:

Update所用的SQL语句:

保存并运行:

5. 删除

删除操作没有界面设计,逻辑相对简单:

- 点击删除按钮,调用微流

- 对应数据库条目删除

- 刷新页面

按钮属性:

微流定义:

6. 查询

查询界面设计:

- 查询按钮在设置在页面的右上方,“添加”按钮旁边

- 点击查询按钮会弹出查询输入界面,界面中包含一个输入框,一个查询按钮,一个取消返回按钮

- 输入信息有格式要求(时间关系,这里只按ID搜索)

- 找到的信息应当在新弹出页面展示,只读,有确认关闭按钮

- 如果查不到此项,应该有弹窗提示

Data Model

查询输入框的输入文字需要有对应Data Model设计。

查询按钮定义:

查询主界面定义:

 

微流定义:

 

 

 

 

 

 

Search Result界面:

 

运行与测试:

查询失败:

 

查询成功:

 

 

六、 一些经验性提示

如果遇到连接错误,一般会提示检查防火墙设置,TCP/IP端口是否可用等信息,按要求查看:

  • 检查防火墙设置
  • 检查SQL Server配置


更多信息,请访问以下链接:

Mendix官网:https://www.mendix.com/zh/

Mendix中国论坛:https://forum.mendix.tencent-cloud.com/

Mendix行业解决方案:https://solutions.mendix.com/

Mendix平台指南:https://www.mendix.com/evaluation-guide/

Mendix动画展示:https://www.mendix.com/demos/

感谢阅读!

Mendix一练一动: Mendix Studio Pro连接外围数据库(SQL Server)实现增删改查相关推荐

  1. Java连接sqlserver数据库,并进行增删改查操作

    用编程语言连接数据库是程序员必备的技能,今天我们就来学习一下如何通过Java来连接sqlserver数据库,并实现增删改查操作. 需要用到的工具: Myeclipse,sqlserver数据库,Mic ...

  2. Node连接MySQL数据库进行基本的增删改查操作(一看就会)

    Node连接MySQL数据库进行基本的增删改查操作(一看就会) ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ...

  3. IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查

    IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查 注意: 每个方法对应单个java类,可以自行进行整理汇总到一个类中 一.Java通过JDBC连接到PostgreSQL数据 ...

  4. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)

    Visual Studio 2019连接自动的Sql Server开发版数据库,C#语言 连接字符串: server=(LocalDB)\MSSQLLocalDB;database=master;in ...

  5. Android Studio使用webservice远程访问数据库SQL Server 2008 R2

    首先说一下背景,由于目前个人自学Android Studio,参考度娘实现连接DB的方式,总结出目前主流的两种方式: 1)使用jtds直接访问DB数据库(参考:https://blog.csdn.ne ...

  6. 使用dbcp连接池创建进行表的增删改查

    ---------------------------------------------------------------------------------------------------- ...

  7. 使用python的kazoo模块连接zookeeper实现最基本的增删改查

    from kazoo.client import KazooClient# 连接zookeeper,有些需要登录的填写账号密码 zk = KazooClient(hosts="192.168 ...

  8. c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查

    这里复制的 http://www.bitscn.com/pdb/mysql/201407/226252.html 一.环境配置 1,装好mysql,新建一个C++控制台工程(从最简单的弄起,这个会了, ...

  9. NodeJS里如何连接MySQL并分别操作增删改查

    本文简介 Node.js 里连接 MySQL ,并分别操作增删改查 . 你需要在电脑里安装一下 MySQL ,最好再安装一个数据库管理工具.我使用的是 MySQL Workbench ,这是一款 My ...

最新文章

  1. python画图程序-编程入门06:Python海龟绘图
  2. 包装exp是什么意思_全包装修是什么意思?全包6万装修60平米的房子好不好?-广州亚运城装修...
  3. vaex 处理海量数据_Vaex真香!几秒钟就能处理数十亿行数据,比Pandas、Dask更好用...
  4. java 获取文件大小_阿里Java后端开发面经,面试官都替我感到绝望
  5. css3 选择器_IT兄弟连 HTML5教程 CSS3揭秘 CSS3概述
  6. linux 串口中断_1600字干货 | 大佬讲Linux启动流程(内含福利)
  7. [CMake] set_property 和 set_target_properties
  8. 数据-第10课-循环链表
  9. java delete file 失败_文件无法删除java.io.IOException: Unable to delete
  10. 论用户体验测试:牛逼的功能千篇一律,好的体验万里挑一
  11. 浏览器中performance的基本使用
  12. Centos7修改服务器密码
  13. 你必须知道的 NET(第2版)
  14. Latex中的括号用法总结
  15. 怎么给边框添加图片 css3,用CSS3轻松实现图片边框
  16. 日渐临近的苹果秋季发布会,iOS 11 GM 固件到底提前泄露了哪些秘密?
  17. ExifTool文件鉴定器
  18. 大数据概论 (理论基础)
  19. 一个小白的Thingworx成长记录
  20. filecoin lotus 图形化测试平台pond

热门文章

  1. java一次能迈一级或两级台阶_有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?...
  2. C语言(二)BMP图像 文本数据保存为图像
  3. W3C标准英文文献翻译方案
  4. 数据移动指令-----mov,lea,xchg
  5. 输入某年某月某日,判断这一天是这一年的第几天?(JS实现)
  6. 输出日期为2021年的第几天(switch...case)
  7. Unity捕鱼达人5-----鱼群的生成
  8. python泊松分布_常见概率分布的Python实现
  9. 【PAT甲级 - C++题解】1147 Heaps
  10. 类,__dift__,__len__,__add__,__new__,__init__