整合DataTables到JavaWeb(SSH)实例总结分析

整合DataTables到JavaWeb(SSH)实例总结分析

一、项目介绍
    本项目在基础的SSH框架上,利用Datatables控件实现对数据库中数据的基本增删查改及分页。主要采用Datatables的服务器处理模式(Server-side processing),并通过Ajax将数据封装成Json后实现前后台数据的交换。
    图片展示:下面展示登陆界面和学生信息管理界面,注册以及找回密码界面在此不展示。

图1.1 登陆界面


图1.2 学生信息界面

二、开发环境及准备
1、开发环境:JDK7、MyEclipse10、Tomcat7、MySQL5.0
2、开发要求:SSH、Ajax、Json、Datatables、Bootstrap、JavaScript、jQuery···
Tips:学习本文之前可先学习“SSH框架搭建”(链接:http://note.youdao.com/share/?id=28ea97b9884156a5e040caf98338bc21&type=note),以及“Ajax+Json+Struts2+jQuery实例总结分析”,理解Json数据是如何通过Ajax以及Struts实现前后台的传递。(链接:http://note.youdao.com/share/?id=e5e3a1e2efa73254c3243fb69f83f027&type=note

三、项目思路分析
    本项目是在基础的SSH框架整合实例基础上,整合Datatables控件到JavaWeb项目中,实现对数据库中数据的基本增删查改及分页。
思路及设计流程:
1、将数据库中的数据封装成Json格式,并通过struts正确传送到前台;
关键点:(1)如何正确有效的将后台数据封装成Json格式:将后台数据封装成Json格式有多种方法, 如写函数将数据拼接成json格式、或利用gson或者org.json的方法。本项目中采用gson的 toJson()方法。
     (2)在于如何配置struts.xml,实现JSP页面与控制层Json数据的正确传递。
2、将传送到前台的Json格式数据利用Datatables显示出来;
关键点:服务器处理Ajax源数据时,程序设计中必须按照API要求的发送参数及返回参数进行设置处理。
3、实现增、删、改基本功能;
关键点:掌握jQuery中$.ajax()方法的使用
4、实现查询及分页;
关键点:(1)实现查询以及分页各需要服务器返回什么参数(主要看官网文档);
        (2)Hibernate如何实现原生sql查询。本项目中,在DAO层先获取session对象,然后执行session的createSQLQuery(sql)方法。
5、项目优化。

四、实例讲解
    这部分将分层给出详细的讲解并给出部分核心代码。
1、model层:编写实体模型及配置映射文件。以Students实体为例。
(1)编写实体Students.java。
package com.ssh.model;

/**
 *
 * @author 杜航
 * @function:Students entity.
 *
 */

public class Students implements java.io.Serializable {

 /** Fields */

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private Integer id;
 private String username;
 private String gender;
 private String age;
 private String degree;
 private String remark;

 /** Constructors */
 /** default constructor */
 public Students() {
 }

 /** full constructor */
 public Students(Integer id, String username, String gender, String age,
   String degree, String remark) {
  this.id = id;
  this.username = username;
  this.gender = gender;
  this.age = age;
  this.degree = degree;
  this.remark = remark;
 }

 /** Property accessors */
 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getGender() {
  return gender;
 }

 public void setGender(String gender) {
  this.gender = gender;
 }

 public String getAge() {
  return age;
 }

 public void setAge(String age) {
  this.age = age;
 }

 public String getDegree() {
  return degree;
 }

 public void setDegree(String degree) {
  this.degree = degree;
 }

 public String getRemark() {
  return remark;
 }

 public void setRemark(String remark) {
  this.remark = remark;
 }

}

(2)配置映射文件Students.hbm.xml。(如果采用Hibernate反向工程,则不需要配置映射文档)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.ssh.model.Students" table="students" catalog="sshexample">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="increment"></generator>
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="20" not-null="true" unique="true" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="gender" length="20" not-null="true" />
        </property>
        <property name="age" type="java.lang.String">
            <column name="age" length="3" not-null="true" />
        </property>
        <property name="degree" type="java.lang.String">
            <column name="degree" length="20" not-null="true" />
        </property>
        <property name="remark" type="java.lang.String">
            <column name="remark" length="20" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

2、DAO层:编写Hibernate操作数据库接口并实现其对应类。
(1)编写接口IStudentsDAO.java。
    由于实现查询和分页时,默认生成的DAO层的方法已无法达到要求,故而在原始的SSH框架实例的基础上,在DAO层新增excuteSQL()方法,以在Hibernate中执行原生的sql语句,sql语句的封装以及执行在Web层。
package com.ssh.dao;
import java.util.List;
import com.ssh.model.Students;
public interface IStudentsDAO {
 // property constants
 public static final String USERNAME = "username";
 public static final String GENDER = "gender";
 public static final String AGE = "age";
 public static final String DEGREE = "degree";
 public static final String REMARK = "remark";
 public abstract void save(Students transientInstance);
 public abstract void delete(Students persistentInstance);
 public abstract Students findById(java.lang.Integer id);
 public abstract List findByExample(Students instance);
 public abstract List findByProperty(String propertyName, Object value);
 public abstract List findByUsername(Object username);
 public abstract List findByGender(Object gender);
 public abstract List findByAge(Object age);
 public abstract List findByDegree(Object degree);
 public abstract List findByRemark(Object remark);
 public abstract List findAll();
 public abstract Students merge(Students detachedInstance);
 public abstract void attachDirty(Students instance);
 public abstract void attachClean(Students instance);
 /**
  * Hibernate执行sql语句
  */
 public List excuteSQL(String sql);
}

(2)实现接口StudentsDAO.java。
    实现接口中的excuteSQL()方法,首先要理解如何获得session,然后要区分createSQLQuery()与createQuery()方法的区别,以及对其返回结果的正确处理。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用方法: 支持JAVA和PHP两种后台。 PHP:直接将WebRoot下的文件放到php服务器上直接运行即可,记得启用sqlite3。 JAVA:修改user-manage.js,将访问后台的url由"datasource.php"改为"datasource.jsp",然后将WebRoot下的文件放到tomcat下直接运行。也可使用Eclipse直接导入此项目文件。 简要说明: 使用DataTable默认的ajax交互功能,对传给后台和从后台获取的数据都有命名格式要求,这样一来耦合度较高,不利于后期扩展,不能直接适用于需要跟多种不同前端或其他业务交互的项目。本例子主要展示了自行封装请求参数和返回数据的用法,对后台的交互没有任何格式和命名限制。 基于Bootstrap 2.3.2,相关的其他插件包括图标控件FontAwesome、等待提示控件Spinjs(修改版)、弹窗控件lhgdialog(修改版) 主要展现: 封装请求参数(查询、排序、分页,不再需要data、dataFilter和dataSrc) 封装返回数据 自定义查询参数 服务器分页 自行控制和自定义遮罩效果 生成自定义效果的单元格(在线离线) 生成复选框单元格 响应复选框选择事件 生成操作按钮单元格 响应操作栏按钮点击事件 响应行点击事件 渲染回调事件(默认选中第一行) 分页栏增加跳页功能(直接修改了dataTables.bootstrap.js和dataTables.bootstrap.css) CSS实现单元格超长文字省略号显示 CSS实现单元格连续纯字母数字强制换行显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值