Giter VIP home page Giter VIP logo

latke's Introduction

Latke

一款以 JSON 为主的 Java Web 框架

English

💡 简介

Latke('lɑ:tkə,土豆饼)是一个简单易用的 Java Web 应用开发框架,包含 MVC、IoC、事件通知、ORM、插件等组件。在实体模型上使用 JSON 贯穿前后端,使应用开发更加快捷。这是 Latke 不同于其他框架的地方,比较适合小型应用的快速开发。

欢迎到 Latke 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源

b3logos.jpg

✨ 特性

  • 函数式路由
  • 依赖注入
  • MySQL/H2 ORM
  • 多语言
  • 内存/Redis 缓存
  • 事件机制
  • 插件机制

🗃 案例

  • Demo:简单的 Latke 应用示例
  • Solo:一款小而美的 Java 开源博客系统,专为程序员设计
  • Symphony:一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

🛠️ 使用

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, "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 使用 木兰宽松许可证, 第2版 开源协议。

🙏 鸣谢

latke's People

Contributors

011011100010110101101111 avatar 88250 avatar armstrongcn avatar cismonx avatar dependabot[bot] avatar haorendashu avatar mainlove avatar vanessa219 avatar wangdx avatar wyc1024 avatar yanxingangsun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

latke's Issues

支持逻辑删除(软删除)

使用 oDeleted 字段作逻辑删除判断:

  • 0:正常
  • 1:已删除

Repository 所有操作均需加入该字段的判断操作。

缓存支持设置过期时间

缓存可设置过期时间,如果不设置默认 6 小时过期。

  • Redis 实现支持在 put 时单独设置过期时间
  • 内存实现仅支持在构造缓存时统一设置

repository支持postgresql

D大您好,我会为latke的repository支持postgresql数据源,请问测试用例需要在那个目录中添加。

InJar 判断问题

通过 getResource("/") 是错误的写法,应该用 getResource("/latke.properties") 来获取根目录。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.