• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

    nature-framework: nature-framework是一个基于jdk8和servlet3.0规范,以自由为理念, ...

    原作者: [db:作者] 来自: 网络 收藏 邀请

    开源软件名称:

    nature-framework

    开源软件地址:

    https://gitee.com/mvilplss/nature-framework

    开源软件介绍:

    框架简介

    nature-framework是一个以自由为理念,以易用,代码简洁,开发快速,功能强大,易扩展,低耦合为目标,适用于快速开发的轻量级MVC+ORM框架。无getter/setter方法,无xml配置,包括源码的jar仅280KB。有效的为您节省大量时间来感受生活的美好,该快试试吧!!!

    功能特点

    • 完整的MVC支持,功能齐全,简单易用;
    • 模块结构自然:Control,Service,Model;
    • 简单易用的依赖注入ioc;
    • 比Struts功能强大的拦截器intercepter;
    • 后台验证器validator; 支持国际化i18n;
    • 防重复提交令牌token;
    • 灵活易用的Ecache本地缓存,强大的Redis分布式缓存;
    • 支持c3p0和druid数据源; 支持一个项目多个数据库连接;
    • 比Hibernate更简单易用的数据库操作,包括自动建表;
    • 数据库支持Mysql,Microsoft SQL Server,Oracle,Sqlite等;
    • 不得不说的事务控制,多数据事务控制;
    • 拥有强大的插件扩展plugin;
    • 比Springmvc更好用的Restful风格请求;
    • 轻量级的WebService服务;
    • 支持分布式的任务调度;
    • 基于Freemark和jsp的前端权限验证;

    maven依赖

    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:

    @Servicepublic 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);    }}

    现在:

    @Servicepublic 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分布式工具插件内置

    • 通过注解@hessian来实现接口api成为hessian服务,hessian服务url必须以.hessian链接结尾
    • 增加HessianClient工具来生成实现类

    服务提供者:

    @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());	}

    框架安全升级

    • 传入参数和返回参数进行解耦,考虑增加参数传入和传出专用拦截器(本次提交已经改进);
    • 增强框架本身的安全策略,如xss,csrf,sql注入等防范(本次提交已经改进);
    • 在拦截器中可以通过invocation在invoke前后分别获取请求参数和响应参数,并可以对其进行验证和修改,如下例子就是对请求参数进行html编译,防止XSS攻击。
    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层

    @Servicepublic 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是控制层的命名空间,所有本控制层的请求都要通过namespace3、属性@Inject注解是注入Service实例4、方法@Ask注解是对方法的映射,如果不写url则默认映射为方法名;与namespace共同组成请求路径/namespace/list5、返回支持直接返回页面"xxx.jsp",返回方法"xxx",返回JSON数据 JsonData,返回下载文件FileData等,绝对的简单快捷6、在控制层需要页面传值的只需声明public类型变量即可,无需冗长的GET/SET7、如需上传文件,控制层直接声明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等优秀框架


    鲜花

    握手

    雷人

    路过

    鸡蛋
    该文章已有0人参与评论

    请发表评论

    全部评论

    专题导读
    热门推荐
    阅读排行榜

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap