spring4.1.0+spring mvc4.1.0+spring data jpa1.7.0+maven整合

个人博客:http://www.loveweir.com/

spring4.1.0已经正式发布了,整合一下使用spring mvc和spring 的jpa,之前的另一个项目有用到,感觉挺好用的,有减少了很多工作量,而且用起来简单,今天在搭建一个最新的。

首先从maven开始,我用的myeclipse2014.

1.pom.xml文件:

Xml代码   收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>loveweir</groupId>  
  5.     <artifactId>loveweir</artifactId>  
  6.     <version>0.0.1-SNAPSHOT</version>  
  7.     <packaging>war</packaging>  
  8.     <name>loveweir</name>  
  9.     <description />  
  10.     <properties>  
  11.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  12.     </properties>  
  13.     <dependencies>  
  14.         <dependency>  
  15.             <groupId>org.springframework</groupId>  
  16.             <artifactId>spring-context</artifactId>  
  17.             <version>4.1.0.RELEASE</version>  
  18.         </dependency>  
  19.         <dependency>  
  20.             <groupId>org.springframework</groupId>  
  21.             <artifactId>spring-orm</artifactId>  
  22.             <version>4.1.0.RELEASE</version>  
  23.         </dependency>  
  24.   
  25.         <dependency>  
  26.             <groupId>org.springframework</groupId>  
  27.             <artifactId>spring-webmvc</artifactId>  
  28.             <version>4.1.0.RELEASE</version>  
  29.         </dependency>  
  30.   
  31.         <dependency>  
  32.             <groupId>org.hibernate</groupId>  
  33.             <artifactId>hibernate-core</artifactId>  
  34.             <version>4.3.6.Final</version>  
  35.         </dependency>  
  36.         <dependency>  
  37.             <groupId>org.hibernate</groupId>  
  38.             <artifactId>hibernate-entitymanager</artifactId>  
  39.             <version>4.3.6.Final</version>  
  40.         </dependency>  
  41.         <dependency>  
  42.             <groupId>org.springframework.data</groupId>  
  43.             <artifactId>spring-data-jpa</artifactId>  
  44.             <version>1.7.0.RELEASE</version>  
  45.         </dependency>  
  46.         <dependency>  
  47.             <groupId>mysql</groupId>  
  48.             <artifactId>mysql-connector-java</artifactId>  
  49.             <version>5.1.32</version>  
  50.         </dependency>  
  51.   
  52.         <dependency>  
  53.             <groupId>com.alibaba</groupId>  
  54.             <artifactId>druid</artifactId>  
  55.             <version>1.0.9</version>  
  56.         </dependency>  
  57.         <dependency>  
  58.             <groupId>com.alibaba</groupId>  
  59.             <artifactId>fastjson</artifactId>  
  60.             <version>1.1.41</version>  
  61.         </dependency>  
  62.         <dependency>  
  63.             <groupId>commons-fileupload</groupId>  
  64.             <artifactId>commons-fileupload</artifactId>  
  65.             <version>1.3.1</version>  
  66.         </dependency>  
  67.         <dependency>  
  68.             <groupId>junit</groupId>  
  69.             <artifactId>junit-dep</artifactId>  
  70.             <version>4.11</version>  
  71.             <scope>test</scope>  
  72.         </dependency>  
  73.         <dependency>  
  74.             <groupId>javax.servlet.jsp.jstl</groupId>  
  75.             <artifactId>javax.servlet.jsp.jstl-api</artifactId>  
  76.             <version>1.2.1</version>  
  77.         </dependency>  
  78.         <dependency>  
  79.             <groupId>org.glassfish.web</groupId>  
  80.             <artifactId>jstl-impl</artifactId>  
  81.             <version>1.2</version>  
  82.         </dependency>  
  83.         <dependency>  
  84.             <groupId>org.apache.commons</groupId>  
  85.             <artifactId>commons-lang3</artifactId>  
  86.             <version>3.3.2</version>  
  87.         </dependency>  
  88.         <dependency>   
  89.        <groupId>db2jcc</groupId>   
  90.        <artifactId>db2jcc</artifactId>   
  91.        <version>8.2</version>   
  92.     </dependency>  
  93.     </dependencies>  
  94.     <build>  
  95.         <plugins>  
  96.             <plugin>  
  97.                 <artifactId>maven-compiler-plugin</artifactId>  
  98.                 <version>2.3.2</version>  
  99.                 <configuration>  
  100.                     <source>1.6</source>  
  101.                     <target>1.6</target>  
  102.                 </configuration>  
  103.             </plugin>  
  104.             <plugin>  
  105.                 <artifactId>maven-war-plugin</artifactId>  
  106.                 <version>2.2</version>  
  107.                 <configuration>  
  108.                     <version>3.0</version>  
  109.                     <failOnMissingWebXml>false</failOnMissingWebXml>  
  110.                 </configuration>  
  111.             </plugin>  
  112.         </plugins>  
  113.     </build>  
  114. </project>  

 这里就不解释了,一看就明白了。

2.persistence.xml文件:

这个文件我就不解释放在哪里了。

Xml代码   收藏代码
  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="loveweir">  
  4.     <provider>org.hibernate.ejb.HibernatePersistence</provider>    
  5.         <properties>  
  6.             <!--配置Hibernate方言 -->  
  7.             <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> -->  
  8.             <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect" />  
  9.             <!--配置数据库驱动 -->  
  10.             <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> -->  
  11.             <property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver" />  
  12.             <!--配置数据库用户名 -->  
  13.             <property name="hibernate.connection.username" value="db2admin" />  
  14.             <!--配置数据库密码 -->  
  15.             <property name="hibernate.connection.password" value="wiseknitssap" />  
  16.             <!--配置数据库url -->  
  17.             <!-- <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/loveweir?useUnicode=true&amp;characterEncoding=UTF-8" /> -->  
  18.             <property name="hibernate.connection.url" value="jdbc:db2://172.168.1.20:50000/wk_prod" />  
  19.             <!--设置外连接抓取树的最大深度 -->  
  20.             <property name="hibernate.max_fetch_depth" value="3" />  
  21.             <!--自动输出schema创建DDL语句 -->  
  22.             <!-- <property name="hibernate.hbm2ddl.auto" value="update" /> -->  
  23.             <property name="hibernate.show_sql" value="true" />  
  24.             <property name="hibernate.format_sql" value="true" />  
  25.             <property name="javax.persistence.validation.mode" value="none"/>  
  26.         </properties>  
  27.     </persistence-unit>  
  28. </persistence>  

 我用的数据库是ibm db2 ,大家自行使用。

3.applicationContext.xml文件:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xmlns:jpa="http://www.springframework.org/schema/data/jpa"  
  7.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  8.     xmlns:tx="http://www.springframework.org/schema/tx"  
  9.     xmlns:util="http://www.springframework.org/schema/util"  
  10.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  11.         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd  
  12.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd  
  13.         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd  
  14.         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd  
  15.         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd  
  16.         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd">  
  17.       
  18.     <context:annotation-config/>  
  19.     <context:component-scan base-package="com.loveweir"/>  
  20.     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  
  21.         <property name="persistenceUnitName" value="loveweir"></property>  
  22.         <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"></property>  
  23.         <property name="jpaVendorAdapter">  
  24.             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">  
  25.                 <property name="showSql" value="true"></property>  
  26.                 <property name="database" value="MYSQL"></property>  
  27.             </bean>  
  28.         </property>  
  29.     </bean>  
  30.     
  31.     <!-- 自动扫描并注入Spring Data JPA -->  
  32.     <jpa:repositories base-package="com.loveweir.dao" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager">  
  33.     </jpa:repositories>     
  34.   
  35.     <!-- 配置事务管理器 -->  
  36.     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
  37.         <property name="entityManagerFactory" ref="entityManagerFactory" />  
  38.     </bean>  
  39.     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false"/>     
  40. </beans>  

 4.loveweir-servlet.xml文件:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd  
  6.         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">  
  8.       
  9.     <context:component-scan base-package="com.loveweir.controller"/>  
  10.     <bean id="fastJsonHttpMessageConverter"  
  11.         class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">  
  12.         <property name="supportedMediaTypes">  
  13.             <list>  
  14.                 <value>application/json</value>  
  15.             </list>  
  16.         </property>  
  17.     </bean>  
  18.     <bean  
  19.         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  20.         <property name="messageConverters">  
  21.             <list>  
  22.                 <ref bean="fastJsonHttpMessageConverter" />  
  23.             </list>  
  24.         </property>  
  25.     </bean>  
  26.     <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->  
  27.     <bean  
  28.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  29.         <property name="viewClass"  
  30.             value="org.springframework.web.servlet.view.JstlView" />  
  31.         <property name="prefix" value="/"></property>  
  32.         <property name="suffix" value=".jsp"></property>  
  33.     </bean>  
  34.   
  35.     <!-- 支持上传文件 -->    
  36.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>  
  37. </beans>  

 这里想说的是不要加:<mvc:annotation-driven></mvc:annotation-driven> 这个东西,

我在这个地方出现的问题是加了这个东西回报这样的错误:

Failed to load resource: the server responded with a status of 406 (Not Acceptable) 

昨天弄了一天网上看了好多帖子都不行,今天有测试把<mvc:annotation-driven></mvc:annotation-driven>去掉,

没想到json就获取到了。

5.web.xml文件:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <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" id="WebApp_ID" version="3.0">  
  3.   <display-name>loveweir</display-name>  
  4.   <!-- 默认的spring配置文件是在WEB-INF下的applicationContext.xml -->  
  5.     <context-param>  
  6.         <param-name>contextConfigLocation</param-name>  
  7.         <param-value>/WEB-INF/applicationContext.xml</param-value>  
  8.     </context-param>  
  9.     <listener>  
  10.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  11.     </listener>  
  12.   
  13.     <filter>  
  14.         <filter-name>OpenEntityManagerInViewFilter</filter-name>  
  15.         <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>  
  16.         <init-param>  
  17.             <param-name>entityManagerFactoryBeanName</param-name>  
  18.             <param-value>entityManagerFactory</param-value>  
  19.         </init-param>  
  20.         <init-param>  
  21.             <param-name>persistenceUnitName</param-name>  
  22.             <param-value>activitioa</param-value>  
  23.         </init-param>  
  24.     </filter>  
  25.     <filter-mapping>  
  26.         <filter-name>OpenEntityManagerInViewFilter</filter-name>  
  27.         <url-pattern>*.do</url-pattern>  
  28.     </filter-mapping>  
  29.   
  30. <!-- 配置spring mvc的相关内容,此处的servlet-name任意,但必须有<your servlet-name>-servlet.xml与之对应 -->  
  31.     <servlet>  
  32.         <servlet-name>loveweir</servlet-name>  
  33.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  34.         <load-on-startup>1</load-on-startup>  
  35.     </servlet>  
  36.     <servlet-mapping>  
  37.         <servlet-name>loveweir</servlet-name>  
  38.         <!-- 配置所有的页面 -->  
  39.         <url-pattern>*.do</url-pattern>  
  40.     </servlet-mapping>  
  41.       
  42.     <!-- 配置过滤器,同时把所有的请求都转为utf-8编码 -->  
  43.     <filter>  
  44.         <filter-name>Spring character encoding filter</filter-name>  
  45.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  46.         <init-param>  
  47.             <param-name>encoding</param-name>  
  48.             <param-value>utf-8</param-value>  
  49.         </init-param>  
  50.         <init-param>  
  51.             <param-name>forceEncoding</param-name>  
  52.             <param-value>true</param-value>  
  53.         </init-param>  
  54.     </filter>  
  55.     <filter-mapping>  
  56.         <filter-name>Spring character encoding filter</filter-name>  
  57.         <url-pattern>/*</url-pattern>  
  58.     </filter-mapping>  
  59.       
  60.     <welcome-file-list>  
  61.         <welcome-file>index.jsp</welcome-file>  
  62.     </welcome-file-list>  
  63. </web-app>  

 配置就这些了,下面就是怎么整合spring data jpa,

spring data jpa 主要的作用是简化了做持久层的操作,spring data jpa做了非常好的封装。

Java代码   收藏代码
  1. public interface MenuDao extends PagingAndSortingRepository<Tmenu, String>{  
  2.   
  3.     @Query("select o from Tmenu o where o.tmenu is null")  
  4.     public List<Tmenu> getListIsNull();  
  5.     @Query("select o from Tmenu o where o.tmenu.id=?")  
  6.     public List<Tmenu> getListById(String id);  
  7. }  

 例如这样一个接口,只需要继承PagingAndSortingRepository就ok,就可以实现CRUD还包括分页等持久化工作。

大家想了解的更多可以到网上搜搜:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/

好了就上面的一个接口就完成了持久层的工作,业务层不变需要service和其实现类

 

Java代码   收藏代码
  1. public interface MenuService {  
  2.   
  3.     public List<MenuVo> tree();  
  4.       
  5.     public List<MenuVo> gettrees(String id);  
  6.       
  7.     public Tmenu find(String id);  
  8.       
  9.     public void save(Tmenu tmenu);  
  10.       
  11.     public void delete(String id);  
  12. }  

 

Java代码   收藏代码
  1. @Service("menuService")  
  2. @Transactional  
  3. public class MenuServiceImpl implements MenuService {  
  4.   
  5.     @Autowired  
  6.     private MenuDao menuDao;  
  7.       
  8.     @Transactional(readOnly=true,propagation=Propagation.REQUIRED)  
  9.     public List<MenuVo> tree() {  
  10.         List<Tmenu> tmenus = (List<Tmenu>) menuDao.findAll();  
  11.         List<MenuVo> menus = new ArrayList<MenuVo>();  
  12.         MenuVo m = null;  
  13.         for (Tmenu tmenu : tmenus) {  
  14.             m = new MenuVo();  
  15.             m.setId(tmenu.getId());  
  16.             m.setIconcls(tmenu.getIconcls());  
  17.             m.setName(tmenu.getText());  
  18.             m.setUrl(tmenu.getUrl());  
  19.             Tmenu t = tmenu.getTmenu();  
  20.             if (t!=null) {  
  21.                 m.setPid(t.getId());  
  22.                 m.setPname(t.getText());  
  23.             }  
  24.             menus.add(m);  
  25.         }  
  26.         return menus;  
  27.     }  
  28.     @Transactional(readOnly=true,propagation=Propagation.REQUIRED)  
  29.     public List<MenuVo> gettrees(String id) {  
  30.         List<Tmenu> tmenus = null;  
  31.         if (id==null) {  
  32.             tmenus = menuDao.getListIsNull();  
  33.         }else {  
  34.             tmenus = menuDao.getListById(id);  
  35.         }  
  36.         List<MenuVo> menus = new ArrayList<MenuVo>();  
  37.         MenuVo m = null;  
  38.         for (Tmenu tmenu : tmenus) {  
  39.             m = new MenuVo();  
  40.             BeanUtils.copyProperties(tmenu, m);  
  41.             Set<Tmenu> tmenus2 = tmenu.getTmenus();  
  42.             Map<String, Object> attributes = new HashMap<String, Object>();  
  43.             attributes.put("url", tmenu.getUrl());  
  44.             m.setAttributes(attributes);  
  45.             if (tmenus2!=null && !tmenus2.isEmpty()) {  
  46.                 m.setState("closed");  
  47.             }else {  
  48.                 m.setState("open");  
  49.             }  
  50.             menus.add(m);  
  51.         }  
  52.         return menus;  
  53.     }  
  54.       
  55.     @Transactional(readOnly=true,propagation=Propagation.REQUIRED)  
  56.     public Tmenu find(String id) {  
  57.         return menuDao.findOne(id);  
  58.     }  
  59.       
  60.     public void save(Tmenu tmenu) {  
  61.         menuDao.save(tmenu);  
  62.     }  
  63.       
  64.     public void delete(String id) {  
  65.         menuDao.delete(id);  
  66.     }  
  67. }  

 从实现类中可以看到spring data jpa 对持久层的封装是如此的完美。

控制层我就不写了。

这次整合出现的问题最多的是json格式的获取,也就是loveweir-servlet.xml的配置问题,其他都很容易配置实现。

c4.1.0+spring data jpa1.7.0+maven整合

原文地址:http://weir2009.iteye.com/blog/2117234
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值