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();
已经可以对数据可进行操作了,不知道不加这一句会不会有什么隐患将来。