终于解决了

java web前天是最后一节课了,可是在课程的最后有一个小小的遗憾就是无法对数据库增加数据。今天终于解决了,昨天真是

过程:

ssh框架的使用:

1、在applicationContext.xml中配置数据源:

<?xml version="1.0" encoding="gb2312"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans         
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <!-- 定义数据库数据源 --> 
    <bean id="abcd" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost/test</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value></value>
        </property>
    </bean> 
    <!-- 定义会话工厂 ,并注入数据源实例dataSource --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="abcd"/>
        </property>
        <property name="hibernateProperties">
            <props> 
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">false</prop>
            </props> 
        </property>
        <property name="mappingResources">
            <list>
                <value>my/bean/Product.hbm.xml</value>
            </list>
        </property>
    </bean>    
    <!-- 定义HibernateTemplate模板类,并注入SessionFactory实例 --> 
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <!-- 定义自己的 DAO ,注入 HibernateTemplate实例 -->     
    <bean id="productDao" class="my.dao.ProductDaoImpl">
        <property name="hibernateTemplate">
            <ref bean="hibernateTemplate"/>
        </property>
    </bean>        
    <!-- 定义自己的 Service ,注入 DAO 实例 -->     
    <bean id="productService" class="my.service.ProductServiceImpl">
        <property name="dao">
            <ref bean="productDao"/>
        </property>
    </bean>        
    <!-- 定义自己的 Action ,注入 Service 实例 -->     
    <bean id="page" class="my.page.PageImpl">
        <property name="pageRow">
            <value>3</value>
        </property>
    </bean>            
    <!-- 定义自己的 Action ,注入 Service 实例 -->     
    <bean id="productAction" class="my.action.UpdateAction">
        <property name="service">
            <ref bean="productService"/>
        </property>
        <property name="mpage">
            <ref bean="page"/>
        </property>        
    </bean>        
</beans>

这种方式操作数据库没有发现什么错误,增删改查都没有问题。

2、利用hibernate配置数据源,在applicationContext.xml中引用

<?xml version="1.0" encoding="gb2312"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans         
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <!-- 定义数据库数据源 --> 
    
    <!-- 定义会话工厂 ,并注入数据源实例dataSource --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>      
    </bean>    
    <!-- 定义HibernateTemplate模板类,并注入SessionFactory实例 --> 
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <!-- 定义自己的 DAO ,注入 HibernateTemplate实例 -->     
    <bean id="productDao" class="my.dao.ProductDaoImpl">
        <property name="hibernateTemplate">
            <ref bean="hibernateTemplate"/>
        </property>
    </bean>        
    <!-- 定义自己的 Service ,注入 DAO 实例 -->     
    <bean id="productService" class="my.service.ProductServiceImpl">
        <property name="dao">
            <ref bean="productDao"/>
        </property>
    </bean>        
    <!-- 定义自己的 Action ,注入 Service 实例 -->     
    <bean id="page" class="my.page.PageImpl">
        <property name="pageRow">
            <value>3</value>
        </property>
    </bean>            
    <!-- 定义自己的 Action ,注入 Service 实例 -->     
    <bean id="productAction" class="my.action.UpdateAction">
        <property name="service">
            <ref bean="productService"/>
        </property>
        <property name="mpage">
            <ref bean="page"/>
        </property>        
    </bean>        
</beans>

hibernate.cfg.xml配置:

<?xml version="1.0" encoding="gb2312"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
        <!-- 配置数据库连接 --> 
        <property name="connection.driver_class" >com.mysql.jdbc.Driver</property> 
        <property name="connection.url">jdbc:mysql://localhost/test</property> 
        <property name="connection.username" >root</property> 
        <property name="connection.password" ></property> 
        <property name="connection.autocommit">true </property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
        <!-- 根据映射文件自动创建表(第1次是创建,以后是修改) --> 
        <property name="hbm2ddl.auto">update</property> 
 <!-- 配置映射文件 --> 
        <mapping resource="my/bean/Product.hbm.xml"/>
  
    </session-factory> 
</hibernate-configuration> 

Product.hbm.xml映射文件配置:

<?xml version="1.0" encoding="gb2312"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="my.bean.Product" table="prod" > 
        <id name="id"  unsaved-value="null"> 
            <generator class="identity" /> 
        </id> 
        <property name="name"  type="string" column="productname"/>
        <property name="price" type="float"/> 
        <property name="count" type="int"/>         
    </class> 
</hibernate-mapping> 

两种配置数据源的方式,第一种在使用的时候没有出现任何问题。关键是第二种方式,考虑过很多问题,主键增长方式等,jar包的冲突等,昨天测试了很多种方式,可是对数据可就是无法进行操作,今天总算是解决了,就是add“

<property name="connection.autocommit">true </property>

”但是究其根本的原因我还不是特别理解:

引用别的解释:

数据被缓存了未flush。
save方法后添加getHibernateTemplate().flush();

在hibernate.cfg.xml里面加入 
 <property name="connection.autocommit">true </property>
如果用spring管理Hibernate,则applicationContext.xml中
<property name="hibernateProperties">
<props>
<prop key="connection.autocommit">true</prop> <!-- 添加这个 -->
<props>
</property>

 我只添加了一句,没有在

save方法后添加getHibernateTemplate().flush();

已经可以对数据可进行操作了,不知道不加这一句会不会有什么隐患将来。



原文地址:https://www.cnblogs.com/flashweb/p/3455425.html