# myframe框架(java web框架) **Repository Path**: hingbox/myframe ## Basic Information - **Project Name**: myframe框架(java web框架) - **Description**: myframe是一款极其简易的java web框架,目的是简化java web项目的开发步骤,使用简单。追求使用尽量少的jar包完成尽量多的功能。 myframe框架核心包只有两个,分别是框架包myframe.jar、辅助工具包myutils.jar。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-12-03 - **Last Updated**: 2024-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # myframe框架 ## 项目架构 myframe框架源码包含两个部分,myframe-core目录是框架核心目录,myframe-utils目录是框架工具类目录。两个是单独的java项目,可以使用eclipse单独导入。其中,myframe-core框架运行必须依赖myframe-utils项目,但myframe-utils项目可以单独导入使用。 ## 文档 离线文档见发行版附件myframedoc.zip,在线文档地址附于离线文档首页。 ## myframe-utils工具类项目简介 myframe-utils是为java项目提供的通用工具类,涉及全面,追求尽量少地依赖第三方jar包,来完成更多的功能,减少处理jar包之间版本整合的烦恼。常用功能如下(除特殊说明外,以下功能均不依赖第三方jar包): 1. 实体类转换。 2. 小型缓存(可自主扩展缓存内核为第三方缓存)。 3. 编码转换、单向和双向加密。 4. 数据库操作、内置数据源(仅依赖数据库驱动包)。 5. 公共文件操作。 6. http请求工具类。 7. 验证码、二维码生成(二维码基于QRcode和ZxingCode封装)。 8. Excel导入导出(仅支持XLSX格式文件)。 9. json解析、类型转换。 10. 日志操作。 11. FTP操作、邮件发送。 12. 动态代理。 13. 定时任务管理、cron表达式解析。 14. 文件上传。 15. 表达式解析和模板填充。 16. 通用工具类(集合、数组、日期、字符串、权限树、断言工具、正则等)。 ## myframe框架简介 ### 1. 它是一款轻量级 Java Web 框架 - 源码简洁不臃肿、不足1M - 上手简单,适合新手和中小型项目使用 - 遵循MVC架构,实现了AOP、ORM、DAO、Mapper等功能 - 向下兼容到java 8和Servlet 3.0规范 ### 2. 依赖小、使用简便 - 无需依赖大量jar包,无需为框架整合、版本整合而烦恼。 - 配置简单明了,不繁杂,遵循约定俗成规则。 - 内置缓存、数据源、JSON、文件上传、验证码、定时任务、参数自动验证、通用工具,这些都不用依赖任何第三方jar包。 - 前后端分离,也可作为纯后端开发导出为一个jar包运行(内嵌tomcat)。 ### 3. 核心包 - myframe-utils.jar,相关工具类,可单独作为工具包使用。 - myframe-core.jar,核心框架包。 ## 文档 接口文档见发行版附件“myframedoc.zip”,包含myframe-utils和myframe-core的文档,可下载直接打开。 ## 入门使用(使用Eclipse开发) ### 1. 创建一个标准的动态Web项目 我们创建一个名为myframetest的项目,整个工程目录结构如下: ``` myframetest ┗ src ┗ com ┗ test ┗ frame ┗ controller ┗ service ┗ dao ┗ entity ┗ mapper -- 存放mapper接口 ┗ config ┗ mapper -- 存放mapper的xml配置 ┗ application.my -- 框架配置文件 ┗ WebRoot ``` 包名按自己的需要创建,没有任何限制,核心配置文件名称固定,必须是application.my。 例外,mapper接口和xml配置作用和mybatis相同(只是作用相同,和mybatis没有任何关系),不是必须项,如果不熟悉mybatis,可暂时忽略。 ### 2. 基本配置 1、导入myframe-core和myframe-utils包,配置核心监听器和过滤器(web.xml)。 ``` com.zkh.myframe.listener.InitialListener coreFilter com.zkh.myframe.filter.CoreFilter coreFilter /* ``` 2、框架配置(application.my) ``` frame: # controller位置(该配置项还可追加拦截器和WebSocket配置) scanLocation: com/test/frame/controller # mapper的xml文件位置 mapperResource: mapper/ # 数据库配置 database: attr: showSql: true showPoolLog: false dataSource: id: mysql type: mysql default: true driver: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/table_test username: root password: 1234 # 连接池属性 poolAttr: poolIniSize: 10 poolMaxSize: 100 poolStep: 3 recoveryTime: 600 pingInterval: 600 ``` ### 3. 编写controller类 在controller包下创建一个controller类,必须以Controller结尾。下面创建一个TestController.java示例文件。内容如下: ``` package com.test.frame.controller; import javax.annotation.Resource; import com.test.frame.service.TestService; import com.zkh.myframe.annotation.RequestMethod; import com.zkh.myframe.core.Adapter; import com.zkh.myframe.enumeration.adapter.SendType; public class TestController { //自动创建一个TestService对象,变量名自定,但推荐与类名相同,首字母小写 @Resource private TestService testService; //接口1,可通过 http://localhost/myframetest/test/test1访问 //其中,myframetest为项目名,test为Controller名,test1为方法名 //方法可返回值任何值,可为void;参数Adapter需要时可设置,不需要时可为空 public void test1(Adapter adapter) { //若return 500; 则发送500错误码 //等同于 adapter.setResult(500) //若return "index"; 则转发到/WEB-INF/content/index.jsp //等同于 adapter.setResult("index") //若return 对象; 返回JSON对象 //等同于 adapter.setResult(对象) //发送HTML文本到页面 adapter.setResult("hello word!", SendType.HTML); } //接口2,可通过 http://localhost/myframetest/test/test2访问,仅限POST请求 @RequestMethod(method = RequestMethod.POST) public Object test2() { testService.test(); //转发到/WEB-INF/content/index.jsp //等同于 adapter.setResult("index") return "index"; } } ``` ### 4. 编写Service类 一般编写service类的常规做法是,创建一个Service接口,然后再创建一个接口实现类。但根据开发经验,对于中、小型项目来说,这是真的累赘,因为一个项目的开发,人员真不多,完全没必要这样做。 所以,myframe框架摒弃了这种做法,直接创建Service类即可。下面创建一个TestService.java示例文件。内容如下: ``` package com.test.frame.service; import java.util.List; import javax.annotation.Resource; import com.test.frame.dao.TestDao; import com.test.frame.entity.User; import com.test.frame.mapper.TestMapper; import com.zkh.myframe.annotation.Aspect; import com.zkh.myframe.aspect.TransactionAspect; //声明一个切面,使用框架内置的事务切面,对所有以doSave开头的方法使用 @Aspect(aspect = TransactionAspect.class, pattern = "doSave.+") public class TestService { //自动创建一个TestDao对象,变量名自定,但推荐与类名相同,首字母小写 @Resource private TestDao testDao; //自动创建一个TestMapper接口的代理对象,变量名自定,但推荐与类名相同,首字母小写 @Resource private TestMapper testMapper; public void test() { //获取用户列表1 List userList1 = testDao.getUserList(); //获取用户列表2 List userList2 = testMapper.getUserList(); } } ``` ### 5. 编写实体类 下面创建一个User.java示例文件。内容如下: ``` package com.test.frame.entity; import java.util.Date; import com.zkh.myframe.annotation.Table; //声明数据表表名 @Table(name = "t_user") public class User { //用户ID private Integer id; //用户名 private String uname; //生日 private Date birthDay; //身高 private Integer height; /** 此处省略getter和setter**/ } ``` ### 6. 编写Dao类 下面创建一个TestDao.java示例文件。内容如下: ``` package com.test.frame.dao; import java.util.List; import com.test.frame.entity.User; import com.zkh.myframe.database.BaseDao; //BaseDao类是数据库核心操作类 public class TestDao extends BaseDao { //获取用户列表 public List getUserList(){ //该方法是BaseDao类暴露的方法 return doSelect(User.class); } } ``` ### 7. 编写Mapper接口 下面创建一个TestMapper.java示例文件。内容如下: ``` package com.test.frame.mapper; import java.util.List; import com.test.frame.entity.User; import com.zkh.myframe.annotation.Mapper; //声明这是一个Mapper接口 @Mapper public interface TestMapper { //获取用户列表 List getUserList(); } ``` 有mybatis开发经验的都知道,一个Mapper接口需要对应一个Mapper配置,即这里还需要一个TestMapper.xml,具体内容如下: ``` ``` 这就是开发接口的基本流程。更多操作方法,详见操作文档。