[图片] 一款以 JSON 为主的 Java Web 框架 [图片] [图片] [图片] [图片] 简介 Latke('l ɑ:tk ə,土豆饼)是一个简单易用的 Java Web 应用开发框架,包含 MVC、IoC、事件通知、ORM、插件等组件。 在实体模型上使用 JSON 贯穿前后端,使应用开发更加快捷。这是 La ..

Latke 一款以 JSON 为主的 Java Web 框架

Latke

一款以 JSON 为主的 Java Web 框架

💡 简介

Latke('l ɑ:tk ə,土豆饼)是一个简单易用的 Java Web 应用开发框架,包含 MVC、IoC、事件通知、ORM、插件等组件。

在实体模型上使用 JSON 贯穿前后端,使应用开发更加快捷。这是 Latke 不同于其他框架的地方,比较适合小型应用的快速开发。

✨ 特性

🗃 案例

🛠️ 使用

Maven

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

控制器层用法

注解声明式路由

@RequestProcessing("/")
public void index(final RequestContext context) {
    context.setRenderer(new SimpleFMRenderer("index.ftl"));
    final Map<String, Object> dataModel = context.getRenderer().getRenderDataModel();
    dataModel.put("greeting", "Hello, Latke!");
}

函数式路由

Dispatcher.post("/register", registerProcessor::register);
Dispatcher.mapping();

路径变量和查询字符串

@RequestProcessing("/var/{pathVar}")
public void paraPathVar(final RequestContext context) {
    final String paraVar = context.param("paraVar");
    final String pathVar = context.pathVar("pathVar");
    context.renderJSON(new JSONObject().put("paraVar", paraVar).put("pathVar", pathVar));
}

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, "Saves user failed", e);

            // 抛出异常后框架将回滚事务
            throw new IllegalStateException("Saves user failed");
        }

        LOGGER.log(Level.INFO, "Saves a user successfully [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('l ɑ:tk ə,土豆饼)是一个简单易用的 Java Web 应用开发框架,包含 MVC、IoC、事件通知、ORM、插件等组件。

在实体模型上使用 JSON 贯穿前后端,使应用开发更加快捷。这是 Latke 不同于其他框架的地方,比较适合小型应用的快速开发。

✨ 特性

🗃 案例

🛠️ 使用

Maven

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

控制器层用法

注解声明式路由

@RequestProcessing("/")
public void index(final RequestContext context) {
    context.setRenderer(new SimpleFMRenderer("index.ftl"));
    final Map<String, Object> dataModel = context.getRenderer().getRenderDataModel();
    dataModel.put("greeting", "Hello, Latke!");
}

函数式路由

Dispatcher.post("/register", registerProcessor::register);
Dispatcher.mapping();

路径变量和查询字符串

@RequestProcessing("/var/{pathVar}")
public void paraPathVar(final RequestContext context) {
    final String paraVar = context.param("paraVar");
    final String pathVar = context.pathVar("pathVar");
    context.renderJSON(new JSONObject().put("paraVar", paraVar).put("pathVar", pathVar));
}

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, "Saves user failed", e);

            // 抛出异常后框架将回滚事务
            throw new IllegalStateException("Saves user failed");
        }

        LOGGER.log(Level.INFO, "Saves a user successfully [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 使用 Apache License, Version 2.0 开源协议。

🙏 鸣谢

  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    61 引用 • 468 回帖 • 510 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2479 引用 • 7881 回帖 • 864 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    40 引用 • 174 回帖
4 回帖
请输入回帖内容...
  • buwangchuxin

    前排小板凳 😳

  • Adrift001

    沙发

  • jishuqing

    哇哦,又学到一个轮子,,很棒呀

  • SignV

    第一次听这个 感觉新鲜