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

OSCHINA-MIRROR/dl88250-latke

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

Latke

Java веб-фреймворк, основанный на JSON

Английский

💡 Введение

Latke ('лæткə, картофельное пирожное) — это простой и удобный фреймворк для разработки Java веб-приложений, который включает компоненты MVC, IoC, уведомление событий, ORM и плагины. Использует JSON как основной формат данных для моделей сущностей, что позволяет быстрее создавать приложения. Это отличает Latke от других фреймворков и делает его особенно подходящим для быстрой разработки небольших приложений.

Добро пожаловать на официальный форум Latke для получения дополнительной информации. Также рекомендуется подписаться на официальное сообщество B3log в WeChat: B3log 开源.

b3logos.jpg

✨ Основные характеристики

  • Функциональные маршруты
  • Инъекция зависимостей
  • ORM для MySQL/H2
  • Поддержка нескольких языков
  • Кэширование в оперативной памяти/Redis
  • Механизмы событий
  • Механизмы плагинов

🗃 Примеры использования

  • Пример: Простое приложение на Latke
  • Solo: Лёгкий и красивый Java-блог, предназначенный для программистов
  • Symphony: Современная платформа социальных сетей, форума и блога, реализованная на Java

🛠️ Установка и использование

Maven

<dependency>
    <groupId>org.b3log</groupId>
    <artifactId>latke-core</artifactId>
    <version>${latke.version}</version>
</dependency>

Использование контроллеров

Функциональные маршруты

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

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(1, 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 использует лицензию MulanPSL2.

🙏 Благодарность

  • Netty: Асинхронный событийно-ориентированный фреймворк для сети
  • FreeMarker: Широко используемый Java шаблонизатор
  • Javassist: Библиотека для работы с байт-кодом Java
  • Apache Commons: Библиотека общих инструментов для Java
  • Apache Log4j: Библиотека логирования для Java

Введение

Это Java Web-фреймворк, основанный на JSON. Развернуть Свернуть
MulanPSL-2.0
Отмена

Обновления

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

Участники

все

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

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