[Spring+Hibernate系列]1.Spring+Hibernate 框架搭建

来源:互联网 发布:施明德 知乎 编辑:程序博客网 时间:2024/05/21 05:05

1. 示例环境

OS版本: Win 7 , 64位
Java 版本: java version "1.6.0_30"
开发IDE: Eclipse,  Version: Indigo Service Release 2
Spring 版本: Spring 4.1.5 (下载后的文件名为spring-framework-3.2.3.RELEASE-dist.zip, 解压目录 spring-framework-3.2.3.RELEASE)
下载地址: http://repo.springsource.org/libs-release-local/org/springframework/spring/
Hibernate 版本:Hibernate 4.2.2 (下载后的文件名为hibernate-release-4.2.2.Final.zip,解压目录hibernate-release-4.2.2.Final)
数据库: oracle 10g



2. 创建Project

在Eclipse 中
File --> New --->Project , 创建Dynamic Web Project


Project name 输入: springHibernateDemo
其他默认,直接完成。
为了简化, 把所有的 需要的jar 档全部拷入到 lib 中, 实际开发中可以根据需要进行选择。



Spring 的jar 目录:



Hibernate 的jar 目录



其他需要导入的jar包:
log4j-1.2.13.jar
aopalliance-1.0.jar
aspectjweaver-1.7.4.jar
classworlds-1.1.jar
commons-beanutils-1.9.0.jar
commons-cli-1.0.jar
commons-codec-1.9.jar
commons-collections-3.2.jar
commons-configuration-1.9.jar
commons-dbcp-1.4.jar
commons-io-2.2.jar
commons-lang-2.1.jar
commons-logging-1.2.jar
commons-pool-1.2.jar
hibernate-validator-4.2.0.Final.jar
ojdbc6.jar



3. 配置文件的配置

1) web.xml  的配置
在WEB-INF 下建立web.xml 文件

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>springHibernateDemo</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/config/spring-dispather.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>spring-dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/config/spring-dispather.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>spring-dispatcher</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><filter><filter-name>openSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class><init-param><param-name>sessionFactoryBeanName</param-name><param-value>sessionFactory</param-value></init-param></filter><filter-mapping><filter-name>openSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- begin for log4j --><context-param><param-name>log4jConfigLocation</param-name><param-value>WEB-INF/config/log4j.properties</param-value></context-param><context-param><param-name>log4jRefreshInterval</param-name><param-value>3000</param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><!-- End for log4j --><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>




解释一下以上的主要配置:
1. spring-dispatcher 是配置Spring 的配置文件的位置。以及spring 的servlet 对 .do 结尾的呼叫进行截取。
2. openSessionInViewFilter 的serlvet 的配置。
这个servlet 的作用是:如果Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter或者OpenSessionInViewInterceptor。session会在transaction结束后关闭。
如果应用中使用了OpenSessionInViewFilter或者OpenSessionInViewInterceptor,所有打开的session会被保存在一个线程变量里。在线程退出前通过OpenSessionInViewFilter或者OpenSessionInViewInterceptor断开这些session。
3. log4j 相关的配置。

2) spring 的配置(必要)
spring配置文件的位置和文件名都可以自己进行配置, 这里配置位于WEB-INF/config 下, 文件名为spring-dispather.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: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-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><context:component-scan base-package="com.oscar999.*"></context:component-scan><mvc:annotation-driven /><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean><context:property-placeholder location="/WEB-INF/config/config.properties" /><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></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.jdbc.batch_size">20</prop><prop key="hibernate.enable_lazy_load_no_trans">true</prop><prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop><prop key="jdbc.use_streams_for_binary">true</prop></props></property><property name="packagesToScan"><list><value>com.oscar999.work.model</value></list></property></bean><bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"lazy-init="true" /><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><tx:annotation-driven transaction-manager="transactionManager"proxy-target-class="true" /></beans>

1.mvc:annotation-driven
要使用spring mvc中的@Controller注解,就必须要配置<mvc:annotation-driven />,否则org.springframework.web.servlet.DispatcherServlet无法找到控制器并把请求分发到控制器。
会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)
当我们需要controller返回一个map的json对象时,可以设定<mvc:annotation-driven />,
同时设定<mvc:message-converters> 标签,设定字符集和json处理类


2.context:component-scan
spring可以自动去扫描base-pack下面或者子包下面的Java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean
注意:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,
用来扫描该包内被@Repository @Service @Controller的注解类,然后注册到工厂中。并且context:component-scan激活@ required。@ resource,@ autowired、@PostConstruct @PreDestroy @PersistenceContext @PersistenceUnit。使得在适用该bean的时候用@Autowired就行了。


3.DefaultAnnotationHandlerMapping  和AnnotationMethodHandlerAdapter. 配合 mvc:annotation-driven使用的
如果你要使用基于注解的 @Controller,最好还是老老实实地注册 DefaultAnnotationHandlerMapping。 
注入了AnnotationMethodHandlerAdapter作用是对有RequestMapping注解的控制器进行HTTP路径、HTTP方法和请求参数解析.DefaultAnnotationHandlerMapping作用是映射处理程序方法级别的HTTP路径.在spring 3.1之后由RequestMappingHandlerAdapter和RequestMappingHandlerMapping代替.


4. InternalResourceViewResolver ,  会在ModelAndView返回加上前后缀
上面的配置表示,将在Controller返回的ModelAndView的基础上,加上目录前缀/, 
  加后文件名称后缀.jsp
5. context:property-placeholder, 可以使用${jdbc.driver} 这样的方式取值
可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息


6. BasicDataSource  , LocalSessionFactoryBean
数据库和Hibernate 的配置
packagesToScan - 会扫描此目录下的Model . 实体类 Class.


7. DefaultLobHandler
 可以操作 lob 和Clob 类型的数据


8.HibernateTransactionManager
事务管理


9. CommonsMultipartResolver  (可选)
文件上传功能的配置。


3) log4j 的配置
log4j 对应日志输入终端和格式, 这个可以根据自行的需要进行设置。
如果只是开发或是练习的话, 可以不做配置。
配置也是基本的Log4j 的格式就可以了, 文件名: log4j.properties , 内容类似如下:


log4j.rootLogger=DEBUG,stdoutlog4j.logger.com.mediatek=DEBUGlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=dashboard.loglog4j.appender.logfile.MaxFileSize=512K# Keep three backup files.log4j.appender.logfile.MaxBackupIndex=3log4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

至此, 环境搭建完成。
实际项目的配置可以根据不同的需要进行更精细的配置。



1 0
原创粉丝点击