# Mars-java
**Repository Path**: BossDing/Mars-java
## Basic Information
- **Project Name**: Mars-java
- **Description**: 一个很棒的JavaWeb开发框架,请下载release版的源码
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: http://mars-framework.com
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 40
- **Created**: 2019-04-24
- **Last Updated**: 2021-02-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
基于NIO的Web编程框架
## 项目简介
Martian 是一个基于NIO的JavaWeb编程框架
- 基于NIO,彻底脱离Tomcat,JBoss等容器
- 声明式API,让Controller变成了一个interface,降低了开发的工作量
- 拥有其他web框架 拥有的大部分功能,比如AOP,IOC,声明式事务,异常监听等
- 拥有自主开发的 半ORM持久层框架,并天然的集成到了Martian中
## 项目生态
- 【分布式组件】[Martian-cloud](https://github.com/yuyenews/Martian-Cloud)
- 【网关及其他组件】[Martian-Component](https://github.com/yuyenews/Martian-Component)
- 【更多组件】筹划中
## 官方文档
[http://mars-framework.com/doc.html?tag=martian](http://mars-framework.com/doc.html?tag=martian)
## 视频教程
[https://www.bilibili.com/video/BV1dv4y1Z7Wt](https://www.bilibili.com/video/BV1dv4y1Z7Wt)
## 使用示例
[https://github.com/yuyenews/Mars-Example](https://github.com/yuyenews/Mars-Example)
## 项目特性
### 一、声明式API
只需要在你的interface上加上一个注解,即可对外提供一个接口,并且我们还支持传统的Controller写法
```java
@MarsApi(refBean="要引用的bean的name")
public interface TestApi {
返回类型 selectList(TestDTO testDTO);
}
```
### 二、单表增删改查无sql
```java
// 根据主键查询一条数据
@MarsGet(tableName = "userinfo",primaryKey = "id")
public abstract 要返回的实体类 selectById(int id);
// 单表新增
@MarsUpdate(tableName = "userinfo",operType = OperType.INSERT)
public abstract int insert(实体对象参数);
// 单表根据主键删除
@MarsUpdate(tableName = "userinfo",operType = OperType.DELETE,primaryKey = "id")
public abstract int delete(int id);
// 单表根据主键修改
@MarsUpdate(tableName = "userinfo",operType = OperType.UPDATE,primaryKey = "id")
public abstract int update(实体对象参数);
```
### 三、参数校验只需一个注解
在API接口的参数对象里的字段上加上一个注解即可(VO的字段上加注解)
```java
// 不可为空,且长度在2-3位
@MarsDataCheck(notNull = true,maxLength = 3L,minLength = 2L, msg = "id不可为空且长度必须在2-3位之间")
private Integer id;
// 正则校验
@MarsDataCheck(reg = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,12}$",msg = "密码不可以为空且必须是6-12位数字字母组合")
private String password;
```
前端如何得到提示?
正常请求API就好了,如果校验不通过会得到这样一个json
```json
{"error_code":1128,"error_info":"提示文字"}
```
### 四、异常监听器
通常我们在写代码的时候,需要给每个Controller的方法加上try{}catch(){},用来在异常的时候,能够正常的返回 json串
spring是有一个叫ExecptionHandler 来解决这个问题,而Martion也提供了对应的解决方案
解决方案就是什么都不用管,如果出了异常,会自动给前端返回如下json串
```json
{"error_code":500,"error_info":"异常提示"}
```
### 五、一行注解,解决分布式锁
在要加锁的方法上添加RedisLock注解
```java
@RedisLock(key = "自己定义一个key")
public int insert(){
return 1;
}
```