Java веб-фреймворк, основанный на JSON
Latke (лат. 'lɑ:tkə, картофельное омлетное блюдо) — это простой и удобный фреймворк для разработки Java веб-приложений, который включает в себя MVC, IoC, уведомления о событиях, ORM и механизмы плагинов. Использование JSON для модели данных позволяет ускорить разработку приложений. Это отличает Latke от других фреймворков и делает его особенно подходящим для быстрого создания небольших приложений.
Для получения дополнительной информации посетите официальный форум Latke. Также рекомендуем подписаться на официальный WeChat-канал B3log Open Source B3log 开源
:
Функциональные маршруты
Внедрение зависимостей
ORM для MySQL/H2
Поддержка нескольких языков
Кэширование в памяти/Redis
Механизм событий
Механизм плагинов## 🗃 Примеры
Demo: Простой пример приложения на Latke
Solo: Маленький, но мощный Java-блог, разработанный специально для программистов
Symphony: Современная Java-платформа для создания сообществ (форумы/BBS/социальные сети/блоги)
<dependency>
<groupId>org.b3log</groupId>
<artifactId>latke-core</artifactId>
<version>${latke.version}</version>
</dependency>
Функциональные маршруты```java final Dispatcher.RouterGroup routeGroup = Dispatcher.group(); routeGroup.get("/", helloProcessor::index). get("/register", registerProcessor::showRegister). post("/register", registerProcessor::register). get("/var/{pathVar}", registerProcessor::paraPathVar). router().get().post().uri("/greeting").handler(helloProcessor::greeting);
**JSON разбор**
```java
final JSONObject requestJSON = context.requestJSON();
HTTP упаковка
final String remoteAddr = context.remoteAddr();
final String requestURI = context.requestURI();
final Object att = context.attr("name");
final String method = context.method();
context.sendRedirect("https://b3log.org");
final Request request = context.getRequest();
final Response response = context.getResponse();
Зависимости внедрения, транзакции
@Service
public class UserService {
private static final Logger LOGGER = Logger.getLogger(UserService.class);
@Inject
private UserRepository userRepository;
@Transactional
public void saveUser(final String name, final int age) {
final JSONObject user = new JSONObject();
user.put("name", name);
user.put("age", age);
String userId;
try {
userId = userRepository.add(user);
} catch (final RepositoryException e) {
LOGGER.log(Level.ERROR, "Сохранение пользователя не удалось", e);
}
}
}
``` // После выброса исключения фреймворк выполнит откат транзакции
throw new IllegalStateException("Сохранение пользователя не удалось");
}
LOGGER.log(Level.INFO, "Пользователь успешно сохранен [userId={0}]", userId);
}
}
Создание ORM
@Repository
public class UserRepository extends AbstractRepository {
public UserRepository() {
super("user");
}
}
CRUD для одной таблицы
public interface Repository {
String add(final JSONObject jsonObject) throws RepositoryException;
void update(final String id, final JSONObject jsonObject) throws RepositoryException;
void remove(final String id) throws RepositoryException;
void remove(final Query query) throws RepositoryException;
JSONObject get(final String id) throws RepositoryException;
long count(final Query query) throws RepositoryException;
}
Условный поиск
public JSONObject getByName(final String name) throws RepositoryException {
return getFirst(new Query().setFilter(new PropertyFilter("name", FilterOperator.EQUAL, name)));
}
Пагинация
new Query().setPage(bk, 50)
Сортировка по полю
new Query().addSort("name", SortDirection.DESCENDING);
Получение только необходимых полей
new Query().select("name", "age");
Использование SQL
final List<JSONObject> records = select("SELECT * FROM `user` WHERE `name` = ?", name);
Анализ конфигурации Latke## 🏘️ Сообщество
Latke использует лицензию MulanPSL2.
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.