原文:IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践

最近把编辑器换成IntelliJ IDEA,主要是Eclipse中处理Maven项目很不方便,很早就听说IntelliJ IDEA的大名了,但是一直没机会试试。最近终于下载安装了,由于是新手,决定尝试个Tutorials,最终找了个熟悉点的项目,就是Getting Started with Spring MVC, Hibernate and JSON(http://confluence.jetbrains.com/display/IntelliJIDEA/Getting+Started+with+Spring+MVC%2C+Hibernate+and+JSON)。废话不多说了, 下面是我的实践过程:

在实践之前,有个问题首先要明确下,在IntelliJ IDEA中project相当于Eclipse中的workspace,module相当于Eclipse中的project。

1.创建Project。具体的过程我就不详述了,可以在官方的Tutorials中查看。下面是我的project structure截图

2.配置Tomcat,这步很简单,没什么可说的。配置完成后,将步骤1中建立的项目deployed到Tomcat上运行,等Tomcat启动完成后,就会启动你默认的浏览器,如果上面的步骤没什么错误的话,你就可以在你的浏览器中看到Hello World!了。

3.添加依赖。因为要使用数据库,Hibernate,JPA等。所以需要在pom文件中添加对应的依赖。等你添加完成后,IntelliJ IDEA会自动引入或下载所需的包。

4.接下来是创建持久化的配置文件。这个地方需要注意路径的问题。具体的路径可以查看project structure截图。这个配置文件中都是数据库的配置信息。数据库使用的是hsqldb,如果不想使用,可以改成自己想用的数据库,但是要注意修改相应的jar包。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  3. <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
  4. <provider>org.hibernate.ejb.HibernatePersistence</provider>
  5. <properties>
  6. <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
  7. <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:spring" />
  8. <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
  9. <property name="hibernate.connection.username" value="sa" />
  10. <property name="hibernate.connection.password" value="" />
  11. <property name="hibernate.hbm2ddl.auto" value="create-drop" />
  12. </properties>
  13. </persistence-unit>
  14. </persistence>

5.配置Model类,使用的技术为JPA。

  1. package com.springapp.mvc;
  2.  
  3. import javax.persistence.*;
  4.  
  5. /**
  6. * Created by yul on 2014/12/18.
  7. */
  8. @Entity(name = "account")
  9. public class User {
  10.  
  11. @Id
  12. @GeneratedValue(strategy = GenerationType.AUTO)
  13. private Long id;
  14. @Basic
  15. private String firstName;
  16. @Basic
  17. private String lastName;
  18. @Basic
  19. private String email;
  20.  
  21. public Long getId() {
  22. return id;
  23. }
  24.  
  25. public String getFirstName() {
  26. return firstName;
  27. }
  28.  
  29. public String getLastName() {
  30. return lastName;
  31. }
  32.  
  33. public String getEmail() {
  34. return email;
  35. }
  36.  
  37. public void setId(Long id) {
  38. this.id = id;
  39. }
  40.  
  41. public void setFirstName(String firstName) {
  42. this.firstName = firstName;
  43. }
  44.  
  45. public void setLastName(String lastName) {
  46. this.lastName = lastName;
  47. }
  48.  
  49. public void setEmail(String email) {
  50. this.email = email;
  51. }
  52. }

定义service,这里官方的示例代码中没有@Repository注解,需要添加上

  1. package com.springapp.mvc;
  2.  
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.stereotype.Repository;
  5.  
  6. /**
  7. * Created by yul on 2014/12/18.
  8. */
  9. @Repository
  10. public interface UserRepository extends JpaRepository<User, Long> {
  11.  
  12. }

6.注册bean。包括repository, entity manager factory and transaction manager

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
  8.  
  9. <context:component-scan base-package="com.springapp.mvc"/>
  10.  
  11. <jpa:repositories base-package="com.springapp.mvc" />
  12.  
  13. <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
  14. <property name="persistenceUnitName" value="defaultPersistenceUnit" />
  15. </bean>
  16.  
  17. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  18. <property name="entityManagerFactory" ref="entityManagerFactory"/>
  19. </bean>
  20.  
  21. <tx:annotation-driven transaction-manager="transactionManager"/>
  22.  
  23. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  24. <property name="prefix" value="/WEB-INF/pages/"/>
  25. <property name="suffix" value=".jsp"/>
  26. </bean>
  27.  
  28. </beans>

7.定义Controller。

  1. package com.springapp.mvc;
  2.  
  3. import org.json.JSONArray;
  4. import org.json.JSONException;
  5. import org.json.JSONObject;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.ui.ModelMap;
  9. import org.springframework.validation.BindingResult;
  10. import org.springframework.web.bind.annotation.*;
  11.  
  12. /**
  13. * Created by yul on 2014/12/18.
  14. */
  15. @Controller
  16. public class UserController {
  17. @Autowired
  18. private UserRepository userRepository;
  19.  
  20. @RequestMapping(value = "/", method = RequestMethod.GET)
  21. public String listUsers(ModelMap model) {
  22. model.addAttribute("user", new User());
  23. model.addAttribute("users", userRepository.findAll());
  24. return "users";
  25. }
  26.  
  27. @RequestMapping(value = "/add", method = RequestMethod.POST)
  28. public String addUser(@ModelAttribute("user")User user, BindingResult result) {
  29. userRepository.save(user);
  30. return "redirect:/";
  31. }
  32.  
  33. @RequestMapping(value = "/delete/{userId}")
  34. public String deleteUser(@PathVariable("userId") Long userId) {
  35. userRepository.delete(userRepository.findOne(userId));
  36. return "redirect:/";
  37. }
  38.  
  39. @RequestMapping(value = "/api/users", method = RequestMethod.GET)
  40. public
  41. @ResponseBody
  42. String listUsersJson(ModelMap model) throws JSONException {
  43. JSONArray userArray = new JSONArray();
  44. for (User user : userRepository.findAll()) {
  45. JSONObject userJSON = new JSONObject();
  46. userJSON.put("id", user.getId());
  47. userJSON.put("firstName", user.getFirstName());
  48. userJSON.put("lastName", user.getLastName());
  49. userJSON.put("email", user.getEmail());
  50. userArray.put(userJSON);
  51. }
  52. return userArray.toString();
  53. }
  54.  
  55. }

我把后面返回JSON数据的方法也加上了。

8.定义view。官方提供的Bootstrap的CDN不好用,估计是GFW的问题,可以换成国内的。如果对于Bootstrap有兴趣,可以去这个网址http://www.bootcss.com/看看

  1. <!doctype html>
  2. <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
  3. <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
  4. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  5.  
  6. <html>
  7. <head>
  8. <meta charset="utf-8">
  9. <title>Spring MVC Application</title>
  10.  
  11. <meta content="IE=edge, chrome=1" http-equiv="X-UA-COMPATIBLE">
  12. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  13.  
  14. <!-- 新 Bootstrap 核心 CSS 文件 -->
  15. <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css">
  16. <%--<link href="http://twitter.github.io/bootstrap/assets/css/bootstrap.css" rel="stylesheet">--%>
  17. <%--<link href="http://twitter.github.io/bootstrap/assets/css/bootstrap-responsive.css" rel="stylesheet">--%>
  18. </head>
  19. <body>
  20.  
  21. <div class="container">
  22. <div class="row">
  23. <div class="span8 offset2">
  24. <h1>User</h1>
  25. <form:form method="post" action="add" commandName="user" class="form-horizontal">
  26. <div class="control-group">
  27. <form:label cssClass="control-label" path="firstName">First Name:</form:label>
  28. <div class="controls">
  29. <form:input path="firstName" />
  30. </div>
  31. </div>
  32. <div class="control-group">
  33. <form:label cssClass="control-label" path="lastName">Last Name:</form:label>
  34. <div class="controls">
  35. <form:input path="lastName" />
  36. </div>
  37. </div>
  38. <div class="control-group">
  39. <form:label cssClass="control-label" path="email">Email:</form:label>
  40. <div class="controls">
  41. <form:input path="email" />
  42. </div>
  43. </div>
  44. <div class="control-group">
  45. <div class="controls">
  46. <input type="submit" value="Add User" class="btn" />
  47. </div>
  48. </div>
  49. </form:form>
  50.  
  51. <c:if test="${!empty users}">
  52. <h3>Users</h3>
  53. <table class="table table-bordered table-striped">
  54. <thead>
  55. <tr>
  56. <th>Name</th>
  57. <th>Email</th>
  58. <th>&nbsp;</th>
  59. </tr>
  60. </thead>
  61. <tbody>
  62. <c:forEach items="${users}" var="user">
  63. <tr>
  64. <td>${user.lastName}, ${user.firstName}</td>
  65. <td>${user.email}</td>
  66. <td>
  67. <form action="/delete/${user.id}" method="post">
  68. <input type="submit" class="btn btn-danger btn-mini" value="Delete" />
  69. </form>
  70. </td>
  71. </tr>
  72. </c:forEach>
  73. </tbody>
  74. </table>
  75. </c:if>
  76. </div>
  77. </div>
  78. </div>
  79.  
  80. </body>
  81. </html>

到了这里,基本任务就算完成了。

下面就是测试了。在Tomcat中运行起你的项目。就可以在浏览器中看到效果了.

如果想查看返回的JSON数据。在浏览器中输入http://localhost:8080/api/users 即可。

IntelliJ IDEA:Getting Started with Spring MVC, Hibernate and JSON实践的更多相关文章

  1. IntelliJIDEA Getting+Started+with+Spring+MVC,+Hibernate+and+JSON

    https://confluence.jetbrains.com/display/IntelliJIDEA/Getting+Started+with+Spring+MVC,+Hibernate+and ...

  2. Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目

    原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...

  3. IntelliJ IDEA上创建maven Spring MVC项目

    IntelliJ IDEA上创建Maven Spring MVC项目 各软件版本 利用maven骨架建立一个webapp 建立相应的目录 配置Maven和SpringMVC 配置Maven的pom.x ...

  4. 使用Intellij IDEA从零使用Spring MVC

    原文:使用Intellij IDEA从零使用Spring MVC 使用Intellij IDEA从零使用Spring MVC 黑了Java这么多年, 今天为Java写一篇文章吧. 这篇文章主要是想帮助 ...

  5. Spring + Spring MVC + Hibernate

    Spring + Spring MVC + Hibernate项目开发集成(注解) Posted on 2015-05-09 11:58 沐浴未来的我和你 阅读(307) 评论(0) 编辑 收藏 在自 ...

  6. Spring + Spring MVC + Hibernate项目开发集成(注解)

    在自己从事的项目中都是使用xml配置的方式来进行的,随着项目的越来越大,会发现配置文件会相当的庞大,这个不利于项目的进行和后期的维护.于是考虑使用注解的方式来进行项目的开发,前些日子就抽空学习了一下. ...

  7. Java 本地开发环境搭建(框架采用 Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6)

    项目搭建采用技术栈为:Spring+Spring MVC+Hibernate+Jsp+Gradle+tomcat+mysql5.6 搭建环境文档目录结构说明: 使用Intellj Idea 搭建项目过 ...

  8. spring mvc: Hibernate验证器(字段不能为空,在1-150自己)

    spring mvc: Hibernate验证器(字段不能为空,在1-150自己) 准备: 下载Hibernate Validator库 - Hibernate Validator.解压缩hibern ...

  9. Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目

    作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...

随机推荐

  1. 微软职位内部推荐-Software Engineer II-News

    微软近期Open的职位: News is a critical areas for integration of mobile and services, one of the top priorit ...

  2. C#如何设置Listview的行高-高度

    Winform窗口中,控件listview是无法设置行高的. 以加入一个imagelist(图片列表控件)实现行高的设置. ImageList imageList = new ImageList(); ...

  3. Careercup - Google面试题 - 5692127791022080

    2014-05-08 22:09 题目链接 原题: Implement a class to create timer object in OOP 题目:用OOP思想设计一个计时器类. 解法:我根据自 ...

  4. OS X 使用技巧——在Finder窗口标题栏上显示路径

    Finder窗口默认显示当前文件夹的名称或当前所在的模式(例如AirDrop).如果想要显示路径(用User/[当前用户账号名称]/Documents 替代以前显示的Documents),打开终端并运 ...

  5. Posix线程编程指南(2) 线程私有数据

    概念及作用 在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据.在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有.但有时应用程序设计中有必要提供 ...

  6. jquery 提示简单效果插件 cluetip

    介绍一个不错的jquery插件-cluetip 我们在做web项目的时候,经常会使用到提示效果.html自带的提示效果是label标签的title,但是这个效果过于简单和难看,并且不方便调整样式. 今 ...

  7. 原生js实现中文时钟

    零.寒暄 终于一个月可以更新两篇博客了,开心.昨天花了大概一天的时间玩了下github,基本的clone和push都搞定了,如果有和我一样的新手没调通的,大家可以交流. 另外,说个题外话,大家发现我的 ...

  8. DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

    这个类型的resource 后面多个SRGB 表示SRGB空间是指gamma 矫正系数为2.2的色彩空间,这个问题我没有问别人,是我自己是上网查的,我觉得我不是个女人了......我又level up ...

  9. HDU1435,好开心,稳定婚姻

    费了三天,终于解决了各种BUG,PASS,好开心,这才是ACM真正的快乐,就在AC的那刻, 网上基本没甚程序,开始被各种变量名搞晕,无语!!! 有几个题目没说的东西:认为序号是1-N, 然后先排序,弄 ...

  10. sourcemap的使用

    minify.bat @echo off if ""%1""=="""" goto end :loop if not e ...