1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mvilplss-nature-demo

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

Nature-demo — это простой пример, основанный на framework Nature. Он включает в себя приложение с трёхслойной архитектурой MVC и затрагивает следующие аспекты:

  • использование путей запросов;
  • внедрение классов сервисов;
  • применение декларативных транзакций и уровней изоляции;
  • простую конфигурацию источников данных;
  • кэширование запросов к данным;
  • использование перехватчиков (поддерживаются глобальные, классовые и методы-перехватчики);
  • реализацию интернационализации;
  • работу с шаблонизаторами Freemarker и JSP;
  • предотвращение повторной отправки форм и другие простые примеры.

Адрес фреймворка: 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 )

Вы можете оставить комментарий после Вход в систему

Введение

nature-demo — это простой пример, разработанный на основе nature-framework и включающий в себя приложение с тремя уровнями MVC. Он затрагивает использование декларативных транзакций и уровней изоляции транзакций, внедрение классов обслуживания, применение путей запросов, простую конфигурацию источников данных, кэширование запросов к данным, а та... Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mvilplss-nature-demo.git
git@api.gitlife.ru:oschina-mirror/mvilplss-nature-demo.git
oschina-mirror
mvilplss-nature-demo
mvilplss-nature-demo
master