在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
nature-demo是一个基于nature-framework开发的简单示例,包括mvc三层的应用,涉及到请求路径,服务类的注入,声明式事物和事务隔离级别的用法,数据源的简单配置,数据查询缓存,拦截器(支持全局拦截器,类拦截器,方法拦截器)的使用,国际化的实现,freemarker和jsp的使用,表单防止重复提交等简单示例。框架地址:http://git.oschina.net/mvilplss/nature-framework框架当前支持servlet3.0规范,建议使用jdk8.0和tomcat8.0或更高版本。实体类 /** * 用户类 * * 1、实体类,无需GET/SET方法,只需声明数据库字段的名称<p> * 2、使用注解控制指定主键@id,支持ADDSELF(数据库自增长)、UUID(框架维护)、ASSIGN(程序员指定id)<p> * 3、@Type:按照JAVA语言的基本类型进行设定,无需考虑数据库的字段,还支持默认值,长度设定等,简单快捷<p> */@Table(name = "tb_user")public class User extends NatureMap { private static final long serialVersionUID = 1L; @Id(strategy = Strategy.ADDSELF) @Type(type = Types.INT,length = "16") public String id = "id"; @Type(type = Types.INT) public String age = "age"; @Type(def = "女") public String sex = "sex"; public String name = "name"; @Type(type=Types.DOUBLE,length="10,2",def="1000") public String balance = "balance"; @Type(length="300") public String address = "address";} 控制类 /** * 用户控制层 * * 1、创建控制层继承NatureCtrl类并增加@Ctrl注解即可<p> * 2、类@Ctrl的namespace是控制层的命名空间,所有本控制层的请求都要通过namespace<p> * 3、属性@Inject注解是注入Service实例<p> * 4、方法@Ask注解是对方法的映射,如果不写url则默认映射为方法名;与namespace共同组成请求路径/namespace/list<p> * 5、返回支持直接返回页面"xxx.jsp",返回方法"xxx",返回JSON数据 JsonData,返回下载文件FileData等,绝对的简单快捷<p> * 6、在控制层需要页面传值的只需声明public类型变量即可,无需冗长的GET/SET<p> * 7、如需上传文件,控制层直接声明File类型变量即可,支持多文件集合上传,就像接受普通变量一样简单<p> * */@SuppressWarnings("serial")@Interceptors({UserInterceptor.class})//非必需@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", FileData.docx); } } 服务类 /** * 用户服务类 * * 1、服务类,为了开发简单可以继承框架中的NatureService(非必需),添加@Service注解即可<p> * 2、事物控制可以通过@Tx进行极速实现<p> * 3、如果某些业务多读少写则建议使用缓存,使用方法只需传入缓存名称即可,如果缓存有配置则使用,否则使用默认配置。 * 4、所有业务逻辑建议放在Service层<p> */@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(level=Connection.TRANSACTION_READ_COMMITTED) public int delete(NatureMap natureMap) { return super.delete(natureMap,"user_cache"); } } |
请发表评论