您的位置:首页 > 编程语言 > Java开发

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

2016-06-19 14:47 483 查看
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

    
102e2
    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"  onclick="adds()">增加</a>

                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit"  plain="true"  onclick="updates()">修改</a>

                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove"  plain="true"  onclick="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" onclick="submit()" id="submit">提交</a>

        <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="save()" style="width:90px" id="save">保存</a>

        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="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、测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息