2008年8月11日 星期一

Spring 整合 Hibernate

classpath所需要的jar
===== postgresql ==========
pg74.216.jdbc3.jar
======= spring ===========
spring.jar
commons-logging.jar
======= hibernate =========
antlr-2.7.6.jar
asm.jar
c3p0-0.9.1.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate3.jar
jta.jar
log4j-1.2.13.jar
=======================

範例資料表DDL
CREATE TABLE tbl_user
(
id serial NOT NULL,
name character varying(20),
age integer,
CONSTRAINT tbl_user_pkey PRIMARY KEY (id)
)

使用HibernateTools產生TblUser.java POJO物件 及 TblUser.hbm.xml mapping file

建立IUserDAO介面
package idv.muchu.test.spring;

public interface IUserDAO {
public void insert(TblUser user);
public void update(TblUser user);
public void delete(TblUser user);
public TblUser find(Integer id);
}

實作IUserDAO介面(使用HibernateTemplate簡化實作)

package idv.muchu.test.spring;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;

public class UserDAO implements IUserDAO {
private HibernateTemplate hibernateTemplate = null;

public void setSessionFactory(SessionFactory sf) {
this.hibernateTemplate = new HibernateTemplate(sf);
}

public void delete(TblUser user) {
hibernateTemplate.delete(user);
}

public TblUser find(Integer id) {
return (TblUser) hibernateTemplate.get(TblUser.class, id);
}

public void insert(TblUser user) {
hibernateTemplate.save(user);
}

public void update(TblUser user) {
hibernateTemplate.update(user);
}
}

spring bean設定檔透過DataSource設定SessionFactory物件並"注入"到UserDAO物件


Demo程式
package idv.muchu.test.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringHibernateDemo {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("dao-config.xml");
IUserDAO userDAO = (IUserDAO)context.getBean("userDAO");
TblUser user = new TblUser();
user.setAge(15);
user.setName("mars");
userDAO.insert(user); //新增
TblUser mark = userDAO.find(1); //查詢
System.out.println("mark's age:" + mark.getAge());
mark.setAge(30);
userDAO.update(mark); //修改
System.out.println("mark's age:" + mark.getAge());
userDAO.delete(mark); //刪除
}
}

沒有留言: