Nature-demo — это простой пример, основанный на framework Nature. Он включает в себя приложение с трёхслойной архитектурой MVC и затрагивает следующие аспекты:
Адрес фреймворка: http://git.oschina.net/mvilplss/nature-framework.
Фреймворк поддерживает спецификацию servlet 3.0. Рекомендуется использовать JDK 8.0 и Tomcat 8.0 или более поздние версии.
/**
* Класс пользователя
*
* 1. Класс сущности, не требует методов GET/SET, только объявление имён полей базы данных<p>
* 2. Использование аннотаций для управления первичным ключом @id, поддержка ADDSELF (автоматическое увеличение базы данных), UUID (управление фреймворком) и ASSIGN (назначение идентификатора программистом)<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 является пространством имён контрольного слоя, все запросы этого контрольного слоя должны проходить через пространство имён<p>
* 3. Атрибут @Inject аннотации используется для внедрения экземпляров Service<p>
* 4. Метод @Ask аннотации сопоставляется с методом, если URL не указан, он сопоставляется по умолчанию с именем метода; вместе с пространством имён они образуют путь запроса /namespace/list<p>
* 5. Поддерживает прямое возвращение страниц «xxx.jsp», методов «xxx», данных JSON JsonData и файлов для скачивания FileData, что очень просто и быстро<p>
* 6. В контрольном слое, когда требуется передача значений на страницу, достаточно объявить переменную открытого типа, нет необходимости в длинных 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 с именами файлов [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. Все бизнес-логики рекомендуется размещать в сервисном слое<p>
*/
@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");
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )