基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一

摘要:
上图显示了ajax加载页面数据,函数参数s_pageIndex是当前页面,初始加载在1中传递。fillTableData函数用于填充表数据。此功能可以是通用的。它会自动将json中的键与上面html表中th的名称值进行匹配,以获得要填充数据的值。

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一

1.此框架方便简洁,便于学习研究。除了基本的增删改查外,还有分页,兼容分页的多表查询,同一业务处理时多次数据库操作仅需要打开一次数据库,反射对象映射赋值,分页返回集合的json封装函数,自定义对象,NLOG日志记录,前端H+框架,sweetalert、Sortable、layer、swal等各种效果插件.....

2.本文主要介绍:
    框架基本结构;
    兼容分页的多表查询(仅打开一次数据库,标准的分页+多表sql语句)。

3.其余的自己研究学习扩展或者自行搭建框架时可参考。
    


结构图如下:
 基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第1张




第二张

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第2张


=====================
下面开始简单举例说明多表查询分页在此项目的应用:
查询以ajax形式:
流程为: ajax请求,查询参数为表单序列化,请求获取返回结果集合json,调用通用js函数进行html拼接,利用laypage生成分页代码。
效果图为:
基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第3张


下图为界面的html和js:name值和返回的json对象key一致,这样就可以智能填充数据value,其中角色是多表查询出来的,下面介绍后台代码的时候会说到。
基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第4张


基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第5张



上面图为ajax加载分页数据,函数参数_pageIndex为当前页,初始加载传入1即可,其中fillTableData函数为填充table数据,
此函数可以通用,根据上面html 的table中th 的name值来自动匹配json中的key取value填充数据。

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第6张


好了来看请求的控制器代码
基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第7张



没错就两行,此处仅有两行代码,有木有! (好了 大招在logic业务逻辑层里面)。

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第8张


 这个函数主要是处理查询条件的,由于每个业务模块的查询字段和条件不一,所以还得手写,只不过这里是动态拼接表达式 而非sql语句。之所以可以这样干是因为需要一些引用:看下图

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第9张


 那么真正的获取数据集合及多表查询(角色名称)在下面这个函数GetPageList,注意看下面代码的注释

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第10张


 注意有个自定义对象 PagerSYSUser,下面给出定义
基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第11张


生成的数据库访问sql语句(多表+分页)(本例使用的oracle)

 基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第12张


  。。。。。基本完工=======================================
值得注意的小地方有:

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第13张

 此处两种写法,如果使用第一种写法的话,省去多表关联,那么就得在对象里的属性指定: 如下图

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第14张


 其中返回集合对象json序列化方法:

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第15张


 在这里
 
基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第16张



======实用: 多表指定字段查询:==================
这里可以指定多表的查询中 指定每个表的指定字段查询,返回结果的对象属性和其属性一致即可自动赋值。

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第17张



生成的sql如: 只查询了W_SYSUSER表的ADDRESS和W_ROLE表的RNAME两个字段。

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第18张




补充:多表查询字段时候,如果两个表有同名字段,那么返回对象的属性命名写法为{表名}{字段名}如下例:
基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第19张
注意表名首字母大写,后面一定小写,然后字段名的首字母一定大写,后面小写!
那么生成的sql语句为: N_COACH.NAME as N_coachName ,N_STUDENT.NAME as N_studentName, 

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第20张






框架源码 :
(之前网盘链接失效,源码找作者)

servicestack.ormlite
https://github.com/ServiceStack/ServiceStack.OrmLite ;

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第21张


 

=============2016-9-21 更新 在servicestack内使用dapper 支持sql 提高灵活性


基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一第22张


 

免责声明:文章转载自《基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇从0来搭建超灵活的MVP商用框架<一>-------从MVC至MVP的转变、通用网络切换框架core文件找不到了下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构)

            从hadoop框架与MapReduce模式中谈海量数据处理 前言     几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,认为它们非常是神奇,而神奇的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,认为Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话...

怎么理解Laravel的核心架构

使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?今天就和大家详聊一下。 首先应该了解laravel框架的架构模式(设计核心,laravel 框架是使用服务组件化的开发模式开发的,laravel框架就是由不同的服务组件构成的...

5款vue前端UI框架

Vue.js是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。 实用的 Vue.js组件库可以帮助我们快速搭建页面,下面介绍小编认为比较受欢迎的五个vue前端ui框架。 TOP5——Vue-Blu Vue-Blu是基于Vuejs和Bulma开发的开源UI组件库。旨在为PC端的前端开发(特别是中后台产品)提供一...

pgsql数据库分页排序问题

order by id desc limit 5;//输出前五行刚开始我以为我写错,后来一问,原来是我在js获取数据的时候少打了空格,所以 where 后面要打空格, "desc " 后面 也要打空格。其实这个分页排序问题还蛮多的。具体的视情况而定。...

初识gauge自动化测试框架

segmentfault阅读 官方网站:https://docs.gauge.org/latest/index.html ###介绍: Gauge是一个轻量级的跨平台测试自动化工具,可以使用不同的语言中编写测试用例的能力。Gauge本质上是一个BDD(行为驱动开发)测试框架。如果你了解BDD那么将会比较容易的了解了Gauge工具的使用。 相比较一般的BD...

Paginator分页

1,分页 Django提供了数据分页的类,这些类被定义在django/core/paginator.py中 对象Paginator用于对列进行一页n条数据的分页运算 对象Page用于表示第m页的数据 2,Paginator对象 方法init(列表,int):返回分页对象,参数为列表数据,每面数据的条数 属性count:返回对象总数 属性num_pag...