在上面我们已经对Spring进行了整合,现在我们来继续整合上SpringMVC。
1)创建SpringMVC配置文件 <!-- 扫描所有@Controller注解修饰的类 --> <context:component-scan base-package="com.simple.springdata"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!--将非mapping配置下的请求交给默认的Servlet来处理 --> <mvc:default-servlet-handler /> <!--如果添加了默认servlet,mvc请求将无效,需要添加annotation-driven --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 配置试图解析器 --> <bean> <property value="WEB-INF/views/" /> <property value=".jsp" /> </bean> 2)配置WEB.XML <!-- 解决JPA懒加载问题 --> <filter> <filter-name>OpenEntityManager</filter-name> <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenEntityManager</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 添加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> <!-- 编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 启动SpringMVC核心控制器 --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 添加PUT DELETE支持 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 5.Repository接口介绍Repository 接口是 Spring Data 中的一个空接口,它不提供任何方法,我们称为标记接口,可以在接口中声明需要的方法。
public interface Repository<T, ID extends Serializable> { } 若我们定义的接口继承了Repository接口,则该接口会被Spring容器识别为一个Repository类,并纳入到Spring容器中。
Spring Data可以让我们只定义接口,只要遵循 Spring Data的规范,就无需写实现类。
与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。
package com.simple.springdata.dao; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.RepositoryDefinition; import com.simple.springdata.entitys.Dept; /** * @author SimpleWu * @RepositoryDefinition(domainClass=Dept.class,idClass=Integer.class)与继承 * JpaRepository<Dept, Integer>效果一致 */ @RepositoryDefinition(domainClass=Dept.class,idClass=Integer.class) public interface DeptDao /*extends JpaRepository<Dept, Integer>*/{ } 6.Repository 的子接口基础的 Repository 提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下:
Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类
1)CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法
2)PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法