转:myeclipse hibernate spring整合开发
在网上漫无边际地搜索了一天,绝大部分都是垃圾信息,只好自己做一遍
好了,下面我就将我所完成的例子程序完整的叙述,希望对读者有所帮助。
一、开发环境
myeclipse6.01GA,mysql。
二、表结构
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL auto_increment,
`username` varchar(64) NOT NULL,
`password` varchar(64) NOT NULL,
`first_name` varchar(128) NOT NULL,
`last_name` varchar(128) NOT NULL,
`date_created` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三、具体步骤:
1、在myeclipse中建立一个“java project”,工程名为:HibernateSpringProject,这个程序用java应用程序就可以实现。
2、右键点击工程文件,然后选择MyEclipse->Add Spring Capabilities...
第一步选择需要加载的包,如下图所示:
其余的选项默认,点击 “下一步”,提示是否建立spring配置文件,选择默认,然后直接点击“finish”。
3、右键点击工程文件,然后选择MyEclipse->Add Hibernate Capabilities...
第一步选择默认,点击“下一步”。
第二步提示你是用hibernate的配置文件还是用spring的配置文件进行SessionFactory的配置,选择使用spring来对hibernate进行管理,这样最后生成的工程里就不包含hibernate.cfg.xml了,好处是在一个地方就可以对hibernate进行管理了。
第三步提示你是创建一个新的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、打开myeclipse的database exployer perspective,右键选择user表,选择Hibernate reverse engineering
按照下图所示进行设置
点击下一步,在“ID generator”中选择native,如果愿意可以直接点击finish
这时再观察applicationContext.xml文件,发现在sessionFactory定义中增加了如下代码:
<property name="mappingResources">
<list>
<value>com/simon/model/User.hbm.xml</value>
</list>
</property>
此时在观察类结构:
在model包下生成了三个类和一个映射文件。AbstractUser是User的抽象类,在此需要说明一点的是,在标准的spring应用中UserDAO应该是一个接口,而不是一个具体的类,而myeclipse将数据库操作方法直接写到了UserDAO中,另外,按照标准写法,DAO实现类要实现DAO接口,并且要包括SessionFactory的变量声明,但是生成的代码中UserDAO直接实现了HibernateDaoSupport类,需要特别注意。所以,如果你需要标准写法,可以将UserDAO中的方法提取出来,只保留方法声明,然后再间一个impl目录,将该DAO的实现类放在该impl中,按照管理将该类命名为UserDAOImpl,另外一点最好将DAO和它的实现类移到dao包中,结构和model包中的相同。
在这个例子中暂且将生成的文件都放到model中。
此时我们可以写一个测试程序将一条记录插入到user表中,当然这个测试程序并没有用事务控制,后面我们还会介绍,测试程序如下:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.simon.model.UserDAO;
import com.simon.model.User;
public class TestWithoutTx {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
User user=new User();
user.setFirstName("first name");
user.setLastName("last name");
user.setUsername("user name");
user.setPassword("password");
user.setDateCreated(new Long(111111));
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDAO userdao=(UserDAO)context.getBean("UserDAO");
userdao.save(user);
}
}
现在的问题是增加事务处理功能,跟我继续,这时候源程序不需要修改,只需要修改applicationContext.xml配置文件,首先增加事务管理器,因为事务管理器也需要使用数据库,所以需要引入sessionFactory
如下:
<bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
继续增加如下配置信息:
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="transactionManager">
<ref bean="myTransactionManager" />
</property>
<property name="target">
<ref local="UserDAO" />
</property>
<property name="transactionAttributes">
<props>
<!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
注意以上红色部分: 注意这个属性,必须为 true, 使用CGLIB时才不用强制编写DAO接口,也就是由于myeclipse并没有为我们生成DAO接口,而是生成了一个数据库实现类,为了使spring不强迫我们必须定义一个DAO接口,只需要将这个proxyTargetClass属性定义为true,这点非常重要,程序出错很有可能和这个属性设置错误有关。
下面再写一个测试程序,和上面的测试程序基本相同,唯一不同是将上面的
UserDAO userdao=(UserDAO)context.getBean("userDAO");
换成
UserDAO userdao=(UserDAO)context.getBean("userDAOProxy");
执行,一切ok,数据正确的插入到数据库中。
分享到:
相关推荐
Struts2+Spring+Hibernate整合过程详解 Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。... 本文记录了使用Myeclipse8.5对Struts2、Spring、Hibernate进行整合的详细步骤:
struts2,hibernate,spring整合开发用户注册,用了MyEclipse和mysql
NULL 博文链接:https://yingjunjia.iteye.com/blog/815813
Spring2 Struts2 Hibernate3 MyEclipse 整合开发实例, 请先看该压缩文件内的说明.txt 。
ssh框架整合实例 MyEclipse开发SSH(Struts+Spring+Hibernate)入门
采用struts1,hibernate,spring整合并分页demo,并作事物管理,数据库采用MySQL,数据可用test内方法生成。采用myeclipse6.5开发
struts2和spring和Hibernate的整合包,在MyEclipse中自动导入老是有冲突包。
struts+spring+hibernate的整合JAR包,里面包含了这三个框架需要的所以jar包,还包括会用到的其他jar包像:log4j.jar ...。 若需开发SSH项目,可以遵循以下步骤 1:使用MyEclipse创建Web Project 2:添加struts 右键-...
Struts+Spring+Hibernate整合注册登录 木子提供下载(包括本word文档和源程序) http://usc.googlecode.com/files/SSH.rar 开发环境: 1. MyEclipse Enterprise Workbench 7.0 Milestone-1(MyEclipse 7.0 M1...
使用说明,由于文件比较大,所以采用分卷的形式上传的,要使用必须两部分一起下载才能解压,所以请谅解
本版本全面更新了jar包,全部使用了当前最新版本的jar包,struct2.1.8 spring3 hibernate3.5,全面使用注解取代xm的l配置。 另外增加了一个ant构建脚本,支持使用hudson完成每日构建,持续集成,自动测试,代码规范...
附:源码使用方式,看到有.project的的,可以直接通过import导到myeclipse里面,没有这个文件的,自己先通过new新建一个web_project,然后到你的workspaces里面找到刚才新建的项目,将下载下来的源码中WEB-INF和JSP...
struts+hibernate+spring的整合源码
基于spring mvc、spring、hibernate、bootstrap、maen开发的企业级项目,导入即可运行
spring3.1.1+struts2.1+hibernate4.14 整合 myeclipse2014+sqlserver2014简单的增加demo,整理过的可以运行,加了注释。采用注解模式开发。
本书分为6大部分,共33章,介绍了Struts1框架、Hibernate框架、Spring框架和Struts2框架的开发环境配置、框架技术基础,Struts1框架和Spring框架的整合,Struts1框架和Hibernate框架的整合,Struts1框架、Hibernate...
quartz1.6.5 整合 Hibernate、Spring,本例支持同时运行多个不同的任务,每个任务动态调用的方法和时间都不一样; 附件中有支持各种数据库的脚本;本例支持Oracle10g数据库脚本;开发测试使用的IDE工具MyEclipse6.5;...
详细介绍了用MyEclipse开发java EE的相关技术。主要有Spring与Hibernate整合,以及Spring与Struts2整合,每步操作都详细列出源代码,便于自学Spring,Hibernate与Hibernate(SSH)这3个开源框架
个人以为非常不错,拿出来分享