MyEclipse下快速配置Hibernate,Spring
2009-12-12 17:38
477 查看
关键字: myeclipse下配置hibernate+spring
时下流行的开发模式:Spring+Hibernate+Struts,在这里我介绍一下Spring+Hibernate的结合,加入Struts表示层那是非常简单的事情了。话不多说,让我们现在开始:
数据库准备:
数据库名称:AT_SMS
表名称:admin
字段如下:
sid bigint 从1开始自动增加,步长为1,单独做表的主键
name varchar(50)
password varchar(50)
开发软件准备:
Eclipse 3.1
MyEclipse Enterprise Workbench v4.1.1 GA
JDK1.4.2
Spring1.2[MyEclipse自带的]
Hibernate3.0[MyEclipse自带的]
步骤:
1、设定自己的WorkSpace[D:/Eclipse3.1/MyWorkspace];
2、建立普通Java工程[不是MyEclipse Web工程]MyProject[D:/Eclipse3.1/MyWorkspace/MyProject;
2A、配置数据库连接备用。东东在Window->Open Perspective->My Eclipse Database
Explore下。在左边空白框点右键选择New,弹出框后填写Profile name:MyTestDB;驱动点Configure
database driver去配置,其它的看着填,不想看到所以数据库就在第二步选择Display the selected
schemas,点按钮Add时会自动连接数据库显示所有的数据,选择你想看到的,在这我们选择AT_SMS,点finish完成了。
3、添加Spring相关东西[点击菜单MyEclipse->Add SPring
Capabilities...][注意:把光标停在工程根目录才能添加,不然是灰灰的];弹出窗口默认选中Spring1.2
Core包,把Spring1.2 ORM/DAO/Hibernate3选中,把Spring1.2 AOP,Spring1.2
Testing都选中[省得测试时候遇到找不到jar再去导入],next,创建一个src目录存放配置文件,finish。
4、添加Hibernate相关东西,注意根Spring关联起来,数据库连接选择之前创建的MyTestDB即可,Dialect默认是
Sysbase,我用Sql Server,所以要改过来;Hibernate的bean
ID设成跟Spring的一样,结果配置文件提示ID不唯一,哈哈,那就清除Hiebernate相关的东西先,这还有些麻烦,首先要切换到
MyEclipse J2EE
Development[如果没有这个可能是你的工作区没有这种工程,去创建一个MyEclipseJ2EE工程],接着把工程视图从
PackageExplorer切换到Navigator,删除文件名带Hibernate字样的文件,打开.project文件,删除里头关于
Hibernate的一个buildCommand,和一个nature.Ok了,可以重新添加Hibernate相关的东西.[注意:
SessionFactory就是Spring用来关联Hibernate的那Bean的ID我填SessionFactory,填写数据库参数时的那个
BeanID就是数据源名称,我填dataSource]
5、接下来产生Hibernate映射,将视图切换到MyEclipse Database
Explorer,点右键打开连接,选择你要产生Java代码的表,我们在这选择admin,弹出窗口发现会默认带出一些参数,由于这个DB连接不是属于
单个工程的是个全局的东东,默认参数可能不是你想要的,不管那么多你选择Java src
folder到你当前工程的src目录,这就与你的工程关联起来了,参数也跟着变了,Java
package设为com.kama.hibernate,选中产生Spring DAO;其它默认,表的主键产生要设置一些,选中表名,在ID
Generator选择native;就这样了。
6、让Spring管理数据库事务,在配置文件applicationContext.xml中添加内容:
Java代码 <embed width="14" height="15"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowscriptaccess="always"
quality="high"
flashvars="clipboard=%20%20%20%20%3Cbean%20id%3D%22transactionManager%22%20class%3D%22org.springframework.orm.hibernate3.HibernateTransactionManager%22%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22sessionFactory%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cref%20bean%3D%22SessionFactory%22%2F%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%3C%2Fbean%3E%0A%0A%20%3Cbean%20id%3D%22baseTransactionProxy%22%20class%3D%22org.springframework.transaction.interceptor.TransactionInterceptor%22%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22transactionManager%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cref%20bean%3D%22transactionManager%22%2F%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22transactionAttributes%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cprops%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22load*%22%3EPROPAGATION_REQUIRED%2CreadOnly%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22list*%22%3EPROPAGATION_REQUIRED%2CreadOnly%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22find*%22%3EPROPAGATION_REQUIRED%2CreadOnly%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22add*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22create*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22update*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22delete*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22save*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22regedit*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22remove*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22do*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fprops%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%3C%2Fbean%3E%0A%0A%0A%20%20%20%20%3Cbean%20id%3D%22autoProxyCreator%22%0A%20%20%20%20%20%20%20%20%20%20class%3D%22org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator%22%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22interceptorNames%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Clist%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cvalue%3EbaseTransactionProxy%3C%2Fvalue%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Flist%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22beanNames%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cvalue%3E*DAO%3C%2Fvalue%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%3C%2Fbean%3E%20"
src="http://ygxu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf">
<bean id=
"transactionManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<property name="sessionFactory"
>
<ref bean="SessionFactory"
/>
</property>
</bean>
<bean id="baseTransactionProxy"
class
=
"org.springframework.transaction.interceptor.TransactionInterceptor"
>
<property name="transactionManager"
>
<ref bean="transactionManager"
/>
</property>
<property name="transactionAttributes"
>
<props>
<prop key="load*"
>PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*"
>PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*"
>PROPAGATION_REQUIRED,readOnly</prop>
<prop key="add*"
>PROPAGATION_REQUIRED</prop>
<prop key="create*"
>PROPAGATION_REQUIRED</prop>
<prop key="update*"
>PROPAGATION_REQUIRED</prop>
<prop key="delete*"
>PROPAGATION_REQUIRED</prop>
<prop key="save*"
>PROPAGATION_REQUIRED</prop>
<prop key="regedit*"
>PROPAGATION_REQUIRED</prop>
<prop key="remove*"
>PROPAGATION_REQUIRED</prop>
<prop key="do*"
>PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="autoProxyCreator"
class
=
"org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"
>
<property name="interceptorNames"
>
<list>
<value>baseTransactionProxy</value>
</list>
</property>
<property name="beanNames"
>
<value>*DAO</value>
</property>
</bean>
7、事务中,必须是接口调用,具体原因请看其它资料,现在我们增加接口:AdoInterface,在其中定义方法:public void
save(Object transientInstance);[用Object做参数类型是为了让所有DAO类共用这个接口];
8、AdminDAO中增加实现接口AdoInterface,修改其save方法的声明,public void save(Object transientInstance)
9、测试方法一,写如下代码来测试:
Java代码
ApplicationContext ctx =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
AdoInterface dao = (AdoInterface) ctx.getBean("AdminDAO"
);
System.out.println(dao.toString());
Admin admin = new
Admin();
admin.setName("Kama"
);
admin.setPassword("123456"
);
dao.save(admin);
System.out.println("--测试完毕--"
);
看到插入的记录了吧!
10、测试方法二:在工程属性的JAVA Builder
path->Libraries里头设置导入D:/MyEclipse/eclipse/plugins/
com.genuitec.eclipse.springframework_4.1.1/data/1.2/lib/spring-mock.jar
产生测试类继承org.springframework.test.AbstractTransactionalSpringContextTests;修改:
protected String[] getConfigLocations() {
return new String[]
{ "/applicationContext.xml" };
}
增加:
Java代码 <embed width="14" height="15"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowscriptaccess="always"
quality="high"
flashvars="clipboard=%20private%20AdoInterface%20adminDAO%3B%0A%20public%20void%20setAdminDAO(AdoInterface%20adminDAO)%0A%20%7B%0A%20%20this.adminDAO%20%3D%20adminDAO%3B%0A%20%7D%0A%20%0A%20public%20void%20testSave()%0A%20%7B%0A%20%20this.setComplete()%3B%2F%2F%E6%83%B3%E5%B0%86%E6%95%B0%E6%8D%AE%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%E5%B0%B1%E4%BF%9D%E7%95%99%E8%BF%99%E4%B8%AA%EF%BC%8C%E4%B8%8D%E6%83%B3%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E5%8E%BB%E6%8E%89%E8%BF%99%E5%8F%A5Junit%E6%B5%8B%E8%AF%95%E4%BC%9A%E8%87%AA%E5%8A%A8%E5%9B%9E%E6%BB%9A%E3%80%82%0A%20%20Admin%20admin%20%3D%20new%20Admin()%3B%0A%20%20admin.setName(%22KamaSupport%22)%3B%0A%20%20admin.setPassword(%22123456%22)%3B%0A%20%20this.adminDAO.save(admin)%3B%0A%20%7D"
src="http://ygxu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf">
private
AdoInterface adminDAO;
public
void
setAdminDAO(AdoInterface adminDAO)
{
this
.adminDAO = adminDAO;
}
public
void
testSave()
{
this
.setComplete();
//想将数据插入数据库就保留这个,不想插入数据库,去掉这句Junit测试会自动回滚。
Admin admin = new
Admin();
admin.setName("KamaSupport"
);
admin.setPassword("123456"
);
this
.adminDAO.save(admin);
}
以Junit形式运行测试程序。大功告成!
附录A:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://127.0.0.1:3344/AT_SMS;SelectMethod=cursor</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="SessionFactory"/>
</property>
</bean>
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="regedit*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="do*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="autoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>baseTransactionProxy</value>
</list>
</property>
<property name="beanNames">
<value>*DAO</value>
</property>
</bean>
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/kama/hibernate/Admin.hbm.xml</value>
</list>
</property>
</bean>
<bean id="AdminDAO" class="com.kama.hibernate.AdminDAO">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
</beans>
附录B:log4j.properties
log4j.rootLogger=INFO,default
log4j.logger.org=ERROR
log4j.logger.com.comp=ERROR
log4j.logger.net.sf.hibernate=ERROR
log4j.logger.net.sf.hibernate.SQL=ERROR
log4j.logger.net.sf.hibernate.type=ERROR
log4j.logger.net.sf.ehcache=ERROR
log4j.logger.org.springframework=ERROR
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS}:[%p] [%t] %r %l %m%n
log4j.appender.default=org.apache.log4j.RollingFileAppender
log4j.appender.default.Threshold=DEBUG
log4j.appender.default.File=kama.log
log4j.appender.default.Append=true
log4j.appender.default.MaxFileSize=1000KB
log4j.appender.default.MaxBackupIndex=3
log4j.appender.default.layout=org.apache.log4j.PatternLayout
log4j.appender.default.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS}:[%p] [%t] %r %l %m%n
如果在tomcat启动过程中出现异常,请检查添加的时候是否spring和hibernate的包是否冲突了,基本上就是删除lib目录下的asm-2.2.3.jar,这样tomcat启动应该没有什么问题了!
时下流行的开发模式:Spring+Hibernate+Struts,在这里我介绍一下Spring+Hibernate的结合,加入Struts表示层那是非常简单的事情了。话不多说,让我们现在开始:
数据库准备:
数据库名称:AT_SMS
表名称:admin
字段如下:
sid bigint 从1开始自动增加,步长为1,单独做表的主键
name varchar(50)
password varchar(50)
开发软件准备:
Eclipse 3.1
MyEclipse Enterprise Workbench v4.1.1 GA
JDK1.4.2
Spring1.2[MyEclipse自带的]
Hibernate3.0[MyEclipse自带的]
步骤:
1、设定自己的WorkSpace[D:/Eclipse3.1/MyWorkspace];
2、建立普通Java工程[不是MyEclipse Web工程]MyProject[D:/Eclipse3.1/MyWorkspace/MyProject;
2A、配置数据库连接备用。东东在Window->Open Perspective->My Eclipse Database
Explore下。在左边空白框点右键选择New,弹出框后填写Profile name:MyTestDB;驱动点Configure
database driver去配置,其它的看着填,不想看到所以数据库就在第二步选择Display the selected
schemas,点按钮Add时会自动连接数据库显示所有的数据,选择你想看到的,在这我们选择AT_SMS,点finish完成了。
3、添加Spring相关东西[点击菜单MyEclipse->Add SPring
Capabilities...][注意:把光标停在工程根目录才能添加,不然是灰灰的];弹出窗口默认选中Spring1.2
Core包,把Spring1.2 ORM/DAO/Hibernate3选中,把Spring1.2 AOP,Spring1.2
Testing都选中[省得测试时候遇到找不到jar再去导入],next,创建一个src目录存放配置文件,finish。
4、添加Hibernate相关东西,注意根Spring关联起来,数据库连接选择之前创建的MyTestDB即可,Dialect默认是
Sysbase,我用Sql Server,所以要改过来;Hibernate的bean
ID设成跟Spring的一样,结果配置文件提示ID不唯一,哈哈,那就清除Hiebernate相关的东西先,这还有些麻烦,首先要切换到
MyEclipse J2EE
Development[如果没有这个可能是你的工作区没有这种工程,去创建一个MyEclipseJ2EE工程],接着把工程视图从
PackageExplorer切换到Navigator,删除文件名带Hibernate字样的文件,打开.project文件,删除里头关于
Hibernate的一个buildCommand,和一个nature.Ok了,可以重新添加Hibernate相关的东西.[注意:
SessionFactory就是Spring用来关联Hibernate的那Bean的ID我填SessionFactory,填写数据库参数时的那个
BeanID就是数据源名称,我填dataSource]
5、接下来产生Hibernate映射,将视图切换到MyEclipse Database
Explorer,点右键打开连接,选择你要产生Java代码的表,我们在这选择admin,弹出窗口发现会默认带出一些参数,由于这个DB连接不是属于
单个工程的是个全局的东东,默认参数可能不是你想要的,不管那么多你选择Java src
folder到你当前工程的src目录,这就与你的工程关联起来了,参数也跟着变了,Java
package设为com.kama.hibernate,选中产生Spring DAO;其它默认,表的主键产生要设置一些,选中表名,在ID
Generator选择native;就这样了。
6、让Spring管理数据库事务,在配置文件applicationContext.xml中添加内容:
Java代码 <embed width="14" height="15"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowscriptaccess="always"
quality="high"
flashvars="clipboard=%20%20%20%20%3Cbean%20id%3D%22transactionManager%22%20class%3D%22org.springframework.orm.hibernate3.HibernateTransactionManager%22%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22sessionFactory%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cref%20bean%3D%22SessionFactory%22%2F%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%3C%2Fbean%3E%0A%0A%20%3Cbean%20id%3D%22baseTransactionProxy%22%20class%3D%22org.springframework.transaction.interceptor.TransactionInterceptor%22%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22transactionManager%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cref%20bean%3D%22transactionManager%22%2F%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22transactionAttributes%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cprops%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22load*%22%3EPROPAGATION_REQUIRED%2CreadOnly%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22list*%22%3EPROPAGATION_REQUIRED%2CreadOnly%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22find*%22%3EPROPAGATION_REQUIRED%2CreadOnly%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22add*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22create*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22update*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22delete*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22save*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22regedit*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22remove*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cprop%20key%3D%22do*%22%3EPROPAGATION_REQUIRED%3C%2Fprop%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fprops%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%3C%2Fbean%3E%0A%0A%0A%20%20%20%20%3Cbean%20id%3D%22autoProxyCreator%22%0A%20%20%20%20%20%20%20%20%20%20class%3D%22org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator%22%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22interceptorNames%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Clist%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cvalue%3EbaseTransactionProxy%3C%2Fvalue%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Flist%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%20%20%20%20%3Cproperty%20name%3D%22beanNames%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cvalue%3E*DAO%3C%2Fvalue%3E%0A%20%20%20%20%20%20%20%20%3C%2Fproperty%3E%0A%20%20%20%20%3C%2Fbean%3E%20"
src="http://ygxu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf">
<bean id=
"transactionManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<property name="sessionFactory"
>
<ref bean="SessionFactory"
/>
</property>
</bean>
<bean id="baseTransactionProxy"
class
=
"org.springframework.transaction.interceptor.TransactionInterceptor"
>
<property name="transactionManager"
>
<ref bean="transactionManager"
/>
</property>
<property name="transactionAttributes"
>
<props>
<prop key="load*"
>PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*"
>PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*"
>PROPAGATION_REQUIRED,readOnly</prop>
<prop key="add*"
>PROPAGATION_REQUIRED</prop>
<prop key="create*"
>PROPAGATION_REQUIRED</prop>
<prop key="update*"
>PROPAGATION_REQUIRED</prop>
<prop key="delete*"
>PROPAGATION_REQUIRED</prop>
<prop key="save*"
>PROPAGATION_REQUIRED</prop>
<prop key="regedit*"
>PROPAGATION_REQUIRED</prop>
<prop key="remove*"
>PROPAGATION_REQUIRED</prop>
<prop key="do*"
>PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="autoProxyCreator"
class
=
"org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"
>
<property name="interceptorNames"
>
<list>
<value>baseTransactionProxy</value>
</list>
</property>
<property name="beanNames"
>
<value>*DAO</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="SessionFactory"/> </property> </bean> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="transactionAttributes"> <props> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="regedit*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="do*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="interceptorNames"> <list> <value>baseTransactionProxy</value> </list> </property> <property name="beanNames"> <value>*DAO</value> </property> </bean>
7、事务中,必须是接口调用,具体原因请看其它资料,现在我们增加接口:AdoInterface,在其中定义方法:public void
save(Object transientInstance);[用Object做参数类型是为了让所有DAO类共用这个接口];
8、AdminDAO中增加实现接口AdoInterface,修改其save方法的声明,public void save(Object transientInstance)
9、测试方法一,写如下代码来测试:
Java代码
ApplicationContext ctx =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
AdoInterface dao = (AdoInterface) ctx.getBean("AdminDAO"
);
System.out.println(dao.toString());
Admin admin = new
Admin();
admin.setName("Kama"
);
admin.setPassword("123456"
);
dao.save(admin);
System.out.println("--测试完毕--"
);
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml"); AdoInterface dao = (AdoInterface) ctx.getBean("AdminDAO"); System.out.println(dao.toString()); Admin admin = new Admin(); admin.setName("Kama"); admin.setPassword("123456"); dao.save(admin); System.out.println("--测试完毕--");
看到插入的记录了吧!
10、测试方法二:在工程属性的JAVA Builder
path->Libraries里头设置导入D:/MyEclipse/eclipse/plugins/
com.genuitec.eclipse.springframework_4.1.1/data/1.2/lib/spring-mock.jar
产生测试类继承org.springframework.test.AbstractTransactionalSpringContextTests;修改:
protected String[] getConfigLocations() {
return new String[]
{ "/applicationContext.xml" };
}
增加:
Java代码 <embed width="14" height="15"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" allowscriptaccess="always"
quality="high"
flashvars="clipboard=%20private%20AdoInterface%20adminDAO%3B%0A%20public%20void%20setAdminDAO(AdoInterface%20adminDAO)%0A%20%7B%0A%20%20this.adminDAO%20%3D%20adminDAO%3B%0A%20%7D%0A%20%0A%20public%20void%20testSave()%0A%20%7B%0A%20%20this.setComplete()%3B%2F%2F%E6%83%B3%E5%B0%86%E6%95%B0%E6%8D%AE%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%E5%B0%B1%E4%BF%9D%E7%95%99%E8%BF%99%E4%B8%AA%EF%BC%8C%E4%B8%8D%E6%83%B3%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%8C%E5%8E%BB%E6%8E%89%E8%BF%99%E5%8F%A5Junit%E6%B5%8B%E8%AF%95%E4%BC%9A%E8%87%AA%E5%8A%A8%E5%9B%9E%E6%BB%9A%E3%80%82%0A%20%20Admin%20admin%20%3D%20new%20Admin()%3B%0A%20%20admin.setName(%22KamaSupport%22)%3B%0A%20%20admin.setPassword(%22123456%22)%3B%0A%20%20this.adminDAO.save(admin)%3B%0A%20%7D"
src="http://ygxu.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf">
private
AdoInterface adminDAO;
public
void
setAdminDAO(AdoInterface adminDAO)
{
this
.adminDAO = adminDAO;
}
public
void
testSave()
{
this
.setComplete();
//想将数据插入数据库就保留这个,不想插入数据库,去掉这句Junit测试会自动回滚。
Admin admin = new
Admin();
admin.setName("KamaSupport"
);
admin.setPassword("123456"
);
this
.adminDAO.save(admin);
}
private AdoInterface adminDAO; public void setAdminDAO(AdoInterface adminDAO) { this.adminDAO = adminDAO; } public void testSave() { this.setComplete();//想将数据插入数据库就保留这个,不想插入数据库,去掉这句Junit测试会自动回滚。 Admin admin = new Admin(); admin.setName("KamaSupport"); admin.setPassword("123456"); this.adminDAO.save(admin); }
以Junit形式运行测试程序。大功告成!
附录A:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>net.sourceforge.jtds.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:jtds:sqlserver://127.0.0.1:3344/AT_SMS;SelectMethod=cursor</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="SessionFactory"/>
</property>
</bean>
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="create*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="regedit*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="do*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="autoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="interceptorNames">
<list>
<value>baseTransactionProxy</value>
</list>
</property>
<property name="beanNames">
<value>*DAO</value>
</property>
</bean>
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/kama/hibernate/Admin.hbm.xml</value>
</list>
</property>
</bean>
<bean id="AdminDAO" class="com.kama.hibernate.AdminDAO">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
</beans>
附录B:log4j.properties
log4j.rootLogger=INFO,default
log4j.logger.org=ERROR
log4j.logger.com.comp=ERROR
log4j.logger.net.sf.hibernate=ERROR
log4j.logger.net.sf.hibernate.SQL=ERROR
log4j.logger.net.sf.hibernate.type=ERROR
log4j.logger.net.sf.ehcache=ERROR
log4j.logger.org.springframework=ERROR
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS}:[%p] [%t] %r %l %m%n
log4j.appender.default=org.apache.log4j.RollingFileAppender
log4j.appender.default.Threshold=DEBUG
log4j.appender.default.File=kama.log
log4j.appender.default.Append=true
log4j.appender.default.MaxFileSize=1000KB
log4j.appender.default.MaxBackupIndex=3
log4j.appender.default.layout=org.apache.log4j.PatternLayout
log4j.appender.default.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS}:[%p] [%t] %r %l %m%n
如果在tomcat启动过程中出现异常,请检查添加的时候是否spring和hibernate的包是否冲突了,基本上就是删除lib目录下的asm-2.2.3.jar,这样tomcat启动应该没有什么问题了!
相关文章推荐
- MyEclipse Hibernate 快速入门中文版与Hibernate的相关配置属性
- 图解MyEclipse配置struts+hibernate+spring+FreeMarker
- JAVA SSH框架的配置(myeclipse(9)+tomcat(6.0.35)+struts(2.2.3)+Spring(3.0)+Hibernate(3.0))
- Struts 2+Spring 3+Hibernate 3.3 在MyEclipse 10环境下的整合配置
- 图解MyEclipse配置struts+hibernate+spring
- 图解MyEclipse配置struts+hibernate+spring+FreeMarker
- MyEclipse2014快速配置Spring & Spring Testing, Spring AOP简单使用
- 图解MyEclipse配置struts+hibernate+spring
- MyEclipse+Struts+Spring+Hibernate 环境配置
- Myeclipse+struts2.0.11+hibernate+spring配置
- MyEclipse2014快速配置Spring & Spring Testing, Spring AOP简单使用
- MyEclipse配置struts+hibernate+spring
- 图解MyEclipse配置struts+hibernate+spring
- 图解MyEclipse配置struts+hibernate+spring+FreeMarker
- 图解MyEclipse配置struts+hibernate+spring+FreeMarker
- MyEclipse 配置SSH (Struts2.1 Spring3.1 Hibernate4.1)
- 图解MyEclipse配置struts+hibernate+spring
- Struts 2+Spring 3+Hibernate 3.3 在MyEclipse 10环境下的整合配置
- 图解MyEclipse配置struts+hibernate+spring+FreeMarker
- 图解MyEclipse配置struts+hibernate+spring+FreeMarker