您的位置:首页 > 编程语言 > Java开发

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

2016-10-26 15:17 357 查看

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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://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 />

<bean
class="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,stdout
log4j.logger.com.mediatek=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=dashboard.log
log4j.appender.logfile.MaxFileSize=512K

# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
至此, 环境搭建完成。
实际项目的配置可以根据不同的需要进行更精细的配置。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: