1

我现在正在使用 spring mvc3,我发现我的大部分控制器都拥有相同的逻辑。例如:

后控制器:

package com.king.controller;

@Controller
@RequestMapping("/posts")
public class PostController {
    @Autowired
    private PostDao postDao;

    // GET /posts /posts.json
    @RequestMapping(value = { "" }, method = RequestMethod.GET)
    public String index(Model model) {
        model.addAttribute("posts", postDao.list());
        return "posts/index";
    }

    // GET /posts/1 GET /posts/1.json
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String show(@PathVariable int id, Model model) {
        Post post = postDao.query(id);
        if (post != null) {
            model.addAttribute("post", post);
            return "posts/show";
        } else
            throw new RuntimeException("not found");

    }

    // GET /posts/new
    @RequestMapping(value = "/new", method = RequestMethod.GET)
    public String newForm(Model model) {
        model.addAttribute(new Post());
        return "posts/new";
    }

    // GET /posts/1/edit
    @RequestMapping(value = "/{id}/edit", method = RequestMethod.GET)
    public String edit(@PathVariable int id, Model model) {
        Post post = postDao.query(id);
        if (post != null) {
            model.addAttribute(post);
            return "posts/edit";
        } else
            throw new RuntimeException("not found");
    }

    // POST /posts /posts.json
    @RequestMapping(value = "", method = RequestMethod.POST)
    public String create(@Valid Post post, BindingResult result) {
        if (!result.hasErrors()) {
            postDao.add(post);
            return "redirect:/posts";
        } else {
            return "posts/new";
        }
    }

    // PUT /posts/1 /posts/1.json
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    public String update(@PathVariable int id, @Valid Post post, BindingResult result, RedirectAttributes redirectAttrs) {
        if (!result.hasErrors()) {
            post.setId(id);
            postDao.update(post);
            return "redirect:/posts/" + id;
        } else {
            return "posts/edit";
        }
    }

    // DELETE /posts/1 /posts/1.json
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public String destroy(@PathVariable int id, RedirectAttributes re) {
        Post p = new Post(id, "", "");
        postDao.delete(p);
        return "redirect:/posts";
    }
}

如果我创建一个需要 curd 操作的新简单模型,我将不得不创建一个新控制器,一个手动复制粘贴的新 dao。

所以我想知道我是否可以找到或创建一个可以像 rails 一样生成控制器和 dao 等的工具?

有什么工具可以开箱即用吗?如果没有,我可以创建它,但是现在,我只是想如果我必须创建这种工具,我可能只是做一些字符替换,也就是说,为控制器和 dao 创建一个公共模板,然后替换一些东西因此,但我想知道如何处理包/导入/问题,以及哪种语言更好(java 或 ruby​​)?

顺便说一句,请不要为我推荐 play!framework。我不喜欢它。因为我只想使用spring mvc。所以该工具将只关注基于 Spring 3 的控制器和 dao。

有什么建议吗?

4

3 回答 3

1

Telosys ( http://www.telosys.org/ ) 是专为此类工作设计的轻量级代码生成器。

它可以生成所有控制器、JSP、DAO 等(以及更多)。

原理很简单:为您定义的每个实体应用相同的模板。所有模板都是可定制的(基于 Velocity 模板引擎的“.vm”文件),因此您可以拥有您想要生成的内容(代码结构、注释等)

此外,Spring MVC 的模板包已经可用,您可以从 GitHub 安装它:https ://github.com/telosys-templates-v3/java7-web-mvc-spring-T300

有关更多信息,请参阅本文https://modeling-languages.com/telosys-tools-the-concept-of-lightweight-model-for-code-generation/

于 2018-10-26T15:35:13.727 回答
0

Grails 确实提供了这种开箱即用的功能,而我相信 Spring Roo 也会为您做到这一点。值得一试。

于 2012-09-04T08:30:11.833 回答
0

也检查一下。

http://www.myeclipseide.com/documentation/quickstarts/ME4STutorialScaffoldingMVC/scaffoldingarticle.html

这将引导您生成一个可立即运行的 Spring MVC 应用程序,该应用程序实现了域模型的 CRUD 应用程序模式。

免责声明:这是一个 30 天试用版

于 2012-09-04T08:31:39.550 回答