SpringMVC+Hibernate的一些配置
近期项目又用到了Spring MVC+Hibernate的框架结构和全Annotation(注解)的配置,自然是再熟悉不过的了,从Trilogy的达西那儿实习开始,到学院的J2EE、软件工程的大程,一路相同的架构配置,轻车熟路,不过这次可谓变化不小,配置项因此有不小的改变,也学到一些东西。
Spring MVC的XML
Spring MVC的<servlet-name>-servlet.xml(以下用spring-servlet.xml表示)和普通Spring结构的applicationContext.xml,两者有比较微妙的关系。
Spring MVC项目中,web.xml的servle项按如下配置好,Spring会自动加载applicationContext.xml之后再加载spring-servlet.xml(推测原因,因为后者能引用前者的bean,反之则不行),其中关于Controller的
<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <!-- 这里如果填了下面的项,会导致仅加载applicationContext.xml而不加载spring-servlet.xml 这样就只能在applicationContext.xml里手动去加载其他xml,<import resource="spring-servlet.xml"/> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </init-param> --> </servlet> |
Spring MVC的模板层配置
先说Spring MVC的模板层,一直以来习惯使用Freemarker,这就需要配置Freemarker的bean和Spring连接Freemarker的ViewResolver,FreeMarkerViewResolver。一般方法就是在spring-servlet.xml中,将这几个bean的信息注入。如下所示:
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/views/" /> <property name="freemarkerSettings"> <props> <prop key="defaultEncoding">UTF-8</prop> <prop key="datetime_format">yyyy-MM-dd</prop> <prop key="number_format">0.######</prop> </props> </property> <property name="freemarkerVariables"> <map><entry key="xml_escape" value-ref="fmXmlEscape" /></map> </property> <property name="defaultEncoding" value="UTF-8" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="prefix" value="" /> <property name="suffix" value=".ftl" /> <property name="exposeSpringMacroHelpers" value="true" /> <property name="contentType" value="text/html;charset=UTF-8" /> </bean> |
这次项目比较正规,我负责后端Java开发,前端页面另有人负责,而且前端程序员希望用JSP页面来完成,于是正好换一个新的模板引擎试试。其实自己一直很想用JSP的,这样又可以省去Freemarker这一第三方类库,少一点总是好的。换成JSP,当然就要换成JSP的ViewResolver,叫InternalResourceViewResolver,而JSP因为是J2EE集成的模板,所以不需要像Freemarker还要配置,的确是方便了!bean如下:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/views/" /> <property name="suffix" value=".jsp" /> </bean> |
Hibernate Annotation的外键配置
前几个项目中虽然一直都有用@ManyToOne、@OneToOne和@JoinColumn这种Annotation来配置对应关系,但一直都是代码逻辑来控制的,并没有将外键实施于数据库中。说了这次项目比较正规嘛,要求数据库中也是有外键约束的,于是又要重新动动脑筋。说来也奇怪的,搞了好久的Annotation,也百度了好久才找到:MySQL中MyISAM类型的数据表是不支持外键的,InnoDB类型才支持!说来关于MySQL的数据表类型是MyISAM还是InnoDB曾经也遇到过类似问题,不过是不是外键就不记得了。
找到了问题所在,剩下的就是如何将Hibernate的自动建表机制(hibernate.hbm2ddl.auto)将数据表建为InnoDB了。居然没想到百度还搜不到,最后在Google的英文页面中找到了配置方法:
hibernate.dialect = org.hibernate.dialect.MySQLDialect => MyISAM表 hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect => InnoDB表 |
深爱的Spring
说起著名的SSH框架,Spring是我第二个学的,初学的时候感觉非常难,《Pro Spring》中的反转控制和依赖注入实在是太抽象的概念。幸运的是,通过实习项目中的coding,立马就深深地理解了Spring的各种编程理念和思维方式。从而也接触了Spring MVC,接触了全Annotation的配置,立马就让我放弃了Structs。至于Hibernate,其实也不是很喜欢,又复杂又臃肿,不如JDBC来的简洁方便!所以,当“SSH你最喜欢哪个框架”这种问题摆在我面前,毫无疑问的!难道不觉得Spring的名字也是最美的么?
不知为何我对这些xml的配置及其反感…老是会忘了该怎么配~ssh里的spring和hibernate都不怎么熟,实在是太土了…不过struts也不怎么喜欢,myBatis轻量一些还是没那种很顺手的感觉…
XML的确很繁琐啊,所以我喜欢Annocation。我从来不记的,每次都抄以前写过的…
最近学的是PHP,感觉好熟悉
学PHP没有前途啊,自己玩玩挺好的,公司里不实用
好复杂啊,最近看到这些代码就眼花啊啊。。。