nature-framework是一个以自由为理念,以易用,代码简洁,开发快速,功能强大,易扩展,低耦合为目标,适用于快速开发的轻量级MVC+ORM框架。无getter/setter方法,无xml配置,包括源码的jar仅280KB。有效的为您节省大量时间来感受生活的美好,该快试试吧!!!
https://oss.sonatype.org/#nexus-search;quick~nature4j
<dependency>
<groupId>org.nature4j</groupId>
<artifactId>nature-framework</artifactId>
<version>1.0.5</version>
<optional>true</optional>
</dependency>
写法如下,只需继承NatureTest即可
public class TestDemo extends NatureTest{
@Test
public void demo(){
MainService service = ServiceHelper.getService(MainService.class);
NatureMap natureMap = service.riskRate();
System.out.println(natureMap);
}
}
原来不能对服务的方法进行嵌套,只能用DatabaseHelper:
@Service
public class UserService extends NatureService {
@Tx
public void insert() {
User user = new User();
user.put(User.loginname, "lucy");
user.put(User.nickname, "god");
DatabaseHelper.use().insert(user);
user.put(User.loginname, "tom");
DatabaseHelper.use().update(user);
}
}
现在:
@Service
public class UserService extends NatureService {
@Tx
public void insert() {
User user = new User();
user.put(User.loginname, "lucy");
user.put(User.nickname, "god");
insert(user);
user.put(User.loginname, "tom");
update(user);
}
}
服务提供者:
@Hessian("/user.hessian")
public interface UserServiceIntf {
public List<NatureMap> list(String sql);
}
服务消费者:
public static void userList(){
String url = "http://localhost:8080/nature-user/user.hessian";
UserServiceIntf basic = HessianClient.create(url,UserServiceIntf.class);
List list = basic.list("select * from tb_user");
System.out.println(list.toString());
}
public void intercept(Invocation invocation) {
NatureMap requestParams = invocation.getRequestParams();
Set<Entry<String, Object>> entrySet = requestParams.entrySet();
for (Entry<String, Object> entry : entrySet) {
requestParams.put(entry.getKey(),StringUtil.XHTMLEnc( CastUtil.castString(entry.getValue())));
}
System.err.println("***测试拦截器执行前***");
invocation.invoke();
System.err.println("***测试拦截器执行后***");
}
三分钟上手实例(如果是初次接触此框架):https://git.oschina.net/mvilplss/nature-user 功能全面的实例(略熟悉此框架的朋友):https://git.oschina.net/mvilplss/nature-demo
1、实体类,无需GET/SET方法,只需声明数据库字段的名称 2、使用注解控制指定主键@id,支持ADDSELF(数据库自增长)、UUID(框架维护)、ASSIGN(程序员指定id) 3、@Type:按照JAVA语言的基本类型进行设定,无需考虑数据库的字段,还支持默认值,长度设定等,简单快捷
@Table(name = "tb_user")
public class User extends NatureMap {
@Id(strategy = Strategy.ADDSELF)
@Type(type = Types.INT)
public String id = "id";
@Type(type = Types.INT)
public String age = "age";
@Type(def = "女")
public String sex = "sex";
public String name = "name";
@Type(length="300")
public String address = "address";
}
1、服务类,为了开发简单可以继承框架中的NatureService(非必需),添加@Service注解即可 2、事物控制可以通过@Tx进行急速实现 3、如果某些业务多读少写则建议使用缓存,使用方法只需传入缓存名称即可,如果缓存有配置则使用,否则使用默认配置。 4、所有业务逻辑建议放在Service层
@Service
public class UserService extends NatureService {
public Page page(Page page) {
String sql = "select id,name,sex,age from tb_user where 1=1 order by id desc";
return DatabaseHelper.query(page, sql,"user_cache");
}
@Tx
public int delete(NatureMap natureMap) {
return super.delete(natureMap,"user_cache");
}
}
1、创建控制层继承NatureCtrl类并增加@Ctrl注解即可 2、类@Ctrl的namespace是控制层的命名空间,所有本控制层的请求都要通过namespace 3、属性@Inject注解是注入Service实例 4、方法@Ask注解是对方法的映射,如果不写url则默认映射为方法名;与namespace共同组成请求路径/namespace/list 5、返回支持直接返回页面"xxx.jsp",返回方法"xxx",返回JSON数据 JsonData,返回下载文件FileData等,绝对的简单快捷 6、在控制层需要页面传值的只需声明public类型变量即可,无需冗长的GET/SET 7、如需上传文件,控制层直接声明File类型变量即可,支持多文件集合上传,就像接受普通变量一样简单
@Ctrl(namespace="/user")
public class UserCtrl extends NatureCtrl{
public User user=new User();//可以不new,如果new的话会提高项目效率
public File myfile;//文件接收
public ArrayList<File> files = new ArrayList<File>();//多文件接收。前台只需input的name为files[0...]
public String action;
@Inject
protected UserService userService;
@Ask(url="/list")
public Object list(){
page = userService.page(page);
return "list.ftl";
}
@Ask
public Object toOper(){
if (user.getInt(user.id)!=0) {
userService.byId(user);
action = "update";
}else{
action = "insert";
}
return "oper.ftl";
}
@Ask
@Redirect
public Object insert(){
userService.insert(user,"user_cache");
return "list";
}
@Ask
@Redirect
public Object update(){
userService.update(user,"user_cache");
return "list";
}
@Ask
@Redirect
public Object delete(){
userService.delete(user,"user_cache");
return "list";
}
@Ask
public Object getJson(){
return new JsonData(userService.byId(user));
}
//文件下载示例,就是这么简单
@Ask
public Object getFile(){
InputStream inputStream =this.getClass().getResourceAsStream("文件.docx");
return new FileData(inputStream, "文件.docx");
}
}
目前框架已经应用公司十多个大小型项目,经过实战和改版升级后正式开源,技术交流群 148999765 ,如果有问题和意见欢迎加入群进行讨论。
nature-framework框架的建设离不开开源社区的开源项目和技术分享,特别感谢@Jfinal https://git.oschina.net/jfinal/jfinal @黄勇 https://git.oschina.net/huangyong/smart-framework Struts2 SpringMVC等优秀框架
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型