SSH-CRUD-查询

来源:互联网 发布:青云云计算 编辑:程序博客网 时间:2024/04/30 18:26

1). 获取所有的员工信息: 若在 Dao 中只查询 Employee 的信息, 而且 Employee 和 Department 还是使用的懒加载. 页面上还需要显示员工信息, 此时会出现懒加载异常, 代理对象不能被初始化: 2.org.hibernate.LazyInitializationException: could not initialize proxy - no Session
解决:
①. 打开懒加载: 不推荐使用
②. 获取 Employee 时使用 迫切左外连接同时初始化其关联的 Department 对象.
③. 使用 OpenSessionInViewFilter: 后面再提.

BaseDao.java:

public class BaseDao {    private SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {        this.sessionFactory = sessionFactory;    }    public Session getSession(){        return this.sessionFactory.getCurrentSession();    }}

EmployeeDao.java:

public class EmployeeDao extends BaseDao{    public List<Employee> getAll(){        String hql = "FROM Employee e LEFT OUTER JOIN FETCH e.department";        return getSession().createQuery(hql).list();    }}

EmployeeService.java:

public class EmployeeService {    private EmployeeDao employeeDao;    public void setEmployeeDao(EmployeeDao employeeDao) {        this.employeeDao = employeeDao;    }    public List<Employee> getAll(){        List<Employee> employees = employeeDao.getAll();//      employees.clear();        return employees;    }}

EmployeeAction.java:

public class EmployeeAction extends ActionSupport implements RequestAware, ModelDriven<Employee>, Preparable{    private Employee model;    @Override    public Employee getModel() {        return model;    }    private Map<String, Object> request;    @Override    public void setRequest(Map<String, Object> arg0) {        this.request = arg0;    }    private static final long serialVersionUID = 1L;    private EmployeeService employeeService;    public void setEmployeeService(EmployeeService employeeService) {        this.employeeService = employeeService;    }    public String list() {        request.put("employees", employeeService.getAll());        return "list";    }    @Override    public void prepare() throws Exception {}}

配置applicationContext-beans.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="employeeDao" class="com.zhou.dao.EmployeeDao">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <bean id="employeeService" class="com.zhou.service.EmployeeService">        <property name="employeeDao" ref="employeeDao"></property>    </bean>    <bean id="employeeAction" class="com.zhou.actions.EmployeeAction"        scope="prototype">        <property name="employeeService" ref="employeeService"></property>      </bean></beans>

struts.xml:

<package name="default" namespace="/" extends="struts-default">    <action name="emp-*" class="employeeAction" method="{1}">        <result name="list">/WEB-INF/views/emp-list.jsp</result>    </action></package>

emp-list.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script></head><body>    <h4>Employee List Page</h4>    <s:if test="#request.employees == null || #request.employees.size() == 0">        没有任何员工信息    </s:if>    <s:else>        <table border="1" cellpadding="10" cellspacing="0">            <tr>                <td>ID</td>                <td>LASTNAME</td>                <td>EMAIL</td>                <td>BIRTH</td>                <td>CREATETIME</td>                <td>DEPT</td>                <td>DELETE</td>                <td>EDIT</td>            </tr>            <s:iterator value="#request.employees">                <tr>                    <td>${id }</td>                    <td>${lastName }</td>                    <td>${email }</td>                    <td>                        <s:date name="birth" format="yyyy-MM-dd"/>                    </td>                    <td>                        <s:date name="birth" format="yyyy-MM-dd hh:mm:ss"/>                    </td>                    <td>${department.departmentName }</td>                    <td>                        <a href="emp-delete?id=${id }" class="delete">Delete</a>                        <input type="hidden" value="${lastName }"/>                    </td>                    <td>                        <a href="emp-input?id=${id }">Edit</a>                    </td>                </tr>            </s:iterator>        </table>    </s:else></body></html>