整合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()方法的区别,以及对其返回结果的正确处理。