Struts2_ognl表达式&操作值栈(3)

电脑杂谈  发布时间:2019-07-24 09:06:44  来源:网络整理
public class CustomerServiceImpl implements CustomerService {
    @Override
    // 添加客户
    public void addCustomer(Customer customer) {
        // 获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        // 开启事务
        Transaction transaction = session.beginTransaction();
        // 业务逻辑
        try {
            CustomerDAO dao = new CustomerDAOImpl();
            dao.addCustomer(customer);
        } catch (Exception e) {
            // struts2默认异常回滚事务,可以不写
            transaction.rollback();
            e.printStackTrace();
        } finally {
            // 无论是否异常都提交事务结束事务
            transaction.commit();
        }
    }
    @Override
    // 查询所有客户
    public List<Customer> findListCustomer() {
        // 获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        // 开启事务
        Transaction transaction = session.beginTransaction();
        // 业务逻辑
        List<Customer> listCustomer = null;
        try {
            CustomerDAO dao = new CustomerDAOImpl();
            listCustomer = dao.findListCustomer();
        } catch (Exception e) {
            // struts2默认异常回滚事务,可以不写
            transaction.rollback();
            e.printStackTrace();
        } finally {
            // 无论是否异常都提交事务结束事务
            transaction.commit();
        }
        return listCustomer;
    }
    @Override
    // 通过id查找客户
    public Customer findCustomerById(Long cust_id) {
        // 获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        // 开启事务
        Transaction transaction = session.beginTransaction();
        // 业务逻辑
        Customer customer = null;
        try {
            CustomerDAO dao = new CustomerDAOImpl();
            customer = dao.findCustomerById(cust_id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            transaction.commit();
        }
        return customer;
    }
    @Override
    // 更新客户信息
    public void updateCustomer(Customer customer) {
        // 获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        // 开启事务
        Transaction transaction = session.beginTransaction();
        // 业务逻辑
        try {
            CustomerDAO dao = new CustomerDAOImpl();
            dao.updateCustomer(customer);
        } catch (Exception e) {
            // Struts2默认异常回滚
            transaction.rollback();
            e.printStackTrace();
        } finally {
            // 提交事务
            transaction.commit();
        }
    }
}
1. 添加客户需要先找到其关联的联系人建立关系
2. 持久态的使用
public class CustomerDAOImpl implements CustomerDAO {
    @Override
    //添加客户
    public void addCustomer(Customer customer) {
        //获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        //首先找到客户的联系人
        //创建Criteria查询对象
        Criteria criteria = session.createCriteria(Linkman.class);
        //创建限制条件
        Criterion criterion = Restrictions.eq("lkm_name", customer.getCust_linkman());
        //添加限制条件
        criteria.add(criterion);
        //查询联系人
        Linkman linkman = (Linkman) criteria.uniqueResult();
        if(linkman == null) {
            linkman = new Linkman();
            linkman.setLkm_name(customer.getCust_linkman());
        }
        
        //保存客户到
        //建立关系:客户表达与联系人的关系:一个客户有多个联系人
        customer.getLinkmans().add(linkman);
        //建立关系:联系人表达与客户的关系:一个联系人对应一个客户
        linkman.setCustomer(customer);
        
        //将customer变为持久态,配置了级联,会自动级联将linkman也变为持久态
        session.save(customer);
    }
    @Override
    //查询所有客户
    public List<Customer> findListCustomer() {
        //单表查询使用Criteria查询更方便
        //获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        //创建Criteria查询对象
        Criteria criteria = session.createCriteria(Customer.class);
        //执行查询
        return criteria.list();
    }
    @Override
    //通过ID查询客户
    public Customer findCustomerById(Long cust_id) {
        //获取Session
        Session session = HibernateUtils.getCurrentSession();
        //get方法获取的Customer已经是持久态无需保存
        return session.get(Customer.class, cust_id);
    }
    @Override
    //更新客户信息
    public void updateCustomer(Customer customer) {
        //获取Session对象
        Session session = HibernateUtils.getCurrentSession();
        //修改客户
        session.update(customer);
    }
}
<!-- 神奇的request先从request中找,找不到就走值栈的默认查找机制,因此也能查找到存入值栈的list -->
<c:forEach items="${list }" var="customer">
    <TR style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
    <TD>${customer.cust_name }</TD>
    <TD>${customer.cust_level }</TD>
    <TD>${customer.cust_source }</TD>
    <TD>${customer.cust_linkman }</TD>
    <TD>${customer.cust_phone }</TD>
    <TD>${customer.cust_mobile }</TD>
    <TD>
    <a href="${pageContext.request.contextPath }/customer_showEdit.action?cust_id=${customer.cust_id}">修改</a>
    </TD>
form表单action请求地址:
    action="${pageContext.request.contextPath }/customer_update.action"
//隐藏域提交客户id,从而找到该客户进行数据更新
<s:textfield name="cust_id" value="%{customer.cust_id}" type="hidden" />
客户名称:<s:textfield name="cust_name" value="%{customer.cust_name}" />
客户级别:<s:textfield name="cust_level" value="%{customer.cust_level}" />
信息来源:<s:textfield name="cust_source" value="%{customer.cust_source}" />
联系人:<s:textfield name="cust_linkman" value="%{customer.cust_linkman}" />
固定电话 :<s:textfield name="cust_phone" value="%{customer.cust_phone}" />
移动电话 :<s:textfield name="cust_mobile" value="%{customer.cust_mobile}" />

结果图:

img17.png

img18.png

img19.png


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-115359-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...