Martian 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Martian 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 MIT
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 Web应用开发Web框架
开发厂商
地区 国产
适用人群 未知
收录时间 2019-03-18

软件简介

Martian 是一个声明式 API 编程(DAP)框架,可以帮助你快速开发后端服务。 

项目简介

  • 以HttpServer作为 http服务,彻底脱离Tomcat这一类的Web容器和Servlet,同时也让项目减少了几个依赖
  • 声明式API,让Controller变成了一个interface,降低了开发的工作量
  • 拥有其他web框架 拥有的大部分功能,比如AOP,IOC,声明式事务,异常监听等
  • 拥有自主开发的持久层框架,并天然的集成到了Martian中
  • 如果你不喜欢HttpServer,我们也提供了Tomcat启动器
  • 支持分布式开发

项目生态

  • 【分布式组件】Martian-cloud
  • 【网关组件】Martian-gateway
  • 【其他组件】筹划中

功能示例

一、声明式API

只需要在你的interface上加上一个注解,即可对外提供一个接口,并且我们还支持传统的Controller写法

@MarsApi(refBean="要引用的bean的name")
public interface TestApi {

   返回类型 selectList(TestDTO testDTO);
}

二、单表增删改查无sql

// 根据主键查询一条数据
@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的字段上加注解)

// 不可为空,且长度在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

{"error_code":1128,"error_info":"提示文字"}

四、异常监听器

通常我们在写代码的时候,需要给每个Controller的方法加上try{}catch(){},用来在异常的时候,能够正常的返回 json串

spring是有一个叫ExecptionHandler 来解决这个问题,而Martion也提供了对应的解决方案

解决方案就是什么都不用管,如果出了异常,会自动给前端返回如下json串

{"error_code":500,"error_info":"异常提示"}

五、一行注解,解决分布式锁

在要加锁的方法上添加RedisLock注解

@RedisLock(key = "自己定义一个key")
public int insert(){
  return 1;
}

官方网站

http://mars-framework.com

使用示例

https://github.com/yuyenews/Mars-Example

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (8)

加载中
打分: 力荐
关注很久了,点赞
10/24 00:59
回复
举报
这logo真好看
10/24 00:52
回复
举报
简单点,有提供授权和权限校验吗?
03/10 01:48
回复
举报
现在前后端分离,view的作用越来越小,同样,controller的作用越来越弱,往往也就是service的数据透传,支持楼主。
2019/12/04 12:50
回复
举报
古人诚不欺我,真是合久必分,分久必合。后端编程分为,c,s,v或者c,m,s,v不是没有道理的,每一层都有他的作用,为的就是解耦。楼主,将4层结构合为一层,只能说适用于一些小型的项目吧。大项目这样搞,死的硬挺挺的。
2019/12/02 09:02
回复
举报
看到很多框架都会有自定义注解,但是网上关于自定义注解的相关文章很少, 想请教一下怎么让自定义的注解生效?
2019/11/05 19:23
回复
举报
http://nutzam.com/core/nutz_preface.html https://github.com/nutzam/nutzboot 了解一下
2019/10/22 17:00
回复
举报
来我不觉得造轮子是坏事。。但是 你要 挑战一下spring ,总感觉有些碰瓷的嫌疑
2019/09/25 18:27
回复
举报
更多评论
10/16 11:27

Martian 框架发布 3.0.39 版本,更加灵活的 Redis 分布式锁

正如标题所说,此次更新主要是优化了Redis分布锁的灵活性。 在要加锁的方法上添加RedisLock注解 @RedisLock(key = "自己定义一个key", maxWait = 3000, retry = true, retryRate = 100, timeOut = 1000) public int insert(){ return 1; } 这个锁会在事务开启之前获取,在事务提交以后解锁,并且只对...

0
20
10/10 15:13

Martian 框架发布 3.0.37 版本,支持切换内置服务

此次更新如下 将依赖的服务换成了接口,便于后面扩展,方便开发出其他的启动器 新增了tomcat启动器,可以选择默认的内置HttpServer,也可以选择内置tomcat 作为服务 使用者也可以自己进行扩展,开发内置netty,内置jetty,等内置其他服务的starter 如何切换成tomcat启动器 基本上跟使用默认的启动器是一样的,可以参考这...

3
7
09/24 15:57

Martin-Cloud 发布 3.0.20

作为 Martian 框架的一个分布式组件,由于其面向的场景是需要分布式开发的大型项目,所以在 Martian 还未被大众接纳之前,显得非常的渺小,因为没有大型项目敢用这个东西。 也因为上面的原因,所以一直更新缓慢,很少提及,但是 这一次我重新拾起这个组件,进行了一轮改造和重构,使其稳定性和 架构的合理性 提高了不少。...

0
7
08/06 23:38

Martian 框架发布了 3.0.29 版本

Martian 原名叫 Mars-Java,为了避免跟 java 商标产生冲突,所以改名了。 先说点题外话 在遭受了 100 多条评论后,我认识到了一些问题,其中最大的就是 接口受理的请求方式太少了,在某些场景下不够用。 首先呢,我得在解释一次:Martian 是可以接收任意 http 请求的,只不过 api 接口只受理这么几种,我的限制不是做在服...

0
4
07/22 20:37

来了,来了,Mars-Java 的属性校验注解,支持作用域设置了

Mars-Java 3.0.26 更新如下: 参数校验注解@MarsDataCheck,支持作用域设置 JSON传参做了优化 对代码进行了大量优化,使其更稳定可靠 作用域设置 在实际开发中,很多VO对象会被作为多个接口的接参对象,这种情况下如果在属性上加@MarsDataCheck注解,会导致所有用到这个对象的接口,都需要遵循这个校验规则。 但是实际中...

4
2
06/08 17:56

瘦了,这次真的瘦了,Mars-Java 发布 3.0.20

不需要了,都不需要了,从今天开始,Mars-Java不再需要Tomcat,不再需要JBoss,不再需要Netty,甚至连Servlet都不需要了。 一个纯基于JRE类库开发的Http服务,一个不需要容器的Java开发框架,将瘦身进行到底。 此次更新如下 去除了原本依赖的内置tomcat,纯基于JRE类库开发了一个Http服务 post请求支持raw传参了(Json提...

16
29
05/19 17:10

Mars-Java 发布了第一个官方示例

曾经收到过很多小伙伴的私信,要我出一个官方示例,一直没时间,今天终于出了第一个官方示例,废话不多说,先上连接 github: https://github.com/yuyenews/Mars-Example gitee: https://gitee.com/Mars-framework/Mars-Example 示例的目录结构如下 涵盖了大部分的功能,其他的如定时任务,MarsValue,分布式锁等功能,没...

0
20
04/23 17:03

Mars-java 3.0.15 发布,开始支持组件化

就在今天,Mars-java发布了3.0.15版本,将开始支持组件化 开放API,欢迎大家一起来开发组件 无论你是谁,只要你有兴趣,就可以基于Mars-java开发组件,为提升后端开发效率出一份力 开发方式可以查看文档:自定义组件 推出Mars-cloud组件 以一种很小巧,快速的方式,将Mars-java改造成微服务,从Mars-java项目升级到微服务...

1
20
03/09 17:50

Mars 3.0.13 正式发布,支持参数校验和异常监听

本次更新带来了如下新特性: 1. 接口参数校验 一个注解搞定 2. 接口异常监听 参数校验 只需要用到一个注解即可:@MarsDataCheck 在api的参数对象的字段上 加上这个注解即可 // 不可为空,且长度在2-3位 @MarsDataCheck(notNull = true,maxLength = 3L,minLength = 2L, msg = "id不可为空且长度必须在2-3位之间") pri...

0
8
02/12 17:44

Mars 3.0.11 正式发布

更新如下 1. 去除了配置文件,采用类配置 更加简单易懂,且由于类会在编译时检查语法,所以不易出错 2. MarsApi 向下兼容 也就是说以后除了DAP,还支持传统的Controller写法 3. MarsApi注解新增属性 可以统一配置需要的bean,避免每个方法上都要通过MarsReference注解来指定引用的bean 类配置方法 新建一个任意java类,继...

2
7
2019/12/01 19:16

声明式 API 编程框架 Mars-java 发布 3.0.9

本次更新如下: 分布式锁只需一行注解 新增文件下载功能封装 多个文件上传可以一次性接收 文件上传可以配置大小限制 分布式锁 @RedisLock(key = "自己定义一个key") public int insert(){ return 1; } 这个锁会在事务开启之前获取,在事务提交以后解锁,并且只对MarsBean有效,对API和DAO无效 如果你不需要锁住整个...

1
8
2019/11/16 14:13

分布式锁只需要两行代码,Mars 3.0.6 发布

本次更新如下 新增了分布式锁 新增了MarsBean初始化 优化了代码结构,以及修复了已知的bug 分布式锁 在MarsBean里面注入MarsRedisLock对象 @MarsBean("testService") public class TestService { @MarsWrite("marsRedisLock") private MarsRedisLock marsRedisLock; } 加锁 Boolean haslock = mars...

14
33
2019/11/11 14:14

Mars 框架测试报告

前言 本测试报告,是在我自己的电脑上用jmeter测出来的, 所有接口都是配置的300个线程循环10次,报告中所展示的数据都是测了3次,取的中位数 测试环境 电脑配置 在这台机器上安装了一台虚拟机 虚拟机配置 虚拟机里装了一个Mysql数据库,今天的测试都是连接的这台数据库 测试内容 一共测试以下几种情况 测试结果 空接口(...

0
7
2019/11/04 11:45

面向声明式 API 编程(DAP)的框架,Mars-java 3.0.2 发布

本次更新如下 API跟Service彻底解耦,API的参数列表和Service参数列表完全可以不一致,不管是类型还是数量,框架会自动把API的参数值给到Service的参数中对应的字段 代码结构上做了调整,使源码更规范,便于阅读与维护 为了配合声明式API的出现,发布了Mars-cloud 3.0.2 API与Service怎么解耦的 Service中的方法,代码示...

2
12
2019/10/30 10:39

Mars-java 3.0.0 发布,面向声明式 API 编程(DAP)的框架

本次更新带来了两个变动 面向声明式API编程(DAP) 单元测试改动 单元测试 取消了抽象方法before,而采用了注解的方式,在单测类上加上MarsTest注解即可 面向声明式API编程(DAP) 按照传统的开发方式,如果要开发一个后端接口,需要分为以下三步 创建controller 创建service 创建dao(甚至会创建存放sql的xml) 但是,我们...

2
16
2019/10/28 12:09

Mars-cloud 2.2.3 发布

主要更新如下: 1. 新增了本地缓存,这样即使zookeeper服务挂了,也一样不影响整个微服务的运行 2. 负载均衡策略 原来只支持随机,现在新增了 轮询 3. 优化了代码结构,性能进一步提升 4. 同时对Mars-java做了一个小改动【将HttpRequest,HttpResponse,HttpContext 改成了 HttpMarsRequest,HttpMarsResponse,HttpMar...

1
9
2019/10/22 12:36

Mars-java 2.2.2 发布,不需要容器的 Java Web 开发框架

本次更新如下: 取消了MarsMapping注解,Controller里的所有public方法会自动映射成一个http接口,默认请求方式为get 新增了RequestMethod注解,用来指定http接口的请求方式(不加默认为get) 将Resource注解换成了MarsWrite注解,用法保持不变(防止跟jdk自带的Resource混淆) 将redis模块从Mars-extends项目移到了主项...

8
29
2019/09/24 09:47

Mars-java 发布 2.1.7-hotfix 版本

接着上一篇更新: https://www.oschina.net/news/110055/mars-java-2-1-7-released 由于2.1.7版本存在一些不完美的地方(只是不够完美,并非bug),所以紧急补推了这个版本 更新点如下: 原来 MarsGet注解 查询数据的时候只能返回Map @MarsGet(tableName = "userinfo",primaryKey = "id") public abstract Map<Strin...

0
5
2019/09/22 18:44

Mars-java 发布 2.1.7 版本

此次更新如下: 优化了代码结构,性能更高效 mars-jdbc升级,单表操作不需要写sql,不需要用配置或者注解映射,直接一句注解搞定 JdbcTemplete优化升级,支持分页查询,sql参数使用占位符,避免了字符串拼接带来的sql注入风险 mars-cloud 为了配合mars-jdbc的升级,所以发行了一个版本 Mars-jdbc用法 dao 建议用抽象类 ...

0
12
2019/09/13 19:57

Mars-cloud 发布 2.1.6 版本

Mars-cloud 发布 2.1.6 版本 1. 此版本从 1.0 直接跳升到 2.1.6 是为了让版本号与 Mars-java 保持一致 2. 新增 Feign 功能,以后调用 Mars-cloud 微服务接口,可以通过 Feign 来模 拟 RPC 调用 Mars-java 发布 2.1.6 版本 1. 将 Start 从项目中剥离了出来,形成了一个单独的项目,单独维护 2. Start 使用了责任链模式来装...

0
6
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2018/06/20 15:53

java -d . **.java 与 java **.java 的区别

如何在命令行模式下运行带包的java文件 https://blog.csdn.net/lytor/article/details/17048361 javac,使用"-d ."与省略-d的区别 https://blog.csdn.net/ppxxyy1110/article/details/20971271 1.类文件带包(pakage) //文件名:test.java package org.test; public class test{ public static void main(String[] args)...

0
1
发表了博客
2018/12/15 17:56

java JDBC

JDBC(Java DataBase Connectivity, java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门...

0
1
发表了博客
2018/01/23 11:41

Java ThreadLocal

Java的ThreadLocal变量用来创建线程本地变量。我们知道,一个对象上的所有线程,都会共享该对象的变量,所以这些共享的变量不是线程安全的。我们可以使用synchronization同步语法来使得线程安全,但如果想避免使用synchronization,那么可以使用线程本地变量(ThreadLocal variables)。 使用了ThreadLocal变量后,每个线...

0
1
发表于AI & 大数据专区
2019/07/28 21:30

Java的ThreadLocal

简介 ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值...

0
0
发表了博客
2015/04/04 23:18

java 之ThreadLocal

java 之ThreadLocal

0
5
发表了博客
2018/10/11 14:17

java_jdbc

jdbc:数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。    JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,   功能:建立数据库连接;发送操作数据库的语句;处理结果   举例:     ...

0
0
2014/04/09 14:41

Java JVM

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。

0
4
发表了博客
2018/04/13 23:27

Java_JDBC

JDBC-ODBC桥连接形式:利用微软提供的ODBC进行数据库链接,然后利用JDBC访问ODBC的函数库,实现数据操作 流程:程序>JDBC>ODBC>数据库;这样操作性能差,但支持度最高,不需要配置任何第三方驱动程序 JDBC连接形式:利用不同数据库的生产商提供的JDBC驱动程序进行数据库操作 流程:程序>JDBC>数据库;性能很好; JDBC网络...

0
0
发表了博客
2019/08/07 10:34

java ThreadLocal

每次看到这玩意熟悉,就是想不起来什么东西,看了才知道是啥玩意,就写个笔记强化一下记忆。 private ThreadLocal threadLocal = new ThreadLocal(); threadLocal.set(0); (int) threadLocal.get(); 上面三...

0
3
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
06/01 22:49

Springboot挺好的,为什么要用Mars-Java

这是一个大部分程序员都会产生的疑问,或者说质疑吧,Springboot那么好用,生态那么全,为什么要用这个刚出道的Mars-Java呢? 这篇文章就来聊一聊Mars-Java的一些特性。 首先如果要把这两个框架放在一起比较,那么毫无疑问,Springboot从技术和生态以及安全性上是碾压性的,但是如果抛开这些不谈呢? 你们一定觉得我在讲...

17
1
2019/10/26 13:32

我为什么要开发一个Mars-java

前言 众所周知,在java界 有一个框架霸占了市场很多年,可以说30岁以下的程序员基本就是学着它 从一个菜鸟变成老鸟的(老了的老 O(∩_∩)O哈哈~) 而且这个框架经过了这么多年的发展可以说他已经变成了一个应用层的操作系统了,然后在这个平台上运行着各种app(只是类比,希望可以正确理解这句话),它的生态是非常强大的...

10
1
08/16 21:49

Martian 框架的建议征集帖

首先,我可能还是老规矩,要先解释一波,虽然我知道不喜欢的人也不会喜欢看我解释,但是我觉得还是有必要说一下的。 关于扩展性不够强 我不知道这个扩展性具体是指啥,是指以下这种情况吗? 我内置 httpserver,但是你想用 tomcat 可以自己切换? 我内置 durid,但是你想用 c3p0 可以自己切换? 如果你们指的是这种,那我...

1
0
2019/11/16 15:38

分布式锁 只需要两行代码,Mars 3.0.6发布

本次更新如下 新增了分布式锁 新增了MarsBean初始化 优化了代码结构,以及修复了已知的bug 分布式锁 在MarsBean里面注入MarsRedisLock对象 @MarsBean("testService") public class TestService { @MarsWrite("marsRedisLock") private MarsRedisLock marsRedisLock; } 加锁 Boolean haslock = marsRedi...

1
3
2019/10/31 11:45

面向声明式API编程(DAP)

面向声明式API编程(DAP) DAP是Mars-java 最近提出的一个新的开发方式,全称 Declarative API Programming, 提倡后端为一个独立的整体,不应该是为前端服务的,所以当前端需要接口的时候,只需要声明一个API给他,而不需要专门开发一个Controller出来 DAP详细介绍 按照传统的开发方式,如果要开发一个后端接口,需要分...

3
2
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
8 评论
90 收藏
分享
返回顶部
顶部