• 终于解决了


    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();

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



  • 相关阅读:
    pycharm2018.1下载激活(mac平台)
    python 保存登录状态 cookie
    utf-8和utf-8-sig的区别
    AcWing 803. 区间合并
    AcWing 801. 二进制中1的个数
    AcWing 800. 数组元素的目标和
    AcWing 799. 最长连续不重复子序列
    AcWing 795. 前缀和
    AcWing 791. 高精度加法 解题记录
    九州缥缈录 合集序言
  • 原文地址:https://www.cnblogs.com/flashweb/p/3455425.html
Copyright © 2020-2023  润新知