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的功能还在丰富中,以后的功能会越来越多: