Spring MVC + Spring Data + Hibernate + MySQL 示例


在这篇文章中,我们将看到 Spring MVC、Spring Data、hibernate 和 mysql CRUD 示例的集成。

以下是使用 Spring MVC、Spring data、hibernate 和 mySQL crud 示例创建项目的步骤。

源代码:

下载

1) 在 Eclipse 中使用 maven创建一个 名为“SpringMVCSpringDataHibernateExample”的动态 Web 项目

Maven 依赖项

2)我们将在这个项目中使用 Spring 4 和 hibernate 4。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.arpit.java2blog</groupId>
<artifactId>SpringMVCHibernateCRUDExample</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringMVCHibernateCRUDExample Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>3.8.1</version>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.1.0</version>
  </dependency>

  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.4.1</version>
  </dependency>
  <!-- Hibernate -->
  <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>${hibernate.version}</version>
  </dependency>
  <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-entitymanager</artifactId>
   <version>${hibernate.version}</version>
  </dependency>

  <!-- Apache Commons DBCP -->
  <dependency>
   <groupId>commons-dbcp</groupId>
   <artifactId>commons-dbcp</artifactId>
   <version>1.4</version>
  </dependency>
  <!-- Spring ORM -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-jpa</artifactId>
   <version>1.8.0.RELEASE</version>
  </dependency>
  <!-- AspectJ -->
 <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjrt</artifactId>
   <version>${org.aspectj-version}</version>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.6</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/jstl/jstl -->
  <dependency>
   <groupId>jstl</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>4.2.4.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jsp-api</artifactId>
   <version>2.0</version>
   <scope>provided</scope>
  </dependency>
</dependencies>
<build>
  <finalName>SpringMVCHibernateCRUDExample</finalName>

  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
     <source>${jdk.version}</source>
     <target>${jdk.version}</target>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
     <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
   </plugin>
  </plugins>

</build>
<properties>
  <spring.version>4.2.1.RELEASE</spring.version>
  <security.version>4.0.3.RELEASE</security.version>
  <jdk.version>1.7</jdk.version>
  <hibernate.version>4.3.5.Final</hibernate.version>
  <org.aspectj-version>1.7.4</org.aspectj-version>
</properties>
</project>

Spring应用配置:

3) 改变web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationcontext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
  org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

4) 在 /WEB-INF/ 文件夹中创建一个名为 spring-servlet.xml 的 xml 文件。 如果您想使用不同的 spring 包来搜索控制器,请更改 context:component-scan。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

<annotation-driven />
<context:component-scan base-package="org.arpit.java2blog" />
<resources mapping="/resources/**" location="/resources/" />

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <beans:property name="prefix" value="/WEB-INF/views/" />
  <beans:property name="suffix" value=".jsp" />
</beans:bean>

<beans:bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <beans:property name="entityManagerFactory" ref="entityManagerFactory" />
</beans:bean>
<jpa:repositories base-package="org.arpit.java2blog.repository" />

<beans:bean id="entityManagerFactory"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <beans:property name="dataSource" ref="dataSource" />
  <beans:property name="packagesToScan" value="org.arpit.java2blog" />
  <beans:property name="jpaVendorAdapter">
   <beans:bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <beans:property name="generateDdl" value="true" />
   </beans:bean>
  </beans:property>
</beans:bean>

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <beans:property name="url"
   value="jdbc:mysql://localhost:3306/CountryData" />
  <beans:property name="username" value="root" />
  <beans:property name="password" value="arpit123" />
</beans:bean >

</beans:beans>

在 Spring-servlet.xml 中,我们已经完成了 hibernate 和 spring 数据的配置。 dataSource bean 用于指定java 数据源。我们需要提供驱动程序、URL、用户名和密码。 transactionManager bean 用于配置休眠事务管理器。

在 WEB-INF 文件夹中创建一个 applicationcontext.xml,该文件用于 bean 配置,因为我们使用 spring-servlet.xml 进行 bean 配置,我们将保持该文件为空。

<!--?xml version="1.0" encoding="UTF-8"?-->
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
</beans:beans>

创建 bean 类

4) 在 org.arpit.java2blog.bean 中创建一个名为“Country.java”的 bean。

package org.arpit.java2blog.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/*
* This is our model class and it corresponds to Country table in database
*/
@Entity
@Table(name="COUNTRY")
public class Country{

@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
int id;

@Column(name="countryName")
String countryName;

@Column(name="population")
long population;

public Country() {
  super();
}
public Country(int i, String countryName,long population) {
  super();
  this.id = i;
  this.countryName = countryName;
  this.population=population;
}
public int getId() {
  return id;
}
public void setId(int id) {
  this.id = id;
}
public String getCountryName() {
  return countryName;
}
public void setCountryName(String countryName) {
  this.countryName = countryName;
}
public long getPopulation() {
  return population;
}
public void setPopulation(long population) {
  this.population = population;
}

}

@Entity 用于制作持久化 pojo 类。对于这个 java 类,您将在数据库中拥有相应的表。@Column 用于将带注释的属性映射到表中的相应列。因此,使用以下代码在 mysql 数据库中创建 Country 表:

CREATE TABLE COUNTRY
(
   id int PRIMARY KEY NOT NULL AUTO_INCREMENT,
   countryName varchar(100) NOT NULL,
   population int NOT NULL
)
;

创建控制器

5)在包**org.arpit.java2blog.controller** 中创建一个名为“CountryController.java”的控制器

package org.arpit.java2blog.controller;

import java.util.List;

import org.arpit.java2blog.model.Country;
import org.arpit.java2blog.service.CountryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class CountryController {

@Autowired
CountryService countryService;

@RequestMapping(value = "/getAllCountries", method = RequestMethod.GET, headers = "Accept=application/json")
public String getCountries(Model model) {

  List listOfCountries = countryService.getAllCountries();
  model.addAttribute("country", new Country());
  model.addAttribute("listOfCountries", listOfCountries);
  return "countryDetails";
}

@RequestMapping(value = "/getCountry/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public Country getCountryById(@PathVariable int id) {
  return countryService.getCountry(id);
}

@RequestMapping(value = "/addCountry", method = RequestMethod.POST, headers = "Accept=application/json")
public String addCountry(@ModelAttribute("country") Country country) {
  if(country.getId()==0)
  {
   countryService.addCountry(country);
  }
  else
  {
   countryService.updateCountry(country);
  }

  return "redirect:/getAllCountries";
}

@RequestMapping(value = "/updateCountry/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public String updateCountry(@PathVariable("id") int id,Model model) {
   model.addAttribute("country", this.countryService.getCountry(id));
         model.addAttribute("listOfCountries", this.countryService.getAllCountries());
         return "countryDetails";
}

@RequestMapping(value = "/deleteCountry/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public String deleteCountry(@PathVariable("id") int id) {
  countryService.deleteCountry(id);
   return "redirect:/getAllCountries";

}
}

创建存储库接口

在包 org.arpit.java2blog.repository 中创建一个名为 CountryRepository .java 的接口**。您不必提供此接口的实现。**一旦你扩展到 CrudRepository 接口,Spring 会自动提供常见方法的实现,例如 save、delete、findOne。

package org.arpit.java2blog.repository;

import org.arpit.java2blog.model.Country;
import org.springframework.data.repository.CrudRepository;

public interface CountryRepository extends CrudRepository<Country,Integer> {

}

CrudRepository 有两个通用参数。 国家:这是您要保存在数据库中的实体类型。 Integer : 它是实体对象标识符的数据类型。

创建服务类

6)在包**org.arpit.java2blog.service** 中创建一个类 CountryService.java ,它是服务级类。它将调用 DAO 层类。

package org.arpit.java2blog.service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.arpit.java2blog.model.Country;
import org.arpit.java2blog.repository.CountryRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service("countryService")
public class CountryService {

@Autowired
CountryRepository countryRepository;

@Transactional
public List getAllCountries() {
  List countries=new ArrayList();
  Iterable countriesIterable=countryRepository.findAll();
  Iterator countriesIterator=countriesIterable.iterator();
  while(countriesIterator.hasNext())
  {
   countries.add(countriesIterator.next());
  }
  return countries;
}

@Transactional
public Country getCountry(int id) {
  return countryRepository.findOne(id);
}

@Transactional
public void addCountry(Country country) {
  countryRepository.save(country);
}

@Transactional
public void updateCountry(Country country) {
  countryRepository.save(country);

}

@Transactional
public void deleteCountry(int id) {
  countryRepository.delete(id);
}
}

@Service 是 专门的组件注解 ,用于在 Service 层创建 bean。

创建视图

在 WEB-INF/view/ 文件夹中创建名为countryDetails.jsp 的视图。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
<style>
.blue-button{
background: #25A6E1;
filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#25A6E1',endColorstr='#188BC0',GradientType=0);
padding:3px 5px;
color:#fff;
font-family:'Helvetica Neue',sans-serif;
font-size:12px;
border-radius:2px;
-moz-border-radius:2px;
-webkit-border-radius:4px;
border:1px solid #1A87B9
}
table {
  font-family: "Helvetica Neue", Helvetica, sans-serif;
   width: 50%;
}
th {
  background: SteelBlue;
  color: white;
}
td,th{
               border: 1px solid gray;
                width: 25%;
                text-align: left;
                padding: 5px 10px;
            }
</style>
</head>
<body>
<form:form method="post" modelAttribute="country" action="${pageContext.request.contextPath}/addCountry">
<table>
  <tr>
   <th colspan="2">Add Country</th>
  </tr>
  <tr>
  <form:hidden path="id" />
          <td><form:label path="countryName">Country Name:</form:label></td>
          <td><form:input path="countryName" size="30" maxlength="30"></form:input></td>
        </tr>
  <tr>
       <td><form:label path="population">Population:</form:label></td>
          <td><form:input path="population" size="30" maxlength="30"></form:input></td>
  </tr>
  <tr>
   <td colspan="2"><input type="submit"
    class="blue-button" /></td>
  </tr>
</table>
</form:form>
</br>
<h3>Country List</h3>
<c:if test="${!empty listOfCountries}">
<table class="tg">
<tr>
  <th width="80">Id</th>
  <th width="120">Country Name</th>
  <th width="120">Population</th>
  <th width="60">Edit</th>
  <th width="60">Delete</th>
</tr>
<c:forEach items="${listOfCountries}" var="country">
  <tr>
   <td>{country.id}</td>
   <td>${country.countryName}</td>
   <td>${country.population}</td>
   <td><a href="<c:url value='/updateCountry/${country.id}' />" >Edit</a></td>
   <td><a href="<c:url value='/deleteCountry/${country.id}' />" >Delete</a></td>
  </tr>
</c:forEach>
</table>
</c:if>
</body>
</html>

8) 是时候做 Maven 构建了。

右键单击项目-> 运行方式-> Maven 构建

Maven 在 Eclipse 中构建

9) 提供干净安装的目标(如下所示)并单击运行

Maven 在 Eclipse 中构建

运行应用程序

10) 右键单击项目->运行为->在服务器上运行

选择apache tomcat并点击finish

img

11) 现在让我们点击下面的 URL 来获取所有国家/地区。 http://localhost:8080/SpringMVCSpringDataHibernateExample/getAllCountries 你会得到下面的屏幕:

空国家列表 Spring MVC 休眠

如您所见,我们没有将任何国家添加到列表中,因此它是空的。 让我们将名为 India 的国家添加到国家列表中,然后单击提交。 同样,我们将分别添加中国、不丹和尼泊尔,您将看到下面的屏幕。

所有国家/地区列表 Spring MVC 休眠

让我们将不丹的人口编辑为 15000。单击编辑按钮对应于不丹。

img

当您单击提交时,您将进入以下屏幕。

img

让我们从上面的列表中删除国家中国,点击删除按钮对应于第二行。 您将看到下面的屏幕。

img

如您所见,china 已从上述列表中删除。

项目结构

Spring MVC Spring数据项目结构

我们完成了 Spring MVC,Spring data hibernate MySQL CRUD 示例。如果您仍然遇到任何问题,请发表评论。


原文链接:https://codingdict.com/