您的位置:首页 > 编程语言 > Java开发

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>

<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启动应该没有什么问题了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: