JSF,Hibernate,Spring的整合与杂谈

一》最近在研究Spring,对于AOP,IoC有了一点认识。首先我发一个整合的代码

1,使用的IDE是netbeans,个人觉得什么工具都一样。

2,代码结构视图

     

3,各个类的代码,先从Dao说起,IUserDao跟UserDaoImpl这个不用说,是持久层的代码。用spring来管理hibernate。首先要继承HibernateDaoSupport。然后我们就可以利用getHibernateTemplate()方法了。

IUserDao.java

package com.fly.user.dao;

/**
 *
 * @author fly.zhou
 */
public interface IUserDao {
    //增加对应实体的一条记录  
    public boolean add(Object o);

    //更新对应实体的一条记录
    public boolean update(Object o);

    //增加或者更新对应实体的一条记录
    public boolean addOrUpdate(Object o);

    //删除对应实体的一条记录
    public boolean delete(Object o);
}
UserDaoImpl.java

package com.fly.user.dao.daoimpl;

import com.fly.user.dao.IUserDao;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 *
 * @author Administrator
 */
public class UserDaoImpl extends HibernateDaoSupport implements IUserDao {

    @Override
    public boolean add(Object o) {
        getHibernateTemplate().save(o);
        return true;
    }

    @Override
    public boolean update(Object o) {
        getHibernateTemplate().update(o);
        return true;
    }

    @Override
    public boolean addOrUpdate(Object o) {
        getHibernateTemplate().saveOrUpdate(o);
        return true;
    }

    @Override
    public boolean delete(Object o) {
        getHibernateTemplate().delete(o);
        return true;
    }
}

4,有了持久层的支持,业务逻辑层有可以实现了。首先要定义接口IUserService,有些人很可能不明白为什么要定义IUserDao跟IUserService,其实这就是Spring注入思想的一个体现。
IUserService.java

package com.fly.user.service;

import com.fly.user.entity.User;
import java.util.List;

/**
 *
 * @author Administrator
 */
public interface IUserService {

    public boolean addUser(User user);

    public boolean updateUser(User user);

    public boolean deleteUser(User user);

    public User loginCheck(String name, String passwd);

    public boolean loginOut();

    public List<User> showUsers();

    public boolean ifUserNameHave(Object pValue);
}

UserServiceImpl.java

package com.fly.user.serviceimpl;

import com.fly.user.dao.IUserDao;
import com.fly.user.entity.User;
import com.fly.user.service.IUserService;
import java.util.List;

/**
 *
 * @author Administrator
 */
public class UserServiceImpl implements IUserService {

    private IUserDao userDao;//这个地方不能用new方法,不然就失去使用spring的意义了,而且会出现异常;然后必须生成set方法,对应的就是spring的set注入方式了。

    public IUserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public boolean addUser(User user) {
        return userDao.add(user);
    }

    @Override
    public boolean updateUser(User user) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean deleteUser(User user) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public User loginCheck(String name, String passwd) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean loginOut() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<User> showUsers() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean ifUserNameHave(Object pValue) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
5,业务逻辑实现了,对于Beans就好说了UserLoginBean

public class UserLoginBean {

    private IUserService userService;
    //这个地方不能用new方法,不然就失去使用spring的意义了,而且会出现异常;然后必须生成set方法,对应的就是spring的set注入方式了。
    private String name;
    private String passwd;

    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }

    /**
     * Creates a new instance of UserLoginBean
     */
    public UserLoginBean() {
    }

    public void addAction() {
        User user = new User(name, passwd, "", 1);
        userService.addUser(user);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }
}
6,然后就是spring注入了,当然是配置了applicationContext.xml
<!-- 配置 dataSource 使用Hibernate2的话要修改下面的第一行 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver<alue>
        </property>
        <property name="url">
            <value>jdbc:mysql://localhost:3306/nrfmwebdb<alue>
        </property>
        <property name="username">
            <value>root<alue>
        </property>
        <property name="password">
            <value>root<alue>
        </property>
    </bean>

	<!-- 配置sessionFactory, 注意这里引入的包的不同  -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
        <property name="mappingResources">
            <list>
                <value>User.hbm.xml<alue>
            <st>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>
    <bean id="userDao" class="com.fly.user.dao.daoimpl.UserDaoImpl">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>
    <bean id="userService" class="com.fly.user.serviceimpl.UserServiceImpl">
        <property name="userDao">
            <ref bean="userDao" />
        </property>
    </bean>

除了这个还有faces-config.xml

    <managed-bean>
        <managed-bean-name>userManage</managed-bean-name>
        <managed-bean-class>com.fly.user.beans.UserManageBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>userLogin</managed-bean-name>
        <managed-bean-class>com.fly.user.beans.UserLoginBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>userService</property-name>
            <value>#{userService}</value>
        </managed-property>
    </managed-bean>
<application><variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver></application>
需要加上下面这段配置让Spring的变量解析器来替换JSF的变量解析器,那么就可以在spring来管理managedbean,而faces-config.xml中就不需要来配置managedbean信息。配置如下:

<bean id="managebean" name="userLogin" scope="session" class="com.fly.user.beans.UserLoginBean">
     <property name="userService" ref="userService"/><!--仔细观察,会发现跟faces-config.xml中的配置差不多一模一样,很简单吧-->
</bean>
6,最后就是jsf页面了,这里略。
三》最后来谈下spring,jsf,hibernate整合的要点
1,用到spring mvc,那么就必须理解注入,spring三种注入方式,单最常用的还是set。
2,既然用到注入就不能使用new,使用new就不能注入,因为这本身就是矛盾的。
3,使用getHibernateTemplate()的XXXDaoImpl类必须继承HibernateDaoSupport。
4,一般情况我们比如在业务实现XXXServiceImpl中生命持久层IXXXDao的接口,然后插入set方式,同时配置spring配置文件,一般是两个bean,一个是spring管理业务bean,一个是spring管理实体bean。如果XXXServiceImpl中调用了几个持久层的接口,那就需要配置几个bean来管理。如果你想把managedbean也交给spring,那就最低三个配置文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值