# 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,具体内容如下:
```
```
这就是开发接口的基本流程。更多操作方法,详见操作文档。