OQL官方教程: 在线手册
Query data from the Mendix database and the result will be mapped to a Mendix entity. The example below is part of the Example module within the project, located on the GitHub repository.
Considering the following domain model:
One can execute a query obtaining all objects of ExamplePerson as a table. The rows within this table can be converted to non persistent entities for further usage. Therefore a ExamplePersonResult non persistent entity is modeled.
Parameters can be used using their corresponding actions (for each data type there's one activity defined:
All parameters should be added before executing an OQL query.
Adding an parameter requires:
The name of the parameter, without a $ (e.g. Gender). The value. Executing an OQL query requires:
The OQL statement. A resulting entity (e.g. OQLExample.ExamplePersonResult). Amount. Offset.
After executing an OQL query, all previously set parameters are cleared.
The example query used to obtain the ExamplePersonResults are is:
SELECT P.id ExamplePersonResult_ExamplePerson, P.Name Name, P.Number Number, P.DateOfBirth DateOfBirth, P.Age Age, P.LongAge LongAge, P.HeightInFloat HeightInFloat, P.HeightInDecimal HeightInDecimal, P.Active Active, P.Gender Gender FROM OQLExample.ExamplePerson P WHERE P.Active = $Active AND P.Age = $Age AND P.DateOfBirth = $DateOfBirth AND P.Gender = $Gender AND P.HeightInDecimal = $HeightInDecimal AND P.HeightInFloat = $HeightInFloat AND P.LongAge = $LongAge AND P.Name = $Name AND P.Number = $Number AND P/OQL.MarriedTo/OQL.ExamplePerson/ID = $MarriedTo
In the example above, the resulting columns Name, Number, DateOfBirth, Age, etc. are mapped to their corresponding attributes in ExamplePersonResult. The column ExamplePersonResult_ExamplePerson is mapped to the association (so one can retrieve the original persistent entity if needed).
// BEGIN USER CODE List<IMendixObject> result = new LinkedList<>(); try { /* 抓包结果: SELECT `A`.`id` AS `BlogVO_Blog`, `A`.`blognum`, `A`.`title`, `B`.`sortname`, `A`.`ordernum`, `A`.`viewcount` FROM `common$blog` `A` LEFT OUTER JOIN `common$blog_sort` `atj1Common$Blog_Sort` ON `atj1Common$Blog_Sort`.`common$blogid` = `A`.`id` LEFT OUTER JOIN `common$sort` `B` ON `B`.`id` = `atj1Common$Blog_Sort`.`common$sortid` WHERE 1 = 1 LIMIT 5 */ String SQL = "SELECT " + "A.ID BlogVO_Blog ,A.BlogNum,A.Title, B.SortName,A.OrderNum,A.ViewCount " + "FROM Common.Blog A " + "LEFT JOIN A/Common.Blog_Sort/Common.Sort B " + "WHERE 1=1 "; BlogSearchForm blogSearchForm = this.BlogPageHelper.getBlogPageHelper_BlogSearchForm(); Map<String, Object> paramMap = new HashMap<>(); // 标题 if (StrUtil.isNotEmpty(blogSearchForm.getTitle())) { SQL += " AND A.Title LIKE $Title "; paramMap.put("Title", "%" + blogSearchForm.getTitle() + "%"); } // 查看次数 if (StrUtil.isNotEmpty(blogSearchForm.getViewCount())) { SQL += " AND A.ViewCount = $ViewCount "; paramMap.put("ViewCount", blogSearchForm.getViewCount()); } // 所属分类 Sort sort = blogSearchForm.getBlogSearchForm_Sort(); if (ObjUtil.isNotEmpty(sort)) { SQL += " AND B.ID = $Sort "; paramMap.put("Sort", sort.getMendixObject().getId()); } result = DbHelper.getMendixObjectListByOQL(getContext(), SQL, paramMap, BlogVO.entityName, 5L, 0L); } catch (Exception e) { LogHelper.error("【搜索文章】", e.getMessage(), e); } return result; // END USER CODE