.DAOImpl session 得不到的问题

  1. 一。代码分析。
  2. package org.hxwl.tm.DAOImpl;

    import java.util.List;

    import org.hibernate.Query;
    import org.hxwl.tm.IDAO.ITeacherDAO;
    import org.hxwl.tm.vo.Teacher;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    public class TeacherDAOImpl extends HibernateDaoSupport implements ITeacherDAO {

    @Override
    public void delete(String name) throws Exception {
    String hsql
    = "delete from Teacher as t where t.name = ?";
    Query q
    = super.getSession().createQuery(hsql);
    q.setString(
    0, name);
    q.executeUpdate();
    }

    @Override
    public List findAll() throws Exception {
    String hsql
    = "from Teacher";
    Query q
    = super.getSession().createQuery(hsql);
    List list
    = q.list();
    return list;
    }

    @Override
    public Teacher findByName(String name) throws Exception {
    String hsql
    = "from Teacher as t where t.name = ?";
    Query q
    = super.getSession().createQuery(hsql);
    q.setString(
    0, name);
    Teacher teacher
    = (Teacher)q.list().get(0);
    return teacher;
    }

    @Override
    public void save(Teacher teacher) throws Exception {
    System.out.println(
    "测试insert DAOImpl");
    System.out.println(teacher.getName());
    System.out.println(teacher.getBirth());
    super.getSessionFactory().openSession().save(teacher);
    // super.getSession().save(teacher);
    }

    @Override
    public boolean isExists(String name) throws Exception {
    String hsql
    = "from Teacher as t where t.name = ?";
    Query q
    = super.getSession().createQuery(hsql);
    q.setString(
    0, name);
    List list
    = q.list();
    if(list.size()>0)
    return true;
    else
    return false;
    }

    @Override
    public boolean login(Teacher teacher) throws Exception {
    boolean flag = false;
    String hsql
    = "from Teacher as t where t.name=? and t.password=?";
    Query q
    = super.getSession().createQuery(hsql);
    q.setString(
    0, teacher.getName());
    q.setString(
    1, teacher.getPassword());
    List all
    = q.list();
    if (all.size() > 0) {
    flag
    = true;
    }
    return flag;
    }

    @Override
    public void update(Teacher teacher) throws Exception {
    super.getSession().update(teacher);

    }

    }


    @Override
    public void save(Teacher teacher) throws Exception {
    System.out.println(
    "测试insert DAOImpl");
    System.out.println(teacher.getName());
    System.out.println(teacher.getBirth());
    [color
    =#FF0000]super.getSessionFactory().openSession().save(teacher);[/color]
    // super.getSession().save(teacher);
    }


    super.getSessionFactory().openSession().save(teacher);
    这一句是我在后来做的时候改的,原来是:
    super.getSession().save(teacher);
  3. 二、Spring的applicationContext.xml配置:
  4. Java code
  5.    
    <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <? xml version = " 1.0 " encoding = " UTF-8 " ?> <! DOCTYPE beans PUBLIC " -//SPRING//DTD BEAN//EN " " http://www.springframework.org/dtd/spring-beans.dtd " > < beans > < bean id = " dataSourse " class = " org.springframework.jndi.JndiObjectFactoryBean " destroy - method = " close " > < property name = " jndiName " value = " java:comp/env/jdbc/tm " ></ property > </ bean > < bean id = " sessionFactory " class = " org.springframework.orm.hibernate3.LocalSessionFactoryBean " > < property name = " dataSource " > < ref bean = " dataSourse " /> </ property > < property name = " hibernateProperties " > < props > < prop key = " hibernate.dialect " > org.hibernate.dialect.SQLServerDialect </ prop > <!-- 表示允许自动提交 --> < prop key = " hibernate.connection.autocommit " > true </ prop > <!-- 显示sql语句 --> < prop key = " hibernate.show_sql " > false </ prop > </ props > </ property > < property name = " mappingResources " > < list > < value > org / hxwl / tm / vo / Admin.hbm.xml </ value > < value > org / hxwl / tm / vo / Ad.hbm.xml </ value > < value > org / hxwl / tm / vo / Teacher.hbm.xml </ value > < value > org / hxwl / tm / vo / Stipend.hbm.xml </ value > < value > org / hxwl / tm / vo / ResearchCase.hbm.xml </ value > < value > org / hxwl / tm / vo / TeachResearchCase.hbm.xml </ value > < value > org / hxwl / tm / vo / AuditionCase.hbm.xml </ value > < value > org / hxwl / tm / vo / CheckWork.hbm.xml </ value > < value > org / hxwl / tm / vo / EduCase.hbm.xml </ value > < value > org / hxwl / tm / vo / Evection.hbm.xml </ value > < value > org / hxwl / tm / vo / OperationCase.hbm.xml </ value > < value > org / hxwl / tm / vo / RewardsAndPunishment.hbm.xml </ value > < value > org / hxwl / tm / vo / TeacherValueByStudent.hbm.xml </ value > < value > org / hxwl / tm / vo / TrainCase.hbm.xml </ value ></ list > </ property > </ bean > < bean id = " hibernateTemplate " class = " org.springframework.orm.hibernate3.HibernateTemplate " abstract = " false " lazy - init = " default " autowire = " default " dependency - check = " default " > < property name = " sessionFactory " > < ref bean = " sessionFactory " /> </ property > </ bean > <!-- interface --> < bean id = " iAdminDAO " class = " org.hxwl.tm.IDAO.IAdminDAO " abstract = " true " ></ bean > < bean id = " iAdDAO " class = " org.hxwl.tm.IDAO.IAdDAO " abstract = " true " ></ bean > < bean id = " iTeacherDAO " class = " org.hxwl.tm.IDAO.ITeacherDAO " abstract = " true " ></ bean > <!-- daoImpl --> < bean id = " iAdminDAOImpl " class = " org.hxwl.tm.DAOImpl.AdminDAOImpl " parent = " iAdminDAO " > < property name = " hibernateTemplate " > < ref bean = " hibernateTemplate " /> </ property > </ bean > < bean id = " iAdDAOImpl " class = " org.hxwl.tm.DAOImpl.AdDAOImpl " parent = " iAdDAO " > < property name = " hibernateTemplate " > < ref bean = " hibernateTemplate " /> </ property > </ bean > < bean id = " iTeacherDAOImpl " class = " org.hxwl.tm.DAOImpl.TeacherDAOImpl " parent = " iTeacherDAO " > < property name = " hibernateTemplate " > < ref bean = " hibernateTemplate " /> </ property > </ bean > <!-- struts action --> <!-- others --> < bean name = " /index " class = " org.hxwl.tm.struts.action.IndexAction " > < property name = " adDAOImpl " > < ref bean = " iAdDAOImpl " /> </ property > </ bean > <!-- admin --> < bean name = " /adminLogin " class = " org.hxwl.tm.struts.action.AdminAction " > < property name = " admindao " > < ref bean = " iAdminDAOImpl " /> </ property > </ bean > < bean name = " /jsp/admin/admin " class = " org.hxwl.tm.struts.action.AdminAction " > < property name = " admindao " > < ref bean = " iAdminDAOImpl " /> </ property > </ bean > <!-- showAd --> < bean name = " /showAd " class = " org.hxwl.tm.struts.action.ShowAdAction " > < property name = " adDAOImpl " > < ref bean = " iAdDAOImpl " /> </ property > </ bean > <!-- ad --> < bean name = " /jsp/admin/ad " class = " org.hxwl.tm.struts.action.AdAction " > < property name = " adDAOImpl " > < ref bean = " iAdDAOImpl " /> </ property > </ bean > < bean name = " /jsp/admin/listAd_manage " class = " org.hxwl.tm.struts.action.ListAd_manageAction " > < property name = " adDAOImpl " > < ref bean = " iAdDAOImpl " /> </ property > </ bean > < bean name = " /jsp/admin/updateAd " class = " org.hxwl.tm.struts.action.UpdateAdAction " > < property name = " adDAOImpl " > < ref bean = " iAdDAOImpl " /> </ property > </ bean > <!-- teacher --> < bean name = " /jsp/admin/teacher " class = " org.hxwl.tm.struts.action.TeacherAction " > < property name = " teacherDAOImpl " > < ref bean = " iTeacherDAOImpl " /> </ property > </ bean > </ beans >
  6. 三、HibernateDaoSupport来整合ssh,getHibernateTemplate()就相当于hibernate中的session,如果你一定要取到session,应该使用spring提供的HibernateCallback来获得session;
    例如:

    一个简单的分页查询:
  7. Java code
  8.    
    <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> public List findByPage( final String hql, final int offset, final int pageSize){ List list = getHibernateTemplate().executeFind( new HibernateCallback(){ public Object doInHibernate(Session arg0) // 得到回调中的session throws HibernateException, SQLException { // TODO Auto-generated method stub List result = session.createQuery(hql) .setFirstResult(offset) .setMaxResults(pageSize) .list(); return result; } }); return list; } 需要复杂的查询时,使用SqlQuery类时,有时需要当前的session: 这是一个查年统计的查询: public XXXX findByNameAndMonth(String name, Date date) throws DataException { XXXX year = null ; String sql = " select * from t_uday_ " + (date.getMonth() + 1 ) + " where login_name=? and logout_date=? " ; SQLQuery query = null ; try { query = this .getHibernateTemplate() .getSessionFactory() .getCurrentSession() // 取到当前Session .createSQLQuery(sql); query.addEntity(XXXX. class ); query.setString( 0 , name); query.setDate( 1 , date); year = (XXXX) query.uniqueResult(); } catch (HibernateException e) { e.printStackTrace(); throw new DataException(e.getMessage()); } return year; }
<bean id="dataSourse"
class="org.springframework.jndi.JndiObjectFactoryBean"
destroy-method="close">
<property name="jndiName" value="java:comp/env/jdbc/tm"> </property>
</bean>



appication中这么写取不到数据源的楼主,如果你是weblogic的话也得需要一个对象模版才行啊

建议你junit的时候
这么写
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver </value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=bugtrack </value>
</property>
<property name="username">
<value>sa </value>
</property>
<property name="password">
<value>sa </value>
</property>
</bean>
四、环境:weblogic8 ,oracle9i
框架:struts1.2.4 + Spring1.2 + Hibernate2.1,使用weblogic的连接池的DataSourse管理数据库链接。
struts与spring的结合方式采用在struts-config.xml中添加 (有错的)

<beanid="dataSource"class="org.springframework.jndi.JndiObjectFactoryBean"destroy-method="close">

  • <propertyname="jndiName">
  • <value>DS</value>
  • </property>
  • </bean>
  • <beanid="sessionFactory"class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
  • <propertyname="dataSource">
  • <reflocal="dataSource"/>
  • </property>
  • <propertyname="mappingResources">
  • <list>
  • <value>....</value>
  • ......
  • </list>
  • </property>
  • <propertyname="hibernateProperties">
  • <props>
  • <propkey="hibernate.dialect">net.sf.hibernate.dialect.Oracle9Dialect</prop>
  • <propkey="hibernate.show_sql">true</prop>
  • <propkey="hibernate.jdbc.fetch_size">50</prop>
  • <propkey="hibernate.jdbc.batch_size">25</prop>
  • <propkey="hibernate.connection.pool_size">2</prop>
  • </props>
  • </property>
  • </bean>
  • <!--设定Hibernate事务管理类-->
  • <beanid="transactionManager"class="org.springframework.orm.hibernate.HibernateTransactionManager">
  • <propertyname="sessionFactory">
  • <reflocal="sessionFactory"/>
  • </property>
  • </bean>
  • ..........................
  • <beanid="pingFenDAO"class="businessservice.PingFenDAOImp">
  • <propertyname="sessionFactory">
  • <reflocal="sessionFactory"/>
  • </property>
  • </bean>
  • <!--设定业务代理类,将业务处理与事务管理结合-->
  • <beanid="pingFenDAOProxy"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  • <propertyname="transactionManager">
  • <refbean="transactionManager"/>
  • </property>
  • <propertyname="target">
  • <reflocal="pingFenDAO"/>
  • </property>
  • <propertyname="transactionAttributes">
  • <props>
  • <propkey="insert*">PROPAGATION_REQUIRED</prop>
  • <propkey="update*">PROPAGATION_REQUIRED</prop>
  • <propkey="select*">PROPAGATION_REQUIRED,readOnly</prop>
  • <propkey="get*">PROPAGATION_REQUIRED,readOnly</prop>
  • </props>
  • </property>
  • </bean>
  • <!--评分Action的Controller-->
  • <beanname="/PingFenAction"class="action.PingFenAction"singleton="true">
  • <propertyname="pingFenDAO">
  • <refbean="pingFenDAOProxy"/>
  • </property>
  • </bean
  • 你可能感兴趣的:(session)