zoukankan      html  css  js  c++  java
  • Struts2的CRUD操作

    Struts之CRUD

    1何为CRUD:CRUD代表的是一个框架的Create(增),Read(读取),update(更新),Delete(删除)

    2怎么做呢??

    其实Struts2的CRUD与现实的方法一样,只是在属性的设置和获取上更方便了,因为了值栈吖,有了OGNL对象表达式,所以Struts2的CRUD显为更加方便

    废话不多说了,下面就来个分析吧!!(与数据库连接部分就用data来代替)

    Create------>增:添加数据,保存数据到数据库

    肯定就是获得一个保存的对象吧,但是提交的Action类和对象类不是同一个OGNL匹配的不是我这个Action类,那我怎么获得提交的对象呢?惯性思想肯定是从值栈里拿吧,但是这样做好麻烦吖,从值栈拿出来,还要一个一个的赋值,或者是在Action类里写相同属性的Set方法(),麻烦吖,所以Struts2又提供了更简便的方法是实现ModelDriven的接口----------该接口就是用来把所需的对象压入栈顶

    正式流程:

             1表单提交数据      

             2在Action类中实现ModelDriven接口 ,并实现getModel()方法,并把自己所需的对象压入栈顶,也就是return回去那个对象

             3在getModel方法的作用就是把对象压入值栈的栈顶

             4然后paparmeterInterceptor拦截器(默认会调用此拦截器的,),该拦截器就是把请求里的参数与值栈对象的一一匹配,这样我们的对象就从栈顶里拿下来了,然后根据相应的办法放入数据库

    代码如下:

    表单提交数据:

    <s:form action="emp-save">
    <s:textfield name="firstName" label="FirstName"></s:textfield>
    <s:textfield name="lastName" label="LastName"></s:textfield>
    <s:textfield name="email" label="Email"></s:textfield>
    <s:submit></s:submit>	
    </s:form>
    

      

    Action类处理请求:

    public class EmployeeAction implements ModelDriven<Employee> {
    private Employee employee;

    public String save(){
    dao.save(employee);
    return "success";
    }

    public Employee getModel() {

    this.employee=new employee()
    return employee;
    }

    }

    data类----模拟的数据库

    public class Dao {
    
    private static Map<Integer, Employee> emps = new LinkedHashMap<Integer, Employee>();
    
    static{//模拟数据库
    emps.put(1001, new Employee(1001, "AA", "aa", "aa@atguigu.com"));
    emps.put(1002, new Employee(1002, "BB", "bb", "bb@atguigu.com"));
    emps.put(1003, new Employee(1003, "CC", "cc", "cc@atguigu.com"));
    emps.put(1004, new Employee(1004, "DD", "dd", "dd@atguigu.com"));
    emps.put(1005, new Employee(1005, "EE", "ee", "ee@atguigu.com"));
    }
    
    
    
    /*
    *用来遍历的
    
    *
    
    */
    
    public List<Employee> getEmployees(){
    return new ArrayList<Employee>(emps.values());
    }
    
    /*
    
    *用来删除
    
    *
    
    */
    
    
    public void delete(Integer empId){
    emps.remove(empId);
    }
    /*
    
    *用来保存
    
    *
    
    */
    
    
    public void save(Employee emp){
    long time = System.currentTimeMillis();//用来产生ID的
    emp.setEmployeeId((int)time);
    
    /*
    
    *根据ID获取数据的
    
    *
    
    */
    
    
    public Employee get(Integer empId){
    return emps.get(empId);
    }
    
     

    流程分析:

    form表单提交,发送请求道Action类的save方法,大家都知道Action请求的走的流程吧,Action在执行save方法后会不断的回调各种拦截器,其中就有一个modelDriven吧,这个拦截器的作用就是把自己所需的对象压入栈顶,因为压入栈顶后paparmeterInterceptor拦截器(默认会调用此拦截器的,),该拦截器就是把请求里的参数与值栈对象的一一匹配,这样我们的对象的属性就被一一匹配了吧,就从栈顶里拿下来了,然后根据dao的save方法放入数据库吧,整个流程就是这样

    form提交---->Action类的Action方法------>因为实现了ModelDriven接口(下一遍我会把这个源代码分析上来)----->所以会调用getModel()方法,这个方法作用就是把我们所需的对象压入栈顶-->paparmeterInterceptor拦截器进行匹配------>表单提交的数据被匹配到我们的对象中,那我们就可以根据相应的方法放入数据库吖

  • 相关阅读:
    TCP全局同步
    pytest框架之fixture详细使用
    库操作和表操作
    封装之如何隐藏对象及封装的意义
    类的抽象
    组合
    在子类中重用父类的方法和属性
    类的继承和实现原理
    类的使用,对象的使用
    互联网协议的五层协议详解
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/3992013.html
Copyright © 2011-2022 走看看