idea 搭建maven+spring mvc+jpa框架

在此之前,对于搭建这样一个框架很是苦恼,总是出错 ,今天,作为一个初学者,将自己实验多次的成功的步骤复原,希望能帮到需要的人

先说一下步骤流程(我认为比较快的步骤)

1、创建maven工程,并配置tomcat(看下一篇博客)

2、创建java文件夹

3、配置pom.xml

4、新建并配置applicationContext.xml和  dispatcher-servlet.xml

5、配置web.xml

6、配置jpa


一、创建java文件夹

1、在src>>main文件夹下新建一个Directory,文件名为java;然后右键点击Mark Directory as --Generated Source Root

2、在文件下创建4个包 package(domain,dao,service,controller)之前先建一个java class,类名随便起,用不到;

二、配置pom.xml

pom.xml的作用就是加载jar包的作用,把需要的jar包引用一下 (如果没有下载下来就在pom.xml页面右键点击maven-reimport自动加载jar 包)

<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>xyz</groupId>
  <artifactId>demo124</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>demo200 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--spring jar包-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>4.1.3.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>1.7.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-websocket</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.1.3.RELEASE</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-commons-annotations</artifactId>
      <version>3.2.0.Final</version>
    </dependency>
    <!--JPA jar 包-->

    <!--oracle-->
    <dependency>
      <groupId>com.oracle</groupId>
      <artifactId>ojdbc6</artifactId>
      <version>11.2.0.3</version>
    </dependency>

    <!--hibernate-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.3.11.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-spatial</artifactId>
      <version>4.3</version>

    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.3.11.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-c3p0</artifactId>
    </dependency>
    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.1-api</artifactId>
      <version>1.0.0.Final</version>
    </dependency>

    <!--日志jar-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.5</version>
      <scope>provided</scope>
    </dependency>

    <!--json-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.5.1</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.5.1</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-lgpl</artifactId>
      <version>1.9.13</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-core-lgpl</artifactId>
      <version>1.9.13</version>
    </dependency>

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
    </dependency>
    <dependency>
      <groupId>jcifs</groupId>
      <artifactId>jcifs</artifactId>
      <version>1.3.17</version>
    </dependency>

    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-websocket</artifactId>
      <version>8.0.23</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.6</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>demo124</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.1</version>
          <configuration>
            <source>1.7</source>
            <target>1.7</target>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
      </plugin>
    </plugins>
  </build>
</project>


   

三、新建并配置spring MVC 的配置文件

在第二个步骤导入jar包,在src>>main>>resource下新建两个xml文件(applicationContext.xml和  dispatcher-servlet.xml)

文件名称可以按照我的写,方便后面关系的对应

接下来配置这两个文件

先看一下我的目录结构:

先来配置applicationContext.xml

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">


    <!--初始entity实体管理器-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="permissionPersistenceUnit"/>
    </bean>
    <!--初始transaction事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!--初始化spring JPA-->
    <!--注意下面的package 路径,对应目录下的dao层-->
 <jpa:repositories base-package="com.geoway.test.dao"  
                      entity-manager-factory-ref="entityManagerFactory"
                      transaction-manager-ref="transactionManager"
                      repository-impl-postfix="Impl">
        <!--factory-class="com.geoway.monitor.dao.BaseDaoRepositoryFactoryBean">-->

    </jpa:repositories>

    <!-- 建立视图内拦截器来解决JPA中访问延迟加载属性时产生的无会话异常 -->
    <!-- LazyInitializationException: could not initialize proxy no session -->
    <!-- 此拦截器会注入到servlet配置中的DefaultAnnotationHandlerMapping中 -->
    <bean name="openEntityManagerInViewInterceptor"
          class="org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor">
        <property name="entityManagerFactory">
            <ref bean="entityManagerFactory" />
        </property>
    </bean>
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="openEntityManagerInViewInterceptor" />
            </list>
        </property>
    </bean>

</beans>


然后再来配置dispatcher-servlet.xml文件

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <!--<!– 启动包扫描功能,以便注册带有@Controller、@service、@repository、@Component等注解的类成为spring的bean –>-->
    <context:component-scan base-package="com.geoway.test"/>
    <!--<mvc:resources mapping="/resources/**" location="/WEB-INF/pages/"></mvc:resources>-->
    <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="false" />
        <property name="favorParameter" value="false" />
        <property name="ignoreAcceptHeader" value="false" />
        <property name="mediaTypes" >
            <value>
                html=text/html
                json=application/json
            </value>
        </property>
    </bean>

   
</beans>

四、配置web.xml,浏览器运行的时候会首先读取web.xml文件(主要是在文件里配置找到上面两个.xml文件的路径)

 

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<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">

  <!-- 加载spring配置文件  指定Spring Bean的配置文件所在目录 -->
  <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>

  <!-- 加载mvc servlet配置文件-->
  <servlet>
    <!--注意下面的servlet-name的名称可以自定义,但是下面的servlet-mapping标签下面的servlet-name一定要和自己定义的名称一样-->
    <servlet-name>mvc-dispatcher</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <!--下面的servlet-name的名称mvc-dispatcher来找到上面的servlet-name名称。然后找到 dispatcher-servlet.xml文件-->
    <servlet-name>mvc-dispatcher </servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
  </welcome-file-list>
  <display-name>Archetype Created Web Application</display-name>
</web-app>

五、终于配置的差不多了,但是运行会报错(创建实体管理entityManager出错)那是因为数据库的操作没有配置好,所以耐下心来,好事情总是值得等待的~~~吐舌头


那我们可就来做最后一步的操作:配置JPA,生成persistence.xml的方法有两种,我先演示一下利用jpa(非本地的)生成的吧

1、点击project structure 在右上角,见图所示:

2、如下图,如果没有模块下面没有jpa就要自己新建一个,点击红色数字标注的加号,选择JPA,然后点击目录下的JPA,然后点击3处的加号,选择persistence.xml,路径一般放在模块名称\src\main\resources\META-INF\persistence.xml,上面的两个配置文件也要放在resource里面

3、生成的persistence.xml你会发现里面是空的,里面是要装一下数据库的配置信息,配置之前需要先连接一下数据库,我的是Oracle数据库

写到这里发现已经写得好多了,对不初学者来说脑子一定晕得很,想把它拆开写吧,但是又觉得拆开了没有逻辑感了,就这样按照这个逻辑下去吧,咱先来连接一下数据库

3.1、刚才咱不是生成了persistence.xml了嘛,咱现在就来点他,我的工程就是demo124,选择generate persistence mapping 的By database schema

3.2  接下来就弹出一个界面(数据库我的不是本地的,连的是公司的服务器上的)


上面的设置知道第五步出现successful 才说明你库连上了

然后回到步骤1的界面,我们选一张表生成一个实体,看看



ok 之后会在domian层下面生成一张表的实体,

接下来    终于  终于     到最后一步了:配置persistence.xml(加油,加油)(注意,有两种配置方式,下面我注释掉的是系统自动生成的,但是我运行就报错,说生成实体管理失败,我找了好多办法,试了下下面的用下面的写法就成功了,其实我觉得主要还是有有用户名和密码啥的)

<?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="permissionPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <!--下面是我生成的一张用户表-->
 <class>com.XXX.test.domain.TbYxuser</class>
    <!--<properties>--> 

        <!--<property name="toplink.jdbc.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>-->
        <!--<property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>-->
        <!--<property name="hibernate.connection.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>-->
        <!--<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>-->
        <!--<property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>-->
        <!--<property name="openjpa.ConnectionDriverName" value="oracle.jdbc.OracleDriver"/>-->
        <!--<property name="eclipselink.jdbc.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>-->
        <!--<property name="eclipselink.jdbc.driver" value="oracle.jdbc.OracleDriver"/>-->
    <!--</properties>-->

    <properties>
        <property name="hibernate.connection.url" value="jdbc:oracle:thin:@//db11gr1.XXX.net:1521/db11g"/>
        <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>

        <property name="hibernate.connection.username" value="XXX"/>
        <property name="hibernate.connection.password" value="XXX"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.max_fetch_depth" value="5"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

</persistence>

。。。。。。。。。。。到这一步终于写完了。劳心劳力,

如果运行后还老是出现这样的问题,那就要需要注意我说的在配置的过程中强调的了

SEVERE: Exception sending contextinitialized event to listener instance of classorg.springframework.web.context.ContextLoaderListener

org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'entityManagerFactory' defined in class pathresource [applicationContext.xml]: Invocation of init method failed; nestedexception is javax.persistence.PersistenceException: Unable to build entitymanager factory

看一下运行的结果:

  

           开心吧~~~~啦啦啦

我现在自己不看网上的案例自己就能很快的搭建起来这样的框架,突然有点佩服自己了,想想自己一开始什么都不会,老是吐槽为啥这么多的文件,也不知他们之间的联系是啥,所以老是缺这少那的,走一步卡一步,还好自己没放弃,一步步的来,关键在于遇到问题了要去解决而不是逃避,要不然,自己永远什么都学不会。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值