Jimoshi_用easyui做Struts2+Hibenate4学生实体类(Student)的增删改

Jimoshi成长经历:前面的笔记后面再慢慢整理-------方便自己

引言:只是为了完成简单的增删改功能,可能有很多bug,就不慢慢调了
目录:创建整合maven项目(Test项目)、映射Student表在对应的hibernate数据库中、模拟数据库表数据加载对应请求数据到index.jsp页面、完成添加学生实体类的功能、完成删除学生实体类的功能、完成修改学生实体类的功能

一、创建整合maven项目(Test项目)

  1、创建步骤:

   File-->new-->Maven Project-->勾选Create a simple project-->next-->Group Id和Artifact Id填入SSH-->Packaging选择war-->finish-->右键项目名-->Properties-->Project Facets-->Dynamic Web Module选择3.0-->
Java选择1.7-->Apply-->ok

  2、引入需要的jar包(pom.xml)

  代码示例:

  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Test</groupId>
  <artifactId>Test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
          <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <version>2.3.2</version>  
            <configuration>  
                <source>1.7</source>  
                <target>1.7</target>  
            </configuration>  
        </plugin>  
    </plugins>  
  </build>
 <dependencies>
  <!-- 添加Struts2 -->
  <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.3.16.3</version>
</dependency>
<!-- 添加servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
</dependency>
<!-- JSONLIB 支持 -->
    <dependency>
     <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
    </dependency>
<!-- 添加struts2 json -->    
 <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.3.16</version>
</dependency>   
   <!-- 添加对hibernate -->
   <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.3.5.Final</version>
  </dependency>
  <!-- 添加mysql数据库驱动 -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.18</version>
</dependency>
    <!-- 添加junit -->
        <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
       </dependency>
       <!-- hibernate C3P0连接池 -->
      <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>4.3.5.Final</version>
   </dependency>
 </dependencies>
</project>

  3、编写struts.xml文件(main/resources)

  代码示例
 
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
 
  <struts>
  </struts>

  4、编写hibernate.cfg.xml文件(main/resources)

  代码示例:

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
         <session-factory>
          <!-- 配置数据库连接 -->
               <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
             <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
             <property name="hibernate.connection.username">root</property>
             <property name="hibernate.connection.password">123</property>
             <property name="Connection.useUnicode">true</property>
             <property name="connection.characterEncoding">utf8</property>      
             <!-- 方言 -->
             <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
             <!-- 控制台能够输出SQL语句 -->
             <property name="hibernate.show_sql">true</property>
              <!-- 帮你生成对应的表,或者是表的更新 -->
             <property name="hibernate.hbm2ddl.auto">update</property>
             <!-- hibernate c3p0连接池 配置 -->
             <property name="c3p0.min_size">7</property>
             <property name="c3p0.max_size">42</property>
             <property name="c3p0.timeout">1800</property>
             <property name="c3p0.max_statements">50</property>
             <!-- 映射对应的实体 -->        
         </session-factory>    
    </hibernate-configuration>  

    5、编写HibernateUtil类(com.zr.util)

    代码示例:

    public class HibernateUtil {
          //定义了一个静态的属性,这个属性会在加载类的时候进行初始化.
          private static final SessionFactory sf = bulidSessionFactory();
          //调用了另一个私有的静态方法,这个静态方法加载了Hibernate的配置,然后用这个配置建立了一个SessionFactory
          private  HibernateUtil(){};
          private  static SessionFactory bulidSessionFactory(){
             //读取配置文件,创建sessioFactory工厂
             Configuration  config  = (Configuration) new Configuration().configure();
             //注册服务
             ServiceRegistry  sr =  new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
             return  config.buildSessionFactory(sr);
             }
          public static SessionFactory getSf() {
             return sf;
            }
        }

二、映射Student表在对应的hibernate数据库中

  1、编写Student实体类注解(com.zr.model中)

  代码示例:

  /**
    * 创建学生的模板
    * @author Administrator
    *
    */
    @Entity
    @Table(name="t_student")
    public class Student {
    private int sid;
    private String sname;
    private int sage;
    private String ssex;
    @Id
    @GeneratedValue
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public int getSage() {
        return sage;
    }
    public void setSage(int sage) {
        this.sage = sage;
    }
    public String getSsex() {
        return ssex;
    }
    public void setSsex(String ssex) {
        this.ssex = ssex;
    }
      }

   2、编写hibernate.cfg.xml文件并映射学生实体
 
   代码示例:

   <!-- 映射学生对应的实体 -->
   <mapping class="com.zr.model.Student"/>

   3、测试hibernate数据库中表是否对应建立起来(com.zr.test)

   代码示例:

   public class Test1 {
      //使用HibernateUtil
       private  SessionFactory  sf = HibernateUtil.getSf();
       private  Session  session;
       @Before
       public  void setSession(){
        // 通过开启事务
       session =  sf.openSession();
       session.beginTransaction();
        }
       @After
       public  void  closeSessionandSf(){
       //事务的提交
        session.getTransaction().commit();
       //关闭session
        session.close();
       //关闭工厂
        sf.close();
        }
        //增加,使用save方法
       @Test
       public void testStudent() {
         Student s = new Student();
         s.setSname("zhj");
         session.save(s);
    }
     }

三、模拟数据库表数据加载对应请求数据到index.jsp页面

  1、在webapp中添加(js包和themes包)

  代码示例:
 
  js包中引入,
  easyui-lang-zh_CN.js
  jquery.easyui.min.js
  jquery.min.js

  themes包copy把(太多了就不一一列举了)

  2、编写index.jsp页面

  代码示例:

  <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
  <!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">
  <!--引入easyui的样式 -->
  <link rel="stylesheet"  type="text/css" href="themes/bootstrap/easyui.css">
  <link rel="stylesheet"  type="text/css" href="themes/icon.css">
  <!-- js文件 -->
  <script type="text/javascript" src="js/jquery.min.js"></script>
  <script type="text/javascript" src="js/jquery.easyui.min.js"></script>
  <script type="text/javascript" src="js/easyui-lang-zh_CN.js"></script>
  </head>
  <script type="text/javascript">
  $(function(){
    //更改底部工具栏 getPager返回页面对象
    var pager = $('#toolbar').datagrid('getPager');    
      pager.pagination({
        pageList: [10,20,30],
    });
  })
  </script>
  <body>
  <table id="tb" title="学生信息" class="easyui-datagrid" style="width:1000px;height:500px"
            url="show"
            toolbar="#toolbar" pagination="true"
            rownumbers="true" fitColumns="true">
        <thead>
            <tr>
                <th field="ck" checkbox=true></th>
                <th field="sid" width="50">编号</th>
                <th field="sname" width="50">姓名</th>
                <th field="sage" width="50">年龄</th>
                <th field="ssex" width="50">性别</th>
            </tr>
        </thead>
        <div id="toolbar">
                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add"  plain="true"  οnclick="adds()">增加</a>
                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit"  plain="true"  οnclick="updates()">修改</a>
                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove"  plain="true"  οnclick="deletes()">删除</a>
            </div>
   </table>
  </body>
  </html>

  3、编写struts.xml文件发送请求

  代码示例:

  <struts>
  <constant name="struts.ognl.allowStaticMethodAccess" value="true" />
    <package name="zr" namespace="/" extends="struts-default">
    <!-- 展示数据 -->
        <action name="show" class="com.zr.controller.ShowAction" method="show">
        </action>
    </package>
  </struts>

  4、编写ShowAction类(com.zr.controller)

  代码示例:

  private int sid;
  private String sname;
  private int sage;
  private String ssex;
 (进行get,set)
  //展示数据
  public  void show() {  }

  5、编写StudentDao类(com.zr.dao中)

  代码示例:

  public class StudentDao {
  //创建工厂
  private SessionFactory sf = HibernateUtil.getSf();
  /**
   * 实现分页的记录数
   * @param page
   * @param rows
   * @return
   */
  public List<Student> findAllStus(int page,int rows){
    //创建session
    Session session = sf.openSession();
    //通过session 开启事务
    session.beginTransaction();
    String hql = "from Student";
    Query query = session.createQuery(hql);
    query.setFirstResult((page-1)*rows);
    query.setMaxResults(rows);
    List<Student> students =query.list();
     //事务的提交
    session.getTransaction().commit();
    return students;    
  }
  /**
    * 查询所有学生的方法
    * @return
    */
  public long findStusCount(){
    //创建session
    Session session = sf.openSession();
    //通过session 开启事务
    session.beginTransaction();
    String hql = "select count(*) from Student";
    Query query = session.createQuery(hql);
    //事务的提交
    session.getTransaction().commit();
    return (long) query.list().get(0);
     }
  }
 
  6、编写StudentService类(com.zr.service中)
 
  代码示例:

  /**
   * 用于操作学生实体的服务
   * @author Administrator
   *
   */
  public class StudentService {
  StudentDao sd = new StudentDao();
  /**
   * 查询所有学生的服务
   * @param page
   * @param rows
   * @return
   */
   public JSONObject findAllStus(int page,int rows){
    JSONObject obj = new JSONObject();
    obj.put("total", sd.findStusCount());
    obj.put("rows", sd.findAllStus(page, rows));
    return obj;    
   }
  }

  7、编写ShowAction类中的show方法

  代码示例:
   
  public class ShowAction extends ActionSupport implements ServletResponseAware{
    private HttpServletResponse response;
    private int page;
    private int rows;
    
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getRows() {
        return rows;
    }
    public void setRows(int rows) {
        this.rows = rows;
    }
   StudentService studentService = new StudentService();
    //展示数据
        public  void show() {
            // TODO Auto-generated method stub
            JSONObject obj = studentService.findAllStus(page, rows);
            try {
                response.getWriter().write(obj.toString());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    @Override
    public void setServletResponse(HttpServletResponse response) {
        // TODO Auto-generated method stub
        this.response=response;
    }
   }

四、完成添加学生实体类的功能

  1、编写index.jsp页面

  代码示例:

  <body></body>中,
  <div id="dlg" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px"
            closed="true" buttons="#dlg-buttons">
        <div class="ftitle" id="">学生信息</div>
        <form id="fm" method="post" novalidate>
        <div class="fitem" id="ssid">
                <label>编号:</label>
                <input id="sid" name="sid" class="easyui-textbox" required="true">
            </div>
            <div class="fitem">
                <label>姓名:</label>
                <input id="sname" name="sname" class="easyui-textbox" required="true">
            </div>
            <div class="fitem">
                <label>年龄:</label>
                <input id="sage" name="sage" class="easyui-textbox" required="true">
            </div>
            <div class="fitem">
                <label>性别:</label>
                <input id="ssex" name="ssex" class="easyui-textbox" required="true">
            </div>
        </form>
    </div>
    <div id="dlg-buttons">
        <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" style="width:90px" οnclick="submit()" id="submit">提交</a>
        <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" οnclick="save()" style="width:90px" id="save">保存</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" οnclick="javascript:$('#dlg').dialog('close')" style="width:90px">取消</a>
    </div>

    <script></script>中,
    //显示增加
    function adds(){
    $('#dlg').dialog('open').dialog('center').dialog('setTitle','增加学生');
    $('#submit').hide();
    $('#save').show();
    $('#ssid').hide();
    }
    //保存添加的数据
    function save(){
    $("#save").click(function(){
        var stu=new Object();
        stu.sname = $("#sname").val();
        stu.sage = $("#sage").val();
        stu.ssex = $("#ssex").val();
        var json=JSON.stringify(stu);
        $.ajax({
            type:"post",
                url:"add",
                data:{"json":json},
                dataType:"text",
                success:function(data){
                    $.messager.alert('提示', data)        
                    $('#tb').datagrid('reload');    
                 }
        })
         $('#dlg').dialog('close');
    });
     }

   2、编写struts.xml文件

   代码示例:

   <!-- 增加数据 -->
   <action name="add" class="com.zr.controller.ShowAction" method="add">
   </action>

   3、编写ShowAction类添加add方法(com.zr.controller中)

   代码示例:

   //增加数据
   public void add(){
   //接收jsp页面传入的json值
   JSONObject jso = JSONObject.fromObject(json);
    }

   4、编写StudentDao类(com.zr.dao)

   代码示例:

   /**
     * 添加学生的方法
     * @param name 传入学生姓名
     * @param age 传入学生年龄
     * @param sex 传入学生性别
     */
   public void addStu(String name,int age,String sex){
    //创建session
    Session session = sf.openSession();
    //通过session 开启事务
    session.beginTransaction();
    Student s = new Student(name,age,sex);
    session.save(s);
    //事务的提交
    session.getTransaction().commit();
    }
   }

   5、编写StudentService(com.zr.service)

   代码示例:

   /**
     * 添加学生的服务
     * @param name 传入姓名
     * @param age 传入年龄
     * @param sex 传入性别
     */
   public void addStu(String name,int age,String sex){
    sd.addStu(name,age,sex);
      }
   }

  6、编写ShowAction类(com.zr.controller)

  代码示例:

  //增加数据
        public void add(){
         JSONObject jso = JSONObject.fromObject(json);
         Student stu=(Student) JSONObject.toBean(jso, Student.class);
         studentService.addStu(stu.getSname(),stu.getSage(),stu.getSsex());
         response.setCharacterEncoding("utf8");
         PrintWriter pw;
        try {
            pw = response.getWriter();
            pw.write("增加成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     }

  7、测试:请求localhost:8080/Test/index.jsp

五、完成删除学生实体类的功能

  1、编写index.jsp页面

  代码示例:

  <script></script>中,
  //删除学生
  function deletes() {
    var data = $("#tb").datagrid('getSelections');    
    if(data.length==0){
        $.messager.show({
            title:'警告',
            msg:'请选中需要删除的数据',
            timeout:1500,
            showType:'slide',
                style:{
                    left:100,
                    right:'',
                    top:100
                }
              });
        }else{
            //声明一个空的数组装选中的ID
            var sids=[];
            for (var  i= 0;  i< data.length; i++) {
                sids.push(data[i].sid)            
            }
            $.messager.confirm('确认删除', '您确定要删除这'+data.length+'条数据吗?', function(r){                
                    $.ajax({
                        type:"post",
                        url:"delete",
                        data:{"sids":sids},
                        dataType:"text",
                        success:function(data){    
                            $.messager.alert('提示', data)
                            $("#tb").datagrid('reload');                                                }
                    })                    
        });
    }
    }
   2、配置struts.xml文件

   代码示例:

    <!-- 删除数据 -->
    <action name="delete" class="com.zr.controller.ShowAction" method="delete">
    </action>

   3、编写ShowAction类实现ServletRequestAware接口(com.zr.controller中)

   代码示例:

   public class ShowAction extends ActionSupport implements ServletResponseAware,ServletRequestAware{
    private int sids[];
    private HttpServletRequest request;
    public int[] getSids() {
        return sids;
    }
    public void setSids(int[] sids) {
        this.sids = sids;
   //删除数据
       public void delete(){
       response.setCharacterEncoding("utf8");
       //接收jsp页面传入的值
       String sid[]=request.getParameterValues("sids[]");
       
   }
   @Override
    public void setServletRequest(HttpServletRequest request) {
        // TODO Auto-generated method stub
        this.request=request;
    }
    }
  }

  4、编写StudentDao类(com.zr.dao中)

  代码示例:

  /**
    * 删除学生的方法
    * @param sid 传入选中学生的id
    */
  public void deleteStus(int sid){
    //创建session
    Session session = sf.openSession();
    //通过session 开启事务
    session.beginTransaction();
    Student s = (Student) session.get(Student.class, Integer.valueOf(sid));
    session.delete(s);
    //事务的提交
    session.getTransaction().commit();
    session.close();
  }

  5、编写StudentService(com.zr.service中)

  代码示例:

  /**
    * 删除学生的服务
    * @param sid 传入学生的id
    */
  public void deleteStu(String sid[]){
    for (int i = 0; i < sid.length; i++) {
        sd.deleteStus(Integer.valueOf(sid[i]));
    }
  }

  6、编写ShowAction类完成delete方法中的内容(com.zr.controller中)

  代码示例:

  //删除数据
        public void delete(){
            response.setCharacterEncoding("utf8");
            String sid[]=request.getParameterValues("sids[]");
            studentService.deleteStu(sid);
            try {
                PrintWriter pw =response.getWriter();
                pw.write("删除成功");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

  7、测试

六、完成修改学生实体类的功能

  1、编写index.jsp页面

  代码示例:

  <script></script>中,
  //修改学生
  function updates(){
     var data = $("#tb").datagrid('getSelections');    
        if(data.length==0){
            $.messager.show({
                title:'警告',
                msg:'请选中需要修改的数据',
                timeout:1500,
                showType:'slide',
                    style:{
                        left:100,
                        right:'',
                        top:100
                    }
                  });
        }else if(data.length!=1){
            $.messager.show({
                title:'警告',
                msg:'你只能选择一条数据修改',
                timeout:1500,
                showType:'slide',
                    style:{
                        left:100,
                        right:'',
                        top:100
                    }
                  });
        }else{
            var student =$("#tb").datagrid('getSelected');
            $("#sid").textbox('setValue',student.sid)
            $("#sname").textbox('setValue',student.sname);
            $("#sage").textbox('setValue',student.sage);
            $("#ssex").textbox('setValue',student.ssex);
            $('#dlg').dialog('open').dialog('center').dialog('setTitle','修改信息');
               //隐藏保存按钮
                $('#save').hide();
                $('#ssid').hide();
                //显示确认按钮
                 $('#submit').show();
        }
        
   }            
   function submit(){
    $("#submit").click(function(){
          var stu = new Object();
          stu.sid = $("#sid").val();
          stu.sname = $("#sname").val();
          stu.ssex = $("#ssex").val();
          stu.sage = $("#sage").val();
          var json1=JSON.stringify(stu);           
        $.ajax({                       
                type:"post",
                url:"update",
                data:{"json1":json1},
                dataType:"text",
                success:function(data){
                    $.messager.alert('提示', data)
                    $('#tb').datagrid('reload');  
                    $('#dlg').dialog('close')
                }
        })
        
    })
   }

   2、配置struts.xml文件

   代码示例:

    <!-- 修改数据 -->
    <action name="update" class="com.zr.controller.ShowAction" method="update">
    </action>

   3、编写ShowAction类创建修改学生的方法并且接收jsp页面的值

   代码示例:

   private String json1;
    public String getJson1() {
        return json1;
    }
    public void setJson1(String json1) {
        this.json1 = json1;
    }
   //修改数据
   public void update(){
    JSONObject jso = JSONObject.fromObject(json1);
   }

  4、编写StudentDao类(com.zr.dao中)

  代码示例:
 
  /**
    * 修改学生的方法
    * @param sid 传入学生id
    * @param sname 传入学生姓名
    * @param sage 传入学生年龄
    * @param ssex 传入学生性别
    */
  public void updateStu(int sid,String sname,int sage,String ssex){
    //创建session
    Session session = sf.openSession();
    //通过session 开启事务
    session.beginTransaction();
    Student s=(Student) session.get(Student.class, Integer.valueOf(sid));
    s.setSname(sname);
    s.setSage(sage);
    s.setSsex(ssex);
    //事务的提交
    session.getTransaction().commit();
    session.close();
   }

  5、编写StudentService(com.zr.service)
 
  代码示例:

  /**
    * 修改学生的服务
    * @param sid 传入学生的id
    * @param sname  传入学生的姓名
    * @param sage 传入学生的年龄
    * @param ssex 传入学生的性别
    */
  public void updateStu(int sid,String sname,int sage,String ssex){
    sd.updateStu(sid, sname, sage, ssex);
  }

  6、编写ShowAction类完成update方法中的内容(com.zr.controller中)

  代码示例:

  //修改数据
        public void update(){
        JSONObject jso = JSONObject.fromObject(json1);
        Student stu=(Student) JSONObject.toBean(jso, Student.class);
        studentService.updateStu(stu.getSid(),stu.getSname(), stu.getSage(), stu.getSsex());
        response.setCharacterEncoding("utf8");
        PrintWriter pw;
        try {
            pw = response.getWriter();
            pw.write("修改成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }

  7、测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值