概述

SAF是一套简易的开发Java应用系统的框架。SAF就是Simple Application Framework的缩写。

说到Java应用开发框架,早些年我们用得最多的是Spring+Struts+Hibernate(简写为SSH),近些年用得更多的是Spring+SpringMVC+MyBatis(简写为SSM)。这些都是经典的Java开发框架,为Java应用系统的开发提升了开发的效率。

笔者在最近若干年开发Java系统的过程中,也是经常琢磨着如何优化系统框架,如何简化开发工作,如何更高效地编程。笔者选择的道路是自己编写了一套框架代码,所以有了SAF。

目前SAF提供了类似Spring的IoC、AOP,提供了ORM功能和缓存功能,也有自己的MVC架构,除了轻度使用了Spring外,Struts/Hibernate/SpringMVC/MyBatis都没有用到。

应用SAF开发最大的特点,就是简单、高效,易学易用,此外也有很好的扩展性,能够普遍适应多种Java应用系统开发的需求。

开发准备工作

首先我们建立一个工程(假设Project代码总包名为”study”),有如下的代码结构:

还要引用一些jar库,包括Spring库等,还有就是SAF公共代码库jsaf.jar
暂时我们不讲各个包和类的作用,框架类代码是很少变动的,我们开发时主要涉及到entity包和service包。

先从一个简单的例子入手

例如我们有一个用户表:

CREATE TABLE tb_user {user_id varchar(20) ,user_name varchar(100) ,mobile_nbr(11)
}

当需要处理一个新的实体类的时候,我们基本上只需要做三件事情:

1、增加实体类标记;2、新增实体模型类;3、新增实体服务类。

以用户表为例:

增加实体类标记:修改study.consts.E 类, 增加一行对用户实体类的标记:

public static final String USER = "user"

增加实体模型类:在study.entity包下新建 User类

@EntityAnno(classId=E.USER, table="tb_user")
public class User extends Entity {private String mobileNbr;public String getMobileNbr() {return mobileNbr;}public void setMobileNbr(String mobileNbr) {this.mobileNbr = mobileNbr;}} 

我们再看看增加、修改、删除、查询是怎样编写的:

public class UserService extends EntityService<User> {public ServiceResult addUser(ClientRequest request) {String name = request.get("name");User user = new User();user.setName(name);this.insert(user);return new ServiceResult();}public ServiceResult editUser(ClientRequest request) {String id = request.get("id");String name = request.get("name");User user = this.get(id);user.setName(name);this.update(user, "name");return new ServiceResult();}public ServiceResult deleteUser(ClientRequest request) {String id = request.get("id");this.delete(id);return new ServiceResult();}@Overrideprotected QueryRequest listQuery(ClientRequest request, String queryType) {String name = request.get("name");QueryModel model = new QueryModel();if (!isNull(name)) {model.addWhereItem("user_name like ?", "%"+name+"%");}return new QueryRequest(model);}
}

至此,关于用户实体的增加、修改、删除、查询功能的后台功能,就完成了!

上述关于用户数据的处理,我们没用到任何配置文件,注解也只用到了一个。

是不是觉得很简单?

我们还可以来对比一下,如果是用主流的SSM框架,我们要做哪些事情——

  1. 需要建立实体类 User.java
  2. 需要建立MyBatis映射器配置文件 UserMapper.xml
  3. 需要建立MyBatis映射器接口 UserMapper.java  (也有很多人改名为UserDao)
  4. 需要建立服务接口  IUserService.java
  5. 需要建立服务实现类 UserService.java
  6. 需要建一个Spring MVC控制器 UserController.java

SSH框架实例

SSM框架实例

相同的功能,SSM要建6个文件(SSH也差一样),而JSAF只需要做第1和5两项,很明显JSAF比起SSM要简单多了。

好,现在我们初步了解了SAF框架开发的简易性。

SAF有哪些独特的技术特点,这种简易性是如何实现的?

后续将会逐一分解,敬请关注。

Java应用简易开发框架SAF介绍(一)相关推荐

  1. Java开源Web开发框架

     WebWork WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架.WebWork目前最新版本是2.1,现在的WebWork2.x前身 ...

  2. 推荐一个 Java 接口快速开发框架

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框 ...

  3. 简单计算器的设计java_(基于java的简易计算器的设计.doc

    (基于java的简易计算器的设计 基于java的简易计算器的设计 摘要 自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了 ...

  4. 推荐一个 Java 接口快速开发框架,超级nice!

    点击关注公众号,实用技术文章及时了解 今天给小伙伴们介绍一个Java接口快速开发框架-magic-api 简介 magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic ...

  5. 基于java平台简易计算器_基于java的简易计算器的设计

    基于java的简易计算器的设计 基于java的简易计算器的设计 摘要 自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了C ...

  6. Java命令简易入门-2:javac与java命令之一(javac)

    Java命令简易入门2-Javac与Java命令之一 文章目录 Java命令简易入门2-Javac与Java命令之一 基本概念 实验环境与实验文件 1.javac与java基本用法 2. javac的 ...

  7. Java swing简易浏览器(其一)页面显示,超链接跳转与手动输入URL跳转

    [Java swing简易浏览器(其一)页面显示,超链接跳转与手动输入URL跳转] [Java swing简易浏览器(其二)前进后退与收藏夹实现] [java swing 简易浏览器(其三)下载器,智 ...

  8. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  9. Java基础-Date类常用方法介绍

    Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...

最新文章

  1. ICLR 2020论文投稿2600篇,GNN、BERT、Transformer领跑热门研究方向
  2. 电脑无法识别u盘怎么办_笔记本无法识别U盘了怎么办?这个端口你一定没开启!...
  3. 3月机器学习在线班第六课笔记--信息熵与最大熵模型
  4. CF Educational Round 23 F.MEX Queries
  5. ES6_入门(2)_const命令
  6. thinkphp中的AJAX返回ajaxReturn()
  7. 无限的hypotheses 变成有限的dichotomies
  8. Exynos4412 中断驱动开发相关问题总结
  9. volatile关键字的用法
  10. c/c++ 实参、形参、值传递、地址传递的区别与关系 ---- 授人以鱼不如授人以渔
  11. 数字信号处理--7.3--FFT算法
  12. Copula函数理论及实现(三维)-MATLAB
  13. 单片机(ISIS 7 Professional):简易8x8矩阵LED灯代码项目
  14. 关于富文本编辑器froala editor和百度Ueditor使用问题
  15. TP6多应用部署简单的个人总结--第一篇【原创】
  16. 音频-音频术语名词解释
  17. 冬令营二月七日工作日志
  18. HBASE region简介
  19. Windows 批量添加删除路由资源性能优化
  20. 【项目记录】-上门洗车-汽车服务

热门文章

  1. windows7中双击视频文件不能用终极解码播放问题的解决
  2. 模电电路(部分合集)
  3. 今年春晚不一样,XR技术如何打造移步换景
  4. freenom的域名如何添加Cloudflare 的Nameserver
  5. android swap 大小,android系统开swap简易流程
  6. 数据库基础面试题-JDBC连接池实现方式
  7. networkx学习与使用——(3)路与圈
  8. html实现好看的导航主页(附源码)
  9. GitHub登录网页及上传项目步骤
  10. 阿里云轻量应用服务器环境搭建-Docker删除镜像