Spring和Hibernate的整合:
a.properties文件裝配:<bean id="propertyConfiguer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations"> <list>
<value>classpath:mypack/jdbc.properties</value>
<value>classpath:mypack/hibernate.properties</value></list></property> </bean>
b.數據源的裝配:<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}"></property>
<property name="url" value="${db.url}"></property>
<property name="username" value="${db.user}"></property>
<property name="password" value="${db.password}"></property> </bean>
c. <bean id="sessionFactory" //接管Hibernate的sessionFactory
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean >
<property name="dataSource" ref="dataSource"></property>
<property name="mappingDirectoryLocations"> //加載映射文件
<list> <value>classpath:mypack</value> </list> </property> //采取文件目錄形式
<property name="hibernateProperties"> <props> //加載Hibernate屬性配制
<prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.transaction.factory_class">${hibernate.transaction.factory_class}
</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}
</prop> </props> </property> </bean>
d.將sessionFactory注入手動編寫的DAO: // HibernateDaoSupport需要這個屬性
<bean id="userDao" class="mypack.UserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"></property> </bean>
e.Spring DAO模式:專用APIß-DAO模板(Templete)ß-DAO支持類(Support)ß--手動編寫DAO
f.Model: public class User {private Integer id; private String name;
private Date birthday;...getter/setter; }
g.Dao接口: public interface UserDao {
public void addUser(User user); public void addUsers(List<User> users);
public void updateUser(User user); public void delete(Integer id);
public User getUser(Integer userId); public List getUsers();
public int getUserCounts(); public User getUserById(Integer id); }
h. public class UserDaoHibernate extends HibernateDaoSupport implements UserDao {
//HibernateDaoSupport 中存在getHibernateTemplate方法進行數據庫操作
public void addUser(User user) { getHibernateTemplate().saveOrUpdate(user); }
saveOrUpdate:Spring自動判斷id,存在就update()如游離狀態,不存在就save()比如自由狀態
public void addUsers(List<User> users) { getHibernateTemplate().saveOrUpdateAll(users);}//Spring自動遍歷集合的方法
public void delete(Integer id) {//User user=new User();user.setId(id);
//getHibernateTemplate().delete(user);刪除單條紀錄且不采用預處理方式
String hql="delete from User where id=?"; getHibernateTemplate().bulkUpdate(hql,id);}//進行批處理且采用預處理方式
public User getUser(Integer userId) {
return (User) getHibernateTemplate().load(User.class, userId);
//return (User) getHibernateTemplate().get(User.class, userId); }
Load返回實體代理類類型,此時類裝配必須是lazy=”false”,否則session會關閉
Get返回實體類類型,lazy=”true”默認即可!
public int getUserCounts() { String hql="select count(*) from User";
return (Integer) getHibernateTemplate().find(hql).get(0); }//從集合中得第一條
public List getUsers() {
//String hql="from User"; return getHibernateTemplate().find(hql);
String sql="from User u where u.id=? and u.name=?";
Object[] params={1,"nihao"}; //返回多個屬性得到數組
return getHibernateTemplate().find(sql,params); }
public void updateUser(User user) {
getHibernateTemplate().update(user); }
public User getUserById(Integer id){//預處理得到單條紀錄
String hql="from User u where u.id=?";
return (User) getHibernateTemplate().find(hql,id); } }
i.Hibernate映射文件:<hibernate-mapping package="mypack">
<class name="User" table="t_user" lazy="false">
<id name="id" column="id" type="integer">
<generator class="native"></generator> </id>
<property name="name" column="name" type="string"></property>
<property name="birthday" column="birthday" type="timestamp"></property>
</class> </hibernate-mapping>