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