SUMK是本来开发的一款互联网框架。目标是为大家提供一款易开发、高性能的框架。减轻广大码农的工作量。项目地址是:https://www.oschina.net/p/sumk
主要模块如下(除此之外还有很多小功能):
- IOC:@Web对类进行注解,@Inject进行注入。支持数组、集合等
- ORM:跟redis缓存的原生集合,有效保护数据库rpc
- 事务:使用@Box进行事务声明。支持多数据源,支持读写分离
- HTTP:只要在一个方法上使用@Web注解,就能提供http访问功能,内置加密、签名等功能。使用@Param可以对参数进行简单的校验
- RPC: 只要在一个方法上使用@Soa注解,就能提供rpc访问功能
//数据库事务及ORM的例子
@Box //@Box表示启用sumkDB的事务管理,类似于spring的@Transaction。通过dbName可以设置不同的数据源
public void test() {
DemoUser user = new DemoUser();
user.setAge(30);
user.setName("张三");
user.setLastUpdate(new Date());
DB.insert(user).execute(); //插入对象
//多条件查询
List list=DB.select().tableClass(DemoUser.class)
.lessThan("lastupdate", new Date())
.orderByAsc("lastupdate")
.offset(10)
.limit(10)
.resultHandler(MapResultHandler.handler)
.queryList();
// RawDB使用的是原生的sql,后面跟的是要注入的参数。参数个数与sql中的?的个数一致
RawDB.list("select * from demouser where name=? and age=?", "登陆",12);
//NamedDB类似于mybatis,目前只支持#{}方式,不支持等标签。
NamedDB.count("select count(1) from demouser where name=#{name}", SBuilder.map("name", "登陆").toMap());
}
//RPC的例子
//服务器端:
@Soa //只需要这个注解,就能接收RPC请求,默认接口名是 appId.小写的类名.小写的方法名
public List echo(String echo,List names){
List list=new ArrayList();
for(String name:names){
list.add(echo+" "+name);
}
return list;
}
//客户端调用:
Rpc.init(); //或者在app.properties里配置soa.client.start=1
List names=Arrays.asList("游夏","游侠");
String echo=",how are you";
//返回是json格式。接口名的格式是包名的最后一个单词+类名+方法名
String result=Rpc.call("demo.EchoAction.echo", echo,names);
//http的例子
@Web //只需要这个注解就表示可以接受http请求
public List echo(String echo,List names){
List list=new ArrayList();
for(String name:names){
list.add(echo+" "+name);
}
return list;
}
目前的架构图如下,sumk的功能还在丰富中,以后的功能会越来越多: