# nature-demo **Repository Path**: mvilplss/nature-demo ## Basic Information - **Project Name**: nature-demo - **Description**: nature-demo是一个基于nature-framework开发的简单示例,包括mvc三层的应用,涉及到请求路径,服务类的注入,声明式事物和事务隔离级别的用法,数据源的简单配置,数据查询缓存,拦截器(支持全局拦截器,类拦截器,方法拦截器)的使用,国际化的实现,freemarker和jsp的使用,表单防止重复提交等简单示例。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 2 - **Created**: 2016-08-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: webframework **Tags**: None ## README nature-demo是一个基于nature-framework开发的简单示例,包括mvc三层的应用,涉及到请求路径,服务类的注入,声明式事物和事务隔离级别的用法,数据源的简单配置,数据查询缓存,拦截器(支持全局拦截器,类拦截器,方法拦截器)的使用,国际化的实现,freemarker和jsp的使用,表单防止重复提交等简单示例。 框架地址:http://git.oschina.net/mvilplss/nature-framework **框架当前支持servlet3.0规范,建议使用jdk8.0和tomcat8.0或更高版本。**  **实体类** ``` /** * 用户类 * * 1、实体类,无需GET/SET方法,只需声明数据库字段的名称
* 2、使用注解控制指定主键@id,支持ADDSELF(数据库自增长)、UUID(框架维护)、ASSIGN(程序员指定id)
* 3、@Type:按照JAVA语言的基本类型进行设定,无需考虑数据库的字段,还支持默认值,长度设定等,简单快捷
*/ @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注解即可
* 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类型变量即可,支持多文件集合上传,就像接受普通变量一样简单
*
*/
@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
* 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(level=Connection.TRANSACTION_READ_COMMITTED)
public int delete(NatureMap natureMap) {
return super.delete(natureMap,"user_cache");
}
}
```