`
tomyjohn
  • 浏览: 7728 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

spring整合hibernate二三事

 
阅读更多

在上一节中,我在做spring整合struts时,业务逻辑层只是简单地用一个方法判断固定的用户登录。而这一节,我们添加了DAO层,支持从数据库里取出持久化对象的验证。

主要的做法是:

(1)新建一个持久化对象User.java

package org.lee.managersys.model;

import java.io.Serializable;

public class User implements Serializable{
	private int id;
	private String user;
	private String password;
	
	public User(){}

	public User(int id,String user,String password){
		this.id=id;
		this.user=user;
		this.password=password;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

(2)配置此对象的映射User.hbm.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping 
    PUBLIC "//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.lee.managersys.model">
  <class name="User" table="ms_user">
    <id name="id" type="integer" column="user_id">
       <generator class="identity" />
    </id>
    <property name="user" type="string" length="20" not-null="true"></property>
    <property name="password" type="string" length="32" not-null="true"></property>
  </class>
</hibernate-mapping>


(3)接下来实现此持久化对象的DAO层,我首先新建了一个DAO的接口,然后实现此接口,这样有利于SPRING的藕合。在整合时,一般都对此接口提供以下方法。你也可以在这接口中定义其他的方法。

UserDao.java

package org.lee.managersys.dao;

import org.lee.managersys.model.User;
import java.util.List;

public interface UserDao {
	public User get(int id);
	public void save(User user);
	public void update(User user);
	public void delete(User user);
	public void delete(int id);
	public List<User> findAll();
	public boolean findNameAndPass(String name,String pass);
}

(4)实现UserDao接口,spring对Hibernate的支持主要体现在,它提供了很多*DaoSupport,尤其是HibernateDaoSupport。这个类提供了一个getHibernateTemplate()方法来获取HibernateTemplate对象,以此来实现对持久化对象的操作。

UserDaoHibernate.java

package org.lee.managersys.dao;

import java.util.Iterator;
import java.util.List;

import org.lee.managersys.model.User;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class UserDaoHibernate extends HibernateDaoSupport implements UserDao{

	@Override
	public User get(int id) {
		// TODO Auto-generated method stub
		return (User) getHibernateTemplate().get(User.class, id);
	}

	@Override
	public void save(User user) {
		// TODO Auto-generated method stub
		getHibernateTemplate().save(user);
	}

	@Override
	public void update(User user) {
		// TODO Auto-generated method stub
		getHibernateTemplate().update(user);
	}

	@Override
	public void delete(User user) {
		// TODO Auto-generated method stub
		getHibernateTemplate().delete(user);
	}

	@Override
	public void delete(int id) {
		// TODO Auto-generated method stub
		getHibernateTemplate().delete(get(id));
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<User> findAll() {
		// TODO Auto-generated method stub
		return (List<User>)getHibernateTemplate().find("from User");
	}

	@Override
	public boolean findNameAndPass(String name, String pass) {
		// TODO Auto-generated method stub
		boolean result=false;
		Iterator<User> it=findAll().iterator();
		while(it.hasNext()){
			User user=it.next();
			if(user.getUser().equals(name) && 
			   user.getPassword().equals(pass)){
				result=true;
			}
			else{
				result=false;
			}
		}
		return result;
	}

}

(5)接下来便是对Context进行配置。利用SPRING,我们可以轻松地配置HIBERNATE。只需要三个Bean。

applicationContext.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "//SPRING//DTD BEAN 2.0//EN" 
          "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <!--指定驱动器-->
        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <!--指定URL-->
        <property name="jdbcUrl" value="jdbc:mysql://localhost/normal" />
        <!--指定用户名-->
        <property name="user" value="root" />
        <!--指定密码-->
        <property name="password" value="admin" />
        <!--指定最大连接数-->
        <property name="maxPoolSize" value="40" />
        <!--指定最小连接数-->
        <property name="minPoolSize" value="1" />
        <!--指定初始化连接数-->
        <property name="initialPoolSize" value="1" />
        <!--指定连接池最大空闲时间-->
        <property name="maxIdleTime" value="20" />
    </bean>
    <!--定义hibernate中的sessionFactory-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!--依赖注入,注入上面的dataSource的Bean-->
        <property name="dataSource" ref="dataSource" />
        <!--映射所有的持久化对象-->
        <property name="mappingResources">
            <list>
                <value>org/lee/managersys/model/User.hbm.xml</value>
            </list>
        </property>
        <!--定义hibernate中sessionFactory的属性-->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
            </props>
        </property>
    </bean>
    <!--配置Hibernate局部的事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <!--注册DAO的BEAN-->
    <bean id="userDao" class="org.lee.managersys.dao.UserDaoHibernate">
       <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <!--配置业务逻辑层组件 -->
    <bean id="ms" class="org.lee.managersys.service.MyServiceImpl">
       <property name="userDao" ref="userDao" />
    </bean>
</beans>       


(6)以上是Hibernate的配置,但只有这些还不够,我们还要在业务逻辑组件中配置一个UserDao,以此来实现对持久化对象的访问。

MyServiceImpl.java

package org.lee.managersys.service;

import org.lee.managersys.dao.UserDao;

public class MyServiceImpl implements MyService{
	private UserDao userDao;
	
	public void setUserDao(UserDao userDao){
		this.userDao=userDao;
	}
	@Override
	public boolean valid(String user,String password){
		if(userDao.findNameAndPass(user, password)){
			return true;
		}
		else{
			return false;
		}
	}
}


至此,我便完成了一个简单的J2EE的WEB应用,但是这样还不够,因为缺少事务管理。缺少事务机制的WEB应用缺点是很难想象的。下一节,我将继续对SPRING的事务机制进行学习。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics