spring+springMVC+Hibernate+spring-data-jpa 完整干净注解版的Demo

起初是为了配spring data jpa,配死我了,终于配出来了,网上看了很多博客,写得都不详尽,我来写一个从头到尾的吧。

说明:

1、我是参考了很多别人的博客,文中的代码部分是复制粘贴过来的。

2、有错误和遗漏的地方请告诉我一声。

3、Demo下载:SSJ 完整干净 Demo

一、基本准备:
  MyEclipse 8.6
  MySQL 5.5




二、其他准备: 
  spring-framework-3.2.8.RELEASE  //公司用的spring3.X,所以我就用了spring3.2.8
  hibernate-release-4.2.12.Final  //为了与spring3.x兼容,hibernate选4.2.12,版本太高会报错




三、建立web工程,导入各种包:
  spring的包:
    libs下的所有包                 //不要-javadoc.jar和-sources.jar结尾的包


  hibernate的包:
    lib\required下的所有包                    //是hibernate必要的包
    lib\jpa下的包:
      hibernate-entitymanager-4.2.12.Final.jar//jpa相关的
    lib\optional\ehcache下的包:
      slf4j-api-1.6.1.jar                     //日志相关


  spring data jpa的包:
    spring-data-commons-1.7.2.RELEASE.jar
    spring-data-jpa-1.5.2.RELEASE.jar


  其他包:
    mysql-connector-java-5.1.6-bin.jar    //MySQL驱动包,必须要5.1.6以上的版本,否则报奇怪的错
    commons-logging-1.1.3.jar             //日志相关
    commons-collections-3.1.jar           //数据结构增强
    aopalliance-1.0.jar                   //AOP支持


/* ------------- 以上包大多数都能从http://search.maven.org/ 获得,有些包我是直接百度下载 --------------- */


四、配置applicationContext.xml

在src目录下创建applicationContext.xml:(这是spring总配置文件)

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				xmlns:context="http://www.springframework.org/schema/context" 
				xmlns:jpa="http://www.springframework.org/schema/data/jpa"
				xmlns:tx="http://www.springframework.org/schema/tx"
				xsi:schemaLocation="
				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/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">

	<!-- spring扫描的路径 为了使用注解-->
 	<context:component-scan base-package="cn.lx"/>
 	
	<!-- 定义实体管理器工厂,参数中的myJPA在spring data jpa配置文件中 -->
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
             <property name="persistenceUnitName" value="myJPA"/>
        </bean>
         
        <!-- 配置事务管理器 -->  
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
            <property name="entityManagerFactory" ref="entityManagerFactory" />  
        </bean> 
       
        <!-- 启用 annotation事务--> 
        <tx:annotation-driven transaction-manager="transactionManager"/> 
           
        <!-- 配置Spring Data JPA扫描目录--> 
        <jpa:repositories base-package="cn.lx.dao"/>
</beans>


五、在src下创建一个名为META-INF的文件夹,没错,就是src目录下

在这个META-INF中创建persistence.xml:(这是spring data jpa的配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<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">
            
    <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">

    <!-- 数据源 -->
    <provider>org.hibernate.ejb.HibernatePersistence</provider>  
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.connection.password" value="123456" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test" />
            <property name="hibernate.max_fetch_depth" value="3" />
            <property name="hibernate.hbm2ddl.auto" value="update" />    
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="javax.persistence.validation.mode" value="none"/>
        </properties>
    </persistence-unit>
            
</persistence>

//请自行修改数据源的信息(账户,密码等)

六、在src下创建springMVC-servlet.xml:(这是springMVC的配置文件)

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
    xmlns:context="http://www.springframework.org/schema/context"    
    xmlns:mvc="http://www.springframework.org/schema/mvc"    
    xsi:schemaLocation="     
           http://www.springframework.org/schema/beans     
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
           http://www.springframework.org/schema/context     
           http://www.springframework.org/schema/context/spring-context-3.0.xsd    
           http://www.springframework.org/schema/mvc     
           http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
		   
    <!-- 默认扫描的包路径 -->
    <context:component-scan base-package="cn.lx.web" />
	
    <!-- 添加注解驱动 -->
    <mvc:annotation-driven />
	
    <!-- 视图管理器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

七、配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- spring核心监听器 -->
  <context-param>  
      <param-name>contextConfigLocation</param-name>  
      <param-value>classpath:applicationContext.xml</param-value>  
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
	
  <!-- springMVC核心servlet -->
  <servlet>
      <servlet-name>springMVC</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>  
          <param-value>classpath:springMVC-servlet.xml</param-value>
      </init-param>
      <!-- 该servlet第一个启动 -->
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>springMVC</servlet-name>
      <!-- 只拦截.do结尾的请求 -->
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <!-- 解决spring data jpa 事务懒加载 -->
  <filter>
      <filter-name>openEntityManagerInViewFilter</filter-name>
      <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>openEntityManagerInViewFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>


八、可以使用了

工程目录:


九、测试:

1、cn.lx.bean中创建Users实体类:

package cn.lx.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity                         //标识实体,Hibernate会自动映射到数据库
public class Users
{
	@Id                     //指定该实体在数据库中的主键
	@GeneratedValue         //主键自动增长
	private Integer id;
	private String username;
	private String password;
	
        //省略get和set方法
}

2、cn.lx.dao中创建UsersDao接口:

package cn.lx.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import cn.lx.bean.Users;

@Repository
public interface UsersDao extends JpaRepository<Users, Integer>
{
  //继承了JapRepository 泛型分别是对应实体类的类名,实体类的主键类型
}


3、cn.lx.service中创建UsersService类:

package cn.lx.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.lx.bean.Users;
import cn.lx.dao.UsersDao;

@Service                     //标记这是一个Service,spring会自动实例化
public class UsersService
{
	@Autowired           //让spring自动实例化并注入
	private UsersDao ud; //这是一个接口,spring会自动实例化
	
	public void save(Users u)
	{
		ud.save(u);  //UsersDao继承了JpaRepository,所以有此方法
	}
}

4、cn.lx.web中创建UsersController类:

package cn.lx.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.lx.bean.Users;
import cn.lx.service.UsersService;

@Controller                         //标记这是一个控制层的类
@RequestMapping("/test")            //访问该类的路径
public class UsersController
{
	@Autowired
	private UsersService us;
	
	@RequestMapping("/save")    //访问该类中该方法的路径:http://localhost:8080/工程名/test/save.do
	public String save(Users u) //会将表单传来的数据自动封装成Users对象
	{
		us.save(u);
		return "welcome";  //返回welcome视图,springMVC-servlet.xml中配置了视图管理器
	}
}


5、在WebRoot下的WEB-INF中创建jsp文件夹,jsp文件夹下创建welcome.jsp,用于测试
6、index.jsp中弄个表单,传下数据测试即可。


注意:

1、spring data jpa 不能单独使用,至少得有spring,hibernate、

2、用了spring data jpa就得用spring的注解,不然dao层的接口怎么实例化啊?


Demo下载:

SSJ 完整干净 Demo

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页