struts2ioc获取session怎么设置bean
发布网友
发布时间:2022-05-23 13:55
我来回答
共3个回答
热心网友
时间:2023-10-23 20:44
楼主问题的描述有几个问题,第一:struts2没有ioc容器,第二:session是hibernate框架的sessionFactory获取的,sturts2没有session.楼主应该是想在spring整合hibernate怎样获取hibernate的session。
spring整合hibernate获取session的基本步骤:
在spring的配置文件中配置sessionFactory bean。
把sessionFactory bean注入到层中,
在层通过sessionFactory获取session。
写一个helloworld的案例:
1.spring的xml配置文件配置sessionFactorybean
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- hibernate映射文件 -->
<property name="mappingLocations" value="classpath:com/suhayl/ssh/beans/Person.hbm.xml"></property>
<!-- hibernate cfg文件 -->
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean>
2.把sessionFactory注入到,同样在spring配置文件配置注入,我的类就是PersonDaoImpl。
<bean class="com.suhayl.ssh..PersonDaoImpl" id="personDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
3.在中获取session:
先写一个BaseDao。
package com.suhayl.ssh.;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class BaseDao {
private SessionFactory sessionFactory = null;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
}
PersonDaoImpl继承了BaseDao
package com.suhayl.ssh.;
import java.util.List;
import com.suhayl.ssh.beans.Person;
public class PersonDaoImpl extends BaseDao implements PersonDao {
@Override
public void addPerson(Person person) {
getCurrentSession().save(person);
}
@Override
public void deletePerson(int id) {
String hql = "delete from Person person where person.id = :id";
getCurrentSession().createQuery(hql).setParameter("id", id).executeUpdate();
}
@Override
public Person getPerson(int id) {
return (Person) getCurrentSession().get(Person.class, id);
}
@SuppressWarnings("unchecked")
@Override
public List<Person> getListPerson() {
String hql = "from Person";
return getCurrentSession().createQuery(hql).list();
}
@Override
public void editPerson(Person person) {
String hql = "update Person person set person.name = :name , person.age = :age where person.id = :id";
getCurrentSession().createQuery(hql).setString("name", person.getName())
.setInteger("age", person.getAge()).setInteger("id", person.getId()).executeUpdate();
}
@Override
public Person getPersonByName(String name) {
String hql ="from Person person where person.name = :name";
Person person = (Person) getCurrentSession().createQuery(hql).setParameter("name", name).uniqueResult();
return person;
}
}
热心网友
时间:2023-10-23 20:44
session是存在于servlet容器里面的,你集成了httpservlet之后,不管是在jsp页面还是java代码中都可以使用,只需要在方法参数中声明即可.没办法再将其加入spring容器里面,没必要解耦合,因为他们本来就是依赖关系
热心网友
时间:2023-10-23 20:44
spring.xml里的配置:
<bean id="e" class="com.kish.entity.springserviceImpl "></bean>
Spring 获取Bean的代码:
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
springserviceImpl ss=(springserviceImpl)context.getBean("e");
ss.add();