一、搭建测试项目myproject,添加Hibernate4.1、Struts2支持;
二、在MySql数据新建数据库及表:myDB、user表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(32) DEFAULT NULL,
`password` varchar(32) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`pohone_number` varchar(20) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
新增两条测试数据。
三、打开DB Browser视图,在user表上右键选择Hibernate Reverse Engineering,钩选:
Create POJO<>DB Table mapping information
Java Data Object(POJO<>DB Table)
Java Data Access Object(DAO)(Hibernate 3 and above),选择Base class:<Default Base DAO>(recommended)
,点击Next、Next、Finish;
生成相应代码User.java、User.hbm.xml、BaseHibernateDAO.java、IBaseHibernateDAO.java、UserDAO.java。
四、调用:
采用上章方式,建立Struts框架,在LoginAction.java中添加代码:
public String execute() throws Exception {
// TODO Auto-generated method stub
UserDAO test= new UserDAO();
com.cn.whirlpool.rbac.User model=test.findById(1);
System.out.println(model.getUserName());
return SUCCESS;
}
在控制台会输出用户名。
虽然只实现了查询功能,但增删改底层DAO生成以后,调用方式都不复杂,暂且不测试了。
下一步搭建Spring环境测试Spring代码。
五、一些问题处理
1.Hibernate里 getSession().save(0) 与 getHibernateTemplate().save(o)
public void save(KmTypes transientInstance) {
log.debug("saving KmTypes instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
单独的getSession.save()调用的是Hibernate事务,在save后要调用:
session.flush()或transaction.commit()。
如果需要getSession().save()可以直接保存进数据库,则要在applicationContext.xml把service和dao关联起来。
getHibernateTemplate().save()是Spring的方法支持声明式事务管理。如果配置了事务,它会自动调用事务并在操作完毕后自动关闭session。