在Maven中整合Spring MVC与Hibernate笔记

第一次发帖:请大家见谅。

在Maven环境下搭建SpringMVC,比较快速,直接在项目上右击找到MyEclipse然后选择Add Spring Capabilities就好了,但是在整合Hibernate时,使用同样的方法添加Hibernate Capabilities时就会出现jar包的冲突,缺少等各种问题。最后选择自己挨个添加jar包的方法。进行整合。虽然也出现了jar包缺少等问题。但是相对来说,Maven中自动添加的jar少,在排除问题时就比较容易了。
环境介绍:
MyEclipse10.0、Spring 3.0.5.RELEASE、Hibernate3.6.6。
jar包截图:[img]
[img]http://dl2.iteye.com/upload/attachment/0106/8787/1e93ac2e-8899-3391-a8a7-6a08b1a237a5.png[/img]
[/img]
目录结构:[img]
[img]http://dl2.iteye.com/upload/attachment/0106/8789/57e03869-69b9-3040-b951-3837b3d77330.png[/img]
[/img]
简短介绍:
在浏览器地址栏输入:localhost/login。然后会进入controller目录下的Welcome 中。Welcome中实现了ItemService的注入,ItemService实现了ItemDao的注入。ItemDao实现了和持久层对象Item的绑定。在每一层都输出了一句话。最后实验,web程序可以正常运行。
第一一步: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 >com.hello.login </groupId>
<artifactId >login- maven</ artifactId>
<packaging >war </packaging>
<version >0.0.1-SNAPSHOT </version>
<name >login- maven Maven Webapp</name >
<url >http://maven.apache.org </url>
<dependencies >
<dependency >
<groupId >junit</groupId>
<artifactId >junit</artifactId>
<version >3.8.1 </version>
<scope >test </scope>
</dependency > //这个是测试
<dependency >
<groupId >org.springframework </groupId>
<artifactId >spring-beans </artifactId>
<version >3.0.5.RELEASE </version>
</dependency >
<dependency >
<groupId >org.springframework </groupId>
<artifactId >spring-context </artifactId>
<version >3.0.5.RELEASE </version>
</dependency >
<dependency >
<groupId >org.springframework </groupId>
<artifactId >spring- webmvc</ artifactId>
<version >3.0.5.RELEASE </version>
</dependency >
<dependency >
<groupId >org.springframework </groupId>
<artifactId >spring- tx</ artifactId>
<version >3.0.5.RELEASE </version>
</dependency >
<dependency >
<groupId >org.springframework </groupId>
<artifactId >spring- jdbc</ artifactId>
<version >3.0.5.RELEASE </version>
</dependency >
<dependency >
<groupId >org.springframework </groupId>
<artifactId >spring- orm</ artifactId>
<version >3.0.5.RELEASE </version>
</dependency > //全是Spring的包
<dependency >
<groupId> log4j</ groupId>
<artifactId> log4j</ artifactId>
<version> 1.2.14</ version>
</dependency >//Spring对这个jar包有依赖
<dependency >
<groupId> org.json</ groupId>
<artifactId> json</artifactId >
<version> 20090211</ version>
</dependency > <dependency >
<groupId> net.sf.json-lib </groupId>
<artifactId> json-lib</artifactId>
<version> 2.4</ version>
<classifier> jdk15</ classifier>
</dependency > <dependency >
<groupId> org.hibernate</groupId >
<artifactId> hibernate-core </artifactId>
<version> 3.6.6.Final</version >
</dependency> <dependency >
<groupId> org.hibernate</groupId >
<artifactId> hibernate-commons-annotations </artifactId>
<version> 3.2.0.Final</version >
<exclusions>
<exclusion>
<groupId> org.slf4j</groupId >
<artifactId> slf4j-api</artifactId >
</exclusion>
</exclusions>
</dependency > <dependency >
<groupId> org.slf4j</groupId >
<artifactId> slf4j-log4j12</artifactId >
<version> 1.6.1</ version>
</dependency > <dependency >
<groupId> org.hibernate</groupId >
<artifactId> shards</artifactId >
<version> 3.0.0B2</ version>
</dependency > <dependency >
<groupId> org.javassist</groupId >
<artifactId> javassist</artifactId >
<version> 3.16.1-GA</version >
</dependency >
</dependencies >
<build >
<finalName >login- maven</ finalName>
<plugins >
<plugin >
<groupId> org.mortbay.jetty</groupId >//这个是对该web应用添加jetty插件,经过一些配置之后,该web应用就可以在jetty中运行了。
<artifactId> maven-jetty-plugin</artifactId >
<version> 6.1.26</ version>
<configuration>
<webAppConfig>
<defaultsDescriptor> src/main/resources/webdefault.xml </defaultsDescriptor>
</webAppConfig> //这个好像是jetty的标配,等着学习jetty相关的知识时注意下:Jetty根据webdefault.xml文件中的内容配置web应用的诸如JSP,默认的Servlet和Invoker.
<contextPath> /</ contextPath>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector" >
<port> 80</ port> //这个就是配置jetty的端口了
</connector>
</connectors>
<scanIntervalSeconds> 0</ scanIntervalSeconds> //配置这个貌似是让jetty隔一段时间自动的去扫描后面目录下的class文件。这样我们就可以不同经常停止服务器了。0是不扫描。
<scanTargetPatterns>
<scanTargetPattern>
<directory> src/main/webapp</directory>
<includes>
<include> **/*.xml</include >
<include> **/*.properties</include >
</includes>
</scanTargetPattern> //这个配置比较主要就是配置我们的扫描目录的。这个就是配置的我们的web应用的目录。
</scanTargetPatterns>
<systemProperties>
<systemProperty>
<name> javax.xml.parsers.DocumentBuilderFactory </name>
<value> com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl </value>
</systemProperty>
<systemProperty>
<name> javax.xml.parsers.SAXParserFactory </name>
<value> com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl </value>
</systemProperty>
<systemProperty>
<name> javax.xml.transform.TransformerFactory </name>
<value> com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl </value>
</systemProperty>
<systemProperty>
<name> org.eclipse.jetty.util.URI.charset</name >
<value> UTF-8</ value>
</systemProperty>
</systemProperties> </configuration> </plugin> </plugins > </build > </project>


webdefault.xml就不贴了,网上有好多。然后就是web.xml
<?xml version= "1.0" encoding ="UTF-8"?>
<web-app xmlns= "http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version= "2.4">
<display-name >Archetype Created Web Application</display-name>
<welcome-file-list >
<welcome-file >index.jsp </welcome-file>
</welcome-file-list > 欢迎页
<context-param >
<param-name> log4jConfigLocation</param-name >
<param-value> classpath:/log4j-debug.xml </param-value>
</context-param > log4j-debug.xml是log4j的配置文件,貌似是必需品。网上有好多,就不贴出来了
<listener >
<listener-class> org.springframework.web.util.Log4jConfigListener</listener-class >
</listener > log4j:的配置文件和监听器,这个是spring 中需要的一个监听器,这个监听器要放在Spring监听器的前面。web.xml的启动顺序:context-param--->listener--->filter--->servlet;同级的话就是按照在配置文件中的配置顺序。
<context-param >
<param-name >contextConfigLocation </param-name>
<param-value >classpath*:applicationContext.xml</param-value >
</context-param > applicationContext这个是Spring的配置文件,这个里面记录着对hibernate的整合。
<listener >
< listener-class>org.springframework.web.context.ContextLoaderListener </listener-class>
</listener > Spring的启动监听器,要整合Hibernate就要配置这个。
<servlet >
<servlet-name >dispatcher </servlet-name>
< servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
<load-on-startup >1 </load-on-startup>
</servlet >
<servlet-mapping >
<servlet-name >dispatcher </servlet-name>
<url-pattern >/ </url-pattern>
</servlet-mapping > 这个就是我们SpringDispatcher的核心了。注意:<url-pattern>写的是/不是/*这是有原因的,具体看剪藏
</web-app>

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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
<property name= "locations">
<list>
<value> classpath:system.properties</value >
</list>
</property>
</bean > 这个就是一读取外部文件的方式配置数据库了。
<!--扫描service、dao层的注解并使之成为bean -->
<context:component-scan base-package= "com.hello" >
<context:exclude-filter type= "annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan >
这个是读取注解的,很重要。开始时没有配置这个总是报错说找不到要注入的bean,最后比对了一个成功的项目才发现这个。采用注解的方式必须要配置这个。我们可以利用exclude-filter和include-filter来区分要扫面的bean。exclude是要排除的注解bean。include是要包含的注解bean

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" >
<property name= "driverClassName" value="${jdbc.driver}" />
<property name= "url" value ="${jdbc.url}" />
<property name="username" value= "${jdbc.username}" />
<property name="password" value= "${jdbc.password}" />
<property name="timeBetweenEvictionRunsMillis" value="1800000" />
<property name="minEvictableIdleTimeMillis" value="1800000" />
</bean >
数据库的配置bean
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
<property name= "dataSource" ref ="dataSource" />
<property name= "schemaUpdate" value ="true" />
<property name= "packagesToScan">
<list>
<value> com.hello.domain</value ><!-- 采用注解法实现实体与数据库的链接 -->
</list>
</property> 实体类我们采用的是注解的方式,这个扫描并成为实体类的目录。我们也可以直接指定实体类。
<property name= "hibernateProperties">
<props>
<prop key="hibernate.show_sql" >false </prop>
<prop key="hibernate.format_sql" >false </prop>
<prop key="hibernate.dialect" >org.hibernate.dialect.MySQL5Dialect </prop>
</props>
</property>
</bean >
</beans> 这是sessionFactory Bean,Session是操作hibernate的入口类(门面模式)。这个是Hibernate与Spring整合的关键设置。

dispatch-servlet.xml就是最基本的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值