Spring+hibernate整合配置
1.创建数据库连接
Hibernate搭建及使用
2.新建Web工程,并配置Spring
1)切换Perspective至MyEclipse Java Enterprise,新建Web工程SHStudyByXML
2)右键点击该工程,在对话框中选择“MyEclipse->AddSpring Capabilities...”,添加Spring,并进行相关配置,如图1和图2所示,采用默认配置即可。
图 1
图2
3.配置Hibernate
1)右键点击该工程,在对话框中选择“MyEclipse->Add HibernateCapabilities...”,添加Hibernate,并进行相关配置,如图1、图2、图3、图4、图5所示。
图 1
选择Spring的配置文件applicationContext.xml进行配置。
图 2
选择已有的Spring配置文件,并使用Spring配置Hibernate中的SessionFactory,SessionFactory的bean id为sessionFactory。
图 3
配置数据源DataSource的bean id为dataSource,且其配置信息采用数据库连接xlink。
图 4
不另写SessionFactory类,而采用Spring为Hibernate已设计的SessionFactory类。
图 5
4.数据库逆向工程
参考SVN中:https://193.158.174.37/svn/BRCB/trunk/北农商项目组/8.培训材料/朝阳/【第9次】Hibernate搭建及使用(张佳伟-20170830)/Hibernate入门搭建.docx
5.分析和测试
按上述步骤配置后就可以在工程中实现Spring和Hibernate的整合,以及CardInfo表的关系对象映射,工程目录如图6所示,其中src目录下的applicationContext.xml是Spring和Hibernate的核心配置文件,pojo包中的三个文件是与user表对应的数据对象类CardInfo.java、数据访问对象类CardInfoDAO.java、关系对象映射文件CardInfo.hbm.xml。
图 6
applicationContext.xml内容如下所示:
1. <?xml version="1.0" encoding="UTF-8"?>
2. <beans
3. xmlns="http://www.springframework.org/schema/beans"
4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5. xmlns:p="http://www.springframework.org/schema/p"
6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
7.
8.
9. <bean id="dataSource"
10. class="org.apache.commons.dbcp.BasicDataSource">
11. <property name="driverClassName"
12. value="com.mysql.jdbc.Driver">
13. </property>
14. <property name="url" value="jdbc:mysql://localhost:3306/web"></property>
15. <property name="username" value="root"></property>
16. <property name="password" value="root"></property>
17. </bean>
18. <bean id="sessionFactory"
19. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
20. <property name="dataSource">
21. <ref bean="dataSource" />
22. </property>
23. <property name="hibernateProperties">
24. <props>
25. <prop key="hibernate.dialect">
26.
27. </prop>
28. </props>
29. </property>
30. <property name="mappingResources">
31. <list>
32. <value>pojo/User.hbm.xml</value></list>
33. </property></bean>
34. <bean id="CardInfoDAO" class="com.lss.entity.CardInfoDAO">
35. <property name="sessionFactory">
36. <ref bean="sessionFactory" />
37. </property>
38. </bean>
39.</beans>
其中,bean dataSource实现数据库连接配置,bean sessionFactory实现Hibernate的SessionFactory,并使用bean dataSource的连接配置,bean CardInfoDAO实现CardInfo数据对象访问,并使用bean sessionFactory创建会话。
CardInfoDAO.java代码部分如下所示:
1. public class CardInfoDAO extends HibernateDaoSupport {
2. private static final Log log = LogFactory.getLog(UserDAO.class);
3.
4. protected void initDao() {
5. // do nothing
6.
7.
8.
9. }
该类继承了Spring的HibernateDaoSupport类,调用对象实例本身的getHibernateTemplate获取HibernateTemplate对象,进而调用其save、delete等方法实现数据的增加、删改等操作。
CardInfo.hbm.xml内容如下所示:
1. <?xml version="1.0" encoding="utf-8"?>
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
4. <!--
5. Mapping file autogenerated by MyEclipse Persistence Tools
6. -->
7. <hibernate-mapping>
<classname="com.lss.entity.CardInfo"table="CARD_INFO"schema="XLINK">
<idname="cardbin"type="java.lang.String">
<columnname="CARDBIN"length="10"/>
<generatorclass="assigned"/>
</id>
<propertyname="bnkcode"type="java.lang.String">
<columnname="BNKCODE"length="10"/>
</property>
<propertyname="cardflag"type="java.math.BigDecimal">
<columnname="CARDFLAG"precision="22"scale="0"/>
</property>
<propertyname="icflag"type="java.math.BigDecimal">
<columnname="ICFLAG"precision="22"scale="0"/>
</property>
<propertyname="cardbinstatus"type="java.math.BigDecimal">
<columnname="CARDBINSTATUS"precision="22"scale="0"/>
</property>
<propertyname="updateTimestamp"type="java.lang.String">
<columnname="UPDATE_TIMESTAMP"length="14"/>
</property>
<propertyname="updateUser"type="java.lang.String">
<columnname="UPDATE_USER"length="50"/>
</property>
8. </class>
9. </hibernate-mapping>
其中定义了Card_Info表和CardInfo类的关系对象映射。
在CardInfoDAO中编写一个主函数实现向CardInfo表中写入数据,如下所示:
public static void main(String[]args) {
//从src/applicationContext.xml装载BeanFactory
FileSystemResourceres =new FileSystemResource("src/applicationContext.xml");
BeanFactory factory = newXmlBeanFactory(res);
//从BeanFactory获取CardInfoDAO
"CardInfoDAO");
List<CardInfo> list=cardInfoDAO.findAll();
System.out.println(list.get(0).getCardbin());
}
执行后,查看card_Info表,在console显示622142,说明配置成功。
Spring+hibernate整合开发
1. 添加login.jsp页面,里面主要的内容是:
<formaction="login.do?action=login"method="post">
<inputtype="submit"value="提交"/>
</form>
2.将application.xml文件放到WEB-INF下,在WEB-INF路径下添加spring-servlet.xml文件,里面内容如下:
<!--1. 选择跳转到哪个bean -->
<beanid="simpleUrlMapping"class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<propertyname="mappings">
<props>
<propkey="*/login.do">loginAction</prop>
</props>
</property>
</bean>
<!--2. 根据bean的id来映射到具体的类 -->
<beanid="loginAction"class="com.lss.controller.Login">
<propertyname="methodNameResolver">
<reflocal="methodNameResolver"/>
</property>
<!—Login类中引用了service层的类对象,,ocs代表接口对象,operateCardInfoService代表实现类bean的id -->
<propertyname="ocs"ref="operateCardInfoService"/>
</bean>
<!--3. action=方法名用来指定具体类中的方法 -->
<beanid="methodNameResolver"class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<propertyname="paramName">
<value>action</value>
</property>
</bean>
<!—service层的实现类对象引用了dao层的接口对象,,ocd代表接口对象,operateCardInfoDao代表实现类bean的id -->
<beanid="operateCardInfoService"class="com.lss.service.impl.OperateCardInfoServiceImpl">
<propertyname="ocd"ref="operateCardInfoDao"/>
</bean>
3.web.xml文件中配置如下:
<servlet>
<servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml,/WEB-INF/applicationCont ext.xml</param-value>
</init-param>
<!-- 代表优先级 数值越小优先级越大,数值相同时tomcat自己选择加载顺序-->
</servlet>
<!—限制了url中只有.do结尾的才可以进行跳转-->
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
4.controller层,必须继承MultiActionController类
public voidlogin(HttpServletRequest request,HttpServletResponse response){
System.out.println(“success”);
}
6.tomcat部署
找到tomcat所在目录,如D:\TOMCAT\apache-tomcat-6.0.38\conf\Catalina\localhost在brcb.xml中添加:
<?xmlversion='1.0' encoding='utf-8'?>
<ContextdocBase="E:\Workspaces\SHTest\WebRoot\"reloadable="true">
</Context>
6.运行tomcat
点击确认,在console中打印success