一、搭建测试项目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中添加代码:

@Override
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。