使用IDEA搭建Maven+SpringMVC+Spring+Hibernate环境

来源:互联网 发布:科比生涯数据图 编辑:程序博客网 时间:2024/06/05 09:46

前期准备

  • jdk,tomcat,mysql,已正确安装
  • Maven已正确安装,在cmd中可以查看maven版本
  • IDEA已正确安装,能把简单项目跑起来

开始出发

  • 打开IDEA,选择Maven,找到maven
    这里写图片描述
    选择webapp时别弄混了,上面也有一个cocoon-22-archetype-webapp,不要选那个,认准maven大品牌

  • 点击Next,填写信息
    这里写图片描述
    GroupId:一般分为多个段,第一段为域,第二段为公司名称,例如:org.apache
    ArtifactId:项目名
    若项目在maven本地仓库中,就根据这俩ID去找项目

  • 点击Next,后面步骤可以不用修改
    这里写图片描述

  • 点击Next,点击Finish
    这里写图片描述
    进入界面后,IDEA自动配置相关信息,右下角有个Enable Auto-Import,点击它,若第一次使用maven,那么它自动去maven中央仓库去下载基本包在本地仓库中

  • 目录结构创建(先去了解maven标准目录结构,哪些文件应放在哪里,有什么功能等)

    1.首先在main创建一个java文件夹,用于放java代码
    这里写图片描述

    2.配置目录属性

    点击右上角图标
    这里写图片描述

    配置java文件夹属性
    这里写图片描述

相同步骤,配置resource文件夹属性
这里写图片描述

还有test文件夹,我这里就没创建了

3.下一步进行文件创建
这里写图片描述

  • 现在到了非常重要的一步,在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>flysky.show</groupId>  <artifactId>MavenTestSeven</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>MavenTestSeven Maven Webapp</name>  <url>http://maven.apache.org</url>  <!--版本控制,这是自己添加的-->  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <spring.version>4.3.10.RELEASE</spring.version>    <hibernate.version>5.2.10.Final</hibernate.version>    <jackson.version>2.5.0</jackson.version>  </properties>  <dependencies>    <!--Junit单元测试-->    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <!--          spring基本依赖包配置    -->    <!--AOP联盟的API包,里面包含了针对面向切面的接口-->    <dependency>      <groupId>aopalliance</groupId>      <artifactId>aopalliance</artifactId>      <version>1.0</version>    </dependency>    <!--Spring的面向切面编程,提供AOP(面向切面编程)实现 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring提供对AspectJ框架的整合-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aspects</artifactId>      <version>${spring.version}</version>    </dependency>    <!--SpringIOC基础实现-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-beans</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring核心组件-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>${spring.version}</version>    </dependency>    <!--为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring-context的扩展支持,用于MVC方面 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context-support</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring表达式语言 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-expression</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring对服务器的代理接口-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-instrument</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring对tomcat连接池的集成-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-instrument-tomcat</artifactId>      <version>4.3.12.RELEASE</version>    </dependency>    <!--包含对Spring 对JDBC 数据访问进行封装的所有类-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-jdbc</artifactId>      <version>${spring.version}</version>    </dependency>    <!--为简化jms api的使用而做的简单封装,消息服务-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-jms</artifactId>      <version>${spring.version}</version>    </dependency>    <!--为集成messaging api和消息协议提供支持-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-messaging</artifactId>      <version>${spring.version}</version>    </dependency>    <!--对象/关系型映射,用于整合其他ORM框架,例如Hibernate-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-orm</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-oxm</artifactId>      <version>${spring.version}</version>    </dependency>    <!--单元测试和集成测试的简单封装-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>${spring.version}</version>      <scope>test</scope>    </dependency>    <!--为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-tx</artifactId>      <version>${spring.version}</version>    </dependency>    <!--SpringMVC支持WEB端应用部署架构-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-web</artifactId>      <version>${spring.version}</version>    </dependency>    <!--REST Web服务和Web应用的视图控制器的实现 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>${spring.version}</version>    </dependency>    <!--Spring框架的Portlet MVC模块基于Web MVC模块的Portlet实现-->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc-portlet</artifactId>      <version>4.3.12.RELEASE</version>    </dependency>    <!--提供 Socket通信, web端的推送功能,包括对STOMP支持 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-websocket</artifactId>      <version>${spring.version}</version>    </dependency>    <!--                Hibernate基本配置        -->    <!--Hibernate核心包-->    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-core</artifactId>      <version>${hibernate.version}</version>    </dependency>    <!--hibernate-c3p0数据源-->    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-c3p0</artifactId>      <version>5.2.12.Final</version>    </dependency>    <dependency>      <groupId>org.hibernate.common</groupId>      <artifactId>hibernate-commons-annotations</artifactId>      <version>5.0.1.Final</version>    </dependency>    <!--使用EntityManager实现JPA-->    <dependency>      <groupId>org.hibernate</groupId>      <artifactId>hibernate-entitymanager</artifactId>      <version>4.3.9.Final</version>    </dependency>    <!--hibernate-jpa-->    <dependency>      <groupId>org.hibernate.javax.persistence</groupId>      <artifactId>hibernate-jpa-2.1-api</artifactId>      <version>1.0.0.Final</version>    </dependency>    <!--解析HQL需要-->    <dependency>      <groupId>org.antlr</groupId>      <artifactId>antlr4</artifactId>      <version>4.7</version>    </dependency>    <dependency>      <groupId>com.fasterxml</groupId>      <artifactId>classmate</artifactId>      <version>1.3.4</version>    </dependency>    <!--Jakarta的通用日志记录包-->    <dependency>      <groupId>commons-logging</groupId>      <artifactId>commons-logging</artifactId>      <version>1.2</version>    </dependency>    <!--Hibernate操作XML-->    <dependency>      <groupId>org.dom4j</groupId>      <artifactId>dom4j</artifactId>      <version>2.1.0</version>    </dependency>    <dependency>      <groupId>org.jboss</groupId>      <artifactId>jandex</artifactId>      <version>2.0.3.Final</version>    </dependency>    <!--字节码编辑工具-->    <dependency>      <groupId>org.javassist</groupId>      <artifactId>javassist</artifactId>      <version>3.20.0-GA</version>    </dependency>    <!--日志输出-->    <dependency>      <groupId>org.jboss.logging</groupId>      <artifactId>jboss-logging</artifactId>      <version>3.3.1.Final</version>    </dependency>    <dependency>      <groupId>org.jboss.spec.javax.transaction</groupId>      <artifactId>jboss-transaction-api_1.2_spec</artifactId>      <version>1.0.0.Final</version>    </dependency>    <!--C3P0依赖jar包-->    <dependency>      <groupId>com.mchange</groupId>      <artifactId>mchange-commons-java</artifactId>      <version>0.2.14</version>    </dependency>    <!--            其他配置     -->    <!-- c3p0数据源 -->    <dependency>      <groupId>com.mchange</groupId>      <artifactId>c3p0</artifactId>      <version>0.9.5-pre10</version>    </dependency>    <!-- json -->    <dependency>      <groupId>com.alibaba</groupId>      <artifactId>fastjson</artifactId>      <version>1.2.3</version>    </dependency>    <!-- servlet -->    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>servlet-api</artifactId>      <version>3.0-alpha-1</version>    </dependency>    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>    </dependency>    <!-- mysql连接 -->    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.39</version>    </dependency>    <!--整合各志框架种日的工具-->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>1.7.21</version>    </dependency>    <!-- log4j -->    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.17</version>    </dependency>  </dependencies>  <build>    <finalName>MavenTestSeven</finalName>    <plugins>      <!--用来在maven构建生命周期的test phase执行一个应用的单元测试-->      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-surefire-plugin</artifactId>        <version>2.4.2</version>        <configuration>          <skipTests>true</skipTests>        </configuration>      </plugin>      <!--maven打包工具-->      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-war-plugin</artifactId>        <version>2.3</version>        <configuration>          <webXml>src/main/webapp/WEB-INF/web.xml</webXml>        </configuration>      </plugin>      <!-- generate java doc -->      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-javadoc-plugin</artifactId>        <version>2.9.1</version>        <configuration>          <javadocDirectory>target/javadoc</javadocDirectory>          <reportOutputDirectory>target/javadoc</reportOutputDirectory>          <charset>UTF-8</charset>          <encoding>UTF-8</encoding>          <docencoding>UTF-8</docencoding>          <show>private</show>        </configuration>      </plugin>    </plugins>  </build></project>

分析:

没有用maven时,我们要在项目中手动去导入jar包,例如下图:
这里写图片描述
这很麻烦,而用了maven后,直接在pom.xml文件中配置就可以了。maven先在本地仓库中去查找是否有该jar包,若没有就去中央仓库下载到本地仓库。我们可以发现,若本地仓库中没有jar包,在IDEA右下角进度条中,时间要长一点,那是在中央仓库中下载jar包,而本地仓库中有,则一瞬间就完成了配置。
对比:pom.xml文件中的配置,就相当于没有用maven时,去手动下载jar包,而使用了maven后,在配置里面就直接解决了

问题:该如何去配置pom.xml文件?

我作为一个刚接触maven的新手来说,这也是一个很纠结的问题,我该整么去配置呢?看其他的博客再copy下来?不,治标不治本,下面讲讲我自己的步骤。

答:没用maven时,肯定有搭建框架的jar包呀,原来项目需要用到哪些jar包,我就去中央仓库中找,那里一般都有的,然后看它的maven配置介绍,copy下来放在pom.xml中就行了,IDEA自动帮你下载,这样就完成了一个jar包的导入。还是直接看图吧

1.例如,我在原来的项目中,看到有antlr-2.7.7.jar这个文件
这里写图片描述

2.然后去maven中央仓库,地址:http://mvnrepository.com/ 然后直接搜索关键字,一般第一个就是
这里写图片描述

3.选择版本,这里我们随便选择一个
这里写图片描述

4.查看maven配置语句,copy下来,放在pom.xml文件中
这里写图片描述

这样就完成了一个jar包的导入,假如很多jar包版本号都是一样的,可以使用配置文件最前面那个版本统一标识统一配置。下面进行其他文件配置

  • web.xml+applicationContext.xml文件+dispatcher-servlet.xml+config.xml文件配置

    1.web.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="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">  <display-name>Archetype Created Web Application</display-name>  <!--加载log4j配置文件-->  <context-param>    <param-name>log4jConfigLocation</param-name>    <param-value>classpath:/log4j.properties</param-value>  </context-param>  <listener>    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  </listener>  <!--加载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-name>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>dispatcher</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>  <!--字符配置为UTF-8-->  <filter>    <filter-name>characterEncodingFilter</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>    <init-param>      <param-name>forceEncoding</param-name>      <param-value>true</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>characterEncodingFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  <!--项目启动时,加载欢迎页-->  <welcome-file-list>    <welcome-file>/index.jsp</welcome-file>  </welcome-file-list></web-app>

2.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:context="http://www.springframework.org/schema/context" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">    <!--配置自动扫描的包-->    <context:component-scan base-package="flysky.demo">        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>        <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan>    <!--加载属性文件-->    <context:property-placeholder location="classpath:/config.properties"/>    <!--开启事务注解-->    <tx:annotation-driven/>    <!--导入数据源-->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="driverClass" value="${jdbc.driver}"/>        <property name="jdbcUrl" value="${jdbc.url}"/>        <property name="user" value="${jdbc.username}"/>        <property name="password" value="${jdbc.password}"/>    </bean>    <!--配置bean实例,若使用@Component注解就可以不用写-->    <bean id="user" class="flysky.demo.entity.User"/>    <!--配置jdbcTemplate-->    <!--配置 EntityManagerFactory-->    <bean id="entityManagerFactory"          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">        <property name="dataSource" ref="dataSource"/>        <!-- 配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->        <property name="jpaVendorAdapter">            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>        </property>        <!-- 配置实体类所在的包 -->        <property name="packagesToScan" value="flysky.demo.entity"/>        <!-- 数据库基本配置 -->        <property name="jpaProperties">            <props>                <prop key="hibernate.dialect">${hibernate.dialect}</prop>                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>            </props>        </property>    </bean>    <!-- 配置 JPA 使用的事务管理器 -->    <bean id="transactionManager"          class="org.springframework.orm.jpa.JpaTransactionManager">        <property name="entityManagerFactory" ref="entityManagerFactory"/>    </bean>    <!-- 配置支持基于注解是事务配置 -->    <tx:annotation-driven transaction-manager="transactionManager"/></beans>

3.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"       xmlns:mvc="http://www.springframework.org/schema/mvc"       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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">    <!--配置自动扫描的包-->    <context:component-scan base-package="flysky.demo">        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan>    <!--配置视图解析器:把返回的方法解析为实际视图-->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/views/html/"/>        <property name="suffix" value=".jsp"/>    </bean>    <!--根路径加载静态资源文件-->    <mvc:resources location="/WEB-INF/views/css/" mapping="/views/css/**" />    <mvc:resources location="/WEB-INF/views/js/" mapping="/views/js/**" />    <mvc:resources location="/WEB-INF/views/img/" mapping="/views/img/**" />    <mvc:resources location="/WEB-INF/views/html/" mapping="/views/html/**" />    <!--两个必要配置-->    <mvc:default-servlet-handler/>    <mvc:annotation-driven/></beans>

4.config.xml文件配置

#application configs#jdbc c3p0 configjdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=UTF-8jdbc.username = rootjdbc.password = admin#hibernate confighibernate.dialect = org.hibernate.dialect.MySQLDialecthibernate.show_sql = truehibernate.format_sql = falsehibernate.hbm2ddl.auto = update

5.log4j.properties文件配置,这个网上都有,我还是贴出来吧

### set log levels ###log4j.rootLogger = INFO , C , D , E ### console ###log4j.appender.C = org.apache.log4j.ConsoleAppenderlog4j.appender.C.Target = System.outlog4j.appender.C.layout = org.apache.log4j.PatternLayoutlog4j.appender.C.layout.ConversionPattern = [springmvc_hibernate][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n### log file ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = ../logs/springmvc_hibernate_demo.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = INFO log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = [springmvc_hibernate][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n### exception ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File = ../logs/springmvc_hibernateerror.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = [FundsManagerSys][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

ok,完成了,下面就可以启动tomcat看看,有什么问题再慢慢解决,若在原来的SSH项目中跑着没问题,用了Maven后却报错,那么肯定是pom.xml文件配置出了问题,要么是有些包依赖没配置到,要么就是多配置了起冲突,结合问题再自己看看吧,多弄几次就熟悉了。

小编也是刚入坑的新人,若文章中有地方理解错误,还请大神多多指点!