sviperll / static-mustache

Template engine for java with statically checked and compiled templates. Compilation is performed alone with java sources.
BSD 3-Clause "New" or "Revised" License
28 stars 4 forks source link

Repurpose static-mustache to allow SQL-query templates #11

Open sviperll opened 5 years ago

sviperll commented 5 years ago

class User {
    // ...
}
class UserFilter {
    // ...
}
@GenerateRenderablesFacade(className = "DefaultSuperAppQueries")
interface SuperAppQueries {
    @RenderableFactoryMethod(tamplate = "com/github/sviperll/mysuperall/user.sql.mustache")
    Query findUsers(UserFilter user);
}
@GenerateRenderablesFacade(className = "DefaultSuperAppViews")
interface SuperAppViews {
    @RenderableFactoryMethod(tamplate = "com/github/sviperll/mysuperall/user.html.mustache")
    Renderable<Html> renderableUser(User user);
}
class Main {
    public static void main(String[] args) throws IOException {
        SuperAppQueries queries = new DefaultSuperAppQueries();
        UserFilter filter = UserFilter.builder().orderThan(21).nameLike("Snow").build();
        Query query = queries.findUsersQuery(filter);
        User user;
        try (Connection connection = dataSource.getConnection()) {
            SqlSupplier<ResultSet> queryRunner = query.createRunner(connection);
            try (ResultSet resultSet = queryRunner.get()) {
                UserReader reader = new UserReader(resultSet);
                user = reader.readUser();
            }
        }
        SuperAppViews views = new DefaultSuperAppViews();
        Renderable<Html> renderableUser = views.renderableUser(user);
        Renderer renderer = renderable.createRenderer(System.out);
        renderer.render();
    }
}