读书人

hibernate和ibatis在spring上的集成

发布时间: 2012-10-26 10:30:59 作者: rapoo

hibernate和ibatis在spring下的集成
hibernate和ibatis在spring下的集成

可能最熟悉的还是ibatis,毕竟在TAOBAO用了那么多年了。不过hibernate也真是单表操作最好的选择,
特别是接到一些小项目的时候,介绍介绍公司,介绍介绍产品,大部分都是单表,还是用hibernate更
方便多了。
也不知道这样配置对不对,我配置一个hibernate和ibatis一起用的东东,以后在对付小项目的时候,
create,update,insert,get等等用hibernate,在用到复杂查询的时候,我还是可以用ibatis了。
配置纪录如下:
DAO的interface,UserDao.java:
package com.sillycat.core.dao;

import java.util.List;

import com.sillycat.core.model.User;
import com.sillycat.plugin.commons.exceptions.DaoException;

public interface UserDao {
public List getAll() throws DaoException;

public User get(Integer id) throws DaoException;

public void save(User o) throws DaoException;

public void delete(Integer id) throws DaoException;
}

hibernate的实现类,UserDaoHibernateImpl.java:
package com.sillycat.core.dao.hibernate;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.sillycat.core.dao.UserDao;
import com.sillycat.core.model.User;
import com.sillycat.plugin.commons.exceptions.DaoException;

public class UserDaoHibernateImpl extends HibernateDaoSupport implements
UserDao {
public List getAll() throws DaoException {
List list = null;
try {
list = getHibernateTemplate().loadAll(User.class);
} catch (Exception e) {
throw new DaoException(e);
}
return list;
}

public User get(Integer id) throws DaoException {
if (id == null || id.intValue() == 0) {
throw new DaoException("id can't be null when get model!");
}
User user = null;
try {
user = (User) getHibernateTemplate().get(User.class, id);
} catch (Exception e) {
throw new DaoException(e);
}
return user;
}

public void save(User o) throws DaoException {
if (o == null) {
throw new DaoException("model can't be null when save!");
}
try {
getHibernateTemplate().saveOrUpdate(o);
} catch (Exception e) {
throw new DaoException(e);
}
}

public void delete(Integer id) throws DaoException {
if (id == 0 || id.intValue() == 0) {
throw new DaoException("id can't be null when delete model!");
}
User user = null;
try {
user = (User) getHibernateTemplate().get(User.class, id);
if (user != null) {
getHibernateTemplate().delete(user);
}
} catch (Exception e) {
throw new DaoException(e);
}
}

}


ibatis的实现类UserDaoIbatisImpl.java:
package com.sillycat.core.dao.ibatis;

import java.util.List;

import com.sillycat.core.dao.UserDao;
import com.sillycat.core.model.User;
import com.sillycat.plugin.commons.base.BaseSqlMapClientDaoSupport;

public class UserDaoIbatisImpl extends BaseSqlMapClientDaoSupport implements
UserDao {

private static final String LOAD_ALL_USERS = "getUsers";

public List getAll() {
List list = getSqlMapClientTemplate()
.queryForList(LOAD_ALL_USERS, null);
return list;
}

public User get(Integer id) {
return null;
}

public void save(User o) {

}

public void delete(Integer id) {

}

}

配置的单一data resource,applicationContext-datasource.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<bean id="dataSource"
value="com.p6spy.engine.spy.P6SpyDriver" />
<property name="url"
value="jdbc:hsqldb:hsql://localhost:9002/sillycat" />
<property name="username" value="sillycat" />
<property name="password" value="kaishi" />
</bean>
</beans>

hibernate的配置文件,applicationContext-hibernate.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">

<bean id="sessionFactory" value="true"></property>
</bean>

<bean id="hibernateTemplate" />
</beans>

ibatis的配置文件,applicationContext-ibatis.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- ======================================================================== -->
<!-- iBatis SQL map定义。 -->
<!-- ======================================================================== -->
<bean id="sqlMapClient" value="true"></property>
</bean>
</beans>

在DAO层配置两个BEAN,applicationContext-core-dao.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName" default-lazy-init="true">
<bean id="userHibernateDao"
/>

<bean id="userIbatisDao"
/>
</beans>

在业务层,UserManagerImpl.java里面,想用哪个用哪个咯:
package com.sillycat.core.service.impl;

import java.util.List;

import com.sillycat.core.dao.UserDao;
import com.sillycat.core.model.User;
import com.sillycat.core.service.UserManager;
import com.sillycat.plugin.commons.base.BaseService;
import com.sillycat.plugin.commons.exceptions.DaoException;
import com.sillycat.plugin.commons.exceptions.ManagerException;

public class UserManagerImpl extends BaseService implements UserManager {

private UserDao userHibernateDao;

private UserDao userIbatisDao;

public List getAllUser() {
List list = null;
try {
list = userIbatisDao.getAll();
} catch (DaoException e) {
throw new ManagerException("DaoException:", e);
}
return list;
}

public User getUser(Integer id) {
if (id == null || id.intValue() == 0) {
throw new ManagerException("id can't be null when get model!");
}
User user = null;
try {
user = userHibernateDao.get(id);
} catch (DaoException e) {
throw new ManagerException("DaoException:", e);
}
return user;
}

public void saveUser(User user) {
if (user == null) {
throw new ManagerException("model can't be null when save!");
}
try {
userHibernateDao.save(user);
} catch (DaoException e) {
throw new ManagerException("DaoException:", e);
}
}

public void removeUser(Integer id) {
if (id == null || id.intValue() == 0) {
throw new ManagerException("id can't be null when delete model!");
}
try {
userHibernateDao.delete(id);
} catch (DaoException e) {
throw new ManagerException("DaoException:", e);
}
}

public void setUserHibernateDao(UserDao userHibernateDao) {
this.userHibernateDao = userHibernateDao;
}

public void setUserIbatisDao(UserDao userIbatisDao) {
this.userIbatisDao = userIbatisDao;
}

}

读书人网 >软件架构设计

热点推荐