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、测试
引言:只是为了完成简单的增删改功能,可能有很多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、测试