Spring+Hibernate

·                                 MyEclipse Spring Hibernate整合开发

MyEclipse Spring Hibernate整合具体步骤:

1、新建一个项目工程名为:HibernateSpringProject

2、添加对Spring的支持MyEclipse-Add Spring Capabilities...

第一步选择需要加载的包,如下图所示:

 

MyEclipse Spring Hibernate整合图1

点击下一步提示是否建立Spring配置文件,选择默认,然后直接点击“finish”

 

3添加Hibernate支持,然后选择MyEclipse-Add Hibernate Capabilities...

第一步选择默认,点击下一步

第二步提示你是用Hibernate的配置文件还是用Spring的配置文件进行SessionFactory的配置,选择使用Spring来对Hibernate进行管理,这样最后生成的工程里就不包含hibernate.cfg.xml了,好处是在一个地方就可以对Hibernate进行管理了。

第三步提示你是创建一个新的hibernate配置文件还是使用已有的配置文件,由于我们刚才已经生成了Spring配置文件,并且要在其中进行hibernate的配置(spring中对Hibernate进行配置),所以选择复选框Existing Spring configuration file,选择该项后,下方的Spring Config后的下拉列表框自动填入了刚才生成的Spring配置文件路径。这时候有个错误,要求你填写SessionFactory ID,这个id就是我们要为hibernate注入的一个类的ID,随便取一个名字,例如“sessionFactory”。点击下一步

第四步要求选择数据库连接信息,这个步骤可以参照网上的信息进行配置,很简单。这里需要注意一点,bean id”处填写一个数据源的名称,例如“datasource,下面的单选按钮选择Use Jdbc Driver就行了,此处没有用jndi。在DB Driver”处选择配置好的数据库连接信息,其他信息自动填入余下的输入框中,点击下一步。

第四步提示是否创建“SessionFactory”,由于本程序用Spring替我们注入sessionfactory,此处可以不用创建,勾掉复选框。然后直接点击“finish”

4、建立三个包,分别是

com.simon.dao,

com.simon.model,

com.simon.service

这写包的定义可以参考我的另一篇文章ssh开发时目录的建议结构

5、打开MyEclipsedatabase exployer perspective,右键选择user表,选择Hibernate reverse engineering

按照下图所示进行设置

 

MyEclipse Spring Hibernate整合图2

点击下一步,在ID generator”中选择native,如果愿意可以直接点击finish

这时再观察applicationContext.xml文件,发现在sessionFactory定义中增加了如下代码:

1.            property name="mappingResources"  

2.             list  

3.              valuecom/simon/model/User.hbm.xml/value  

4.              /list  

5.            /property 

此时在观察类结构:

 

MyEclipse Spring Hibernate整合图3

model包下生成了三个类和一个映射文件。AbstractUserUser的抽象类,在此需要说明一点的是,在标准的Spring应用中UserDAO应该是一个接口,而不是一个具体的类MyEclipse将数据库操作方法直接写到了UserDAO中,另外,按照标准写法,DAO实现类要实现DAO接口并且要包括SessionFactory的变量声明但是生成的代码中UserDAO直接实现了HibernateDaoSupport类,需要特别注意。所以,如果你需要标准写法,可以将UserDAO中的方法提取出来,只保留方法声明,然后再间一个impl目录,将该DAO的实现类放在该impl中,按照管理将该类命名为UserDAOImpl,另外一点最好将DAO和它的实现类移到dao包中,结构和model包中的相同。

在这个例子中暂且将生成的文件都放到model中。

此时我们可以写一个测试程序将一条记录插入到user表中,当然这个测试程序并没有用事务控制,后面我们还会介绍,测试程序如下:

6.            import org.springframework.context.ApplicationContext;  

7.            import org.springframework.context.support.ClassPathXmlApplicationContext;  

8.            import com.simon.model.UserDAO;  

9.            import com.simon.model.User;  

10.        public class TestWithoutTx {  

11.         

12.         /**  

13.          * @param args  

14.          */ 

15.         public static void main(String[] args) {  

16.          // TODO Auto-generated method stub  

17.                User user=new User();  

18.                user.setFirstName("first name");  

19.                user.setLastName("last name");  

20.                user.setUsername("user name");  

21.                user.setPassword("password");  

22.                user.setDateCreated(new Long(111111));  

23.                ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");  

24.                UserDAO userdao=(UserDAO)context.getBean("UserDAO");  

25.                userdao.save(user);   

26.         }  

27.       

现在的问题是增加事务处理功能,跟我继续,这时候源程序不需要修改,只需要修改applicationContext.xml配置文件,首先增加事务管理器,因为事务管理器也需要使用数据库,所以需要引入sessionFactory

如下:

1.            bean id="myTransactionManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager"  
2.            property name="sessionFactory"  
3.            ref bean="sessionFactory" /  
4.            /property  
5.            /bean  

继续增加如下配置信息:

1.            bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
2.              property name="proxyTargetClass"  
3.               valuetrue/value  
4.              /property  
5.              property name="transactionManager"  
6.               ref bean="myTransactionManager" /  
7.              /property  
8.              property name="target"  
9.               ref local="UserDAO" /  
10.          /property  
11.          property name="transactionAttributes"  
12.           props  
13.            !-- 这里的方法签名可以精确到方法先懒惰一下全配置上 --  
14.            prop key="*"PROPAGATION_REQUIRED/prop  
15.           /props  
16.          /property  
17.         /bean 

注意以上红色部分:  注意这个属性,必须为 true, 使用CGLIB时才不用强制编写DAO接口,也就是由于MyEclipse并没有为我们生成DAO接口,而是生成了一个数据库实现类,为了使Spring不强迫我们必须定义一个DAO接口,只需要将这个proxyTargetClass属性定义为true,这点非常重要,程序出错很有可能和这个属性设置错误有关。

下面再写一个测试程序,和上面的测试程序基本相同,唯一不同是将上面的

UserDAO userdao=(UserDAO)context.getBean("userDAO");

换成

UserDAO userdao=(UserDAO)context.getBean("userDAOProxy");

执行,一切ok,数据正确的插入到数据库中。

MyEclipse Spring Hibernate整合开发就向你介绍到这里,那么你是不是对MyEclipse Spring Hibernate整合有了一些了解了呢?

 会遇到下面问题:

class"org.apache.commons.dbcp.BasicDataSource"not found出错的解决办法2009-03-25 16:19方法1:在项目上右击build path—>configure build path..—>add library..—>MyEclipse Libraries选中Spring 2.0 Persistence JDBC libraries,同时可能会用到Spring 2.0 Persistence CORE libraries所以系统自动选上了,点击finish就可以了!!!


方法2:使用MyEclipse整合Struts+Spring+Hibernate时,在“applicationContext.xml”中提示class"org.apache.commons.dbcp.BasicDataSource"not found。
http://commons.apache.org/dbcp/downloads.html下载jar包加入lib即可.

 

推荐自己已经有的包,或者下载(我下载的,然后备用)。
 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值