StudentAction.java

package com.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext;
import org.omg.CORBA.Request; import com.dao.StudentDao;
import com.dao.imp.StudentDaoImp;
import com.entity.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class StudentAction extends ActionSupport{
private StudentDao dao=new StudentDaoImp();
public StudentDao getDao() {
return dao;
}
public void setDao(StudentDao dao) {
this.dao = dao;
} private int id;
private String name;
private String password;
private String email;
private String sex;
private int age;
private int page=1;
private Student student=new Student(); public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
} @Override
public void validate() {
// TODO Auto-generated method stub
if(student.getName()==null||student.getName().trim().equals(""))
{
this.addFieldError("name", "姓名不能为空");
}
if(student.getPassword()==null||student.getPassword().trim().equals(""))
{
this.addFieldError("password", "密码不能为空");
} }
//重写validate()校验方法 public String findStudents(){
/*耦合方式
* HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
*/
ActionContext ctx=ActionContext.getContext();
Map request=(Map)ctx.get("request");
//可以直接拿到session ctx.getSession();
//ctx.getApplication();
List<Student> students=dao.getStudentsByPage("from Student",page);
//存放到request 属性里面返回前台
//page已经在配置成属性 不用set前台也能获得到
request.put("students", students);
//通过拦截器将其放到attribute里
/*耦合方式request.setAttribute("students", students);*/ //request.getSession().getServletContext();可以拿到session
//servlet中的都可以拿得到
return "findStudents"; } public String saveStudent(){ student.setId(id);
student.setAge(age);
student.setName(name);
student.setEmail(email);
student.setPassword(password);
student.setSex(sex);
dao.saveStudent(student);
return "saveStudent";
} public String deleteStudent(){
dao.deleteStudent(id);
return "deleteStudent"; }
}

student.xml

<?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> <constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" /> <package name="student" namespace="/student" extends="struts-default"> <action name="student_*" class="com.action.StudentAction" method="{1}">
<result name ="saveStudent" type="chain">student_findStudents</result>
<!-- action之间的跳转 type="chain"-->
<result name ="deleteStudent" type="chain">student_findStudents</result>
<result name ="findStudents">/student.jsp</result>
<result name="input">/student_add.jsp</result>
<!-- 出现错误返回当前页面 -->
</action> </package> </struts>

struts.xml

<?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> <include file ="config/student.xml"></include> </struts>

student.java

package com.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; @Entity
public class Student{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
private String password;
private String email;
private String sex; public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private int age; public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

studentDao.java

package com.dao;

import java.util.List;

import com.entity.Student;

public interface StudentDao {
public void saveStudent(Student student);
public void deleteStudent(int id);
public List<Student> getStudents(String hql);
public List<Student> getStudentsByPage(String hql,int page) ;
}

StudentDaoImp.java

package com.dao.imp;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.dao.StudentDao;
import com.entity.Student;
import com.util.HibernateUtils; public class StudentDaoImp implements StudentDao {
private int pageSize=10;
@Override
public void saveStudent(Student student) {
// TODO Auto-generated method stub
Session session=HibernateUtils.getSession();
Transaction tx=session.beginTransaction();
session.saveOrUpdate(student);
tx.commit();
HibernateUtils.closeSession(session);
} @Override
public void deleteStudent(int id) {
// TODO Auto-generated method stub
Session session=HibernateUtils.getSession();
Transaction tx=session.beginTransaction();
// 1.sessionɾ��
Student stu=(Student)session.get(Student.class, id);
session.delete(stu);
//2.����query�ӿ�ɾ�� session.createQurey(delete from Student where id=??)
//q.executeUpdate()
tx.commit();
HibernateUtils.closeSession(session);
} @Override
public List<Student> getStudents(String hql) {
// TODO Auto-generated method stub
Session session=HibernateUtils.getSession();
Query q=session.createQuery(hql); return q.list();
}
@Override
public List<Student> getStudentsByPage(String hql,int page) {
// TODO Auto-generated method stub
Session session=HibernateUtils.getSession();
Query q=session.createQuery(hql);
int begin=(page-1)*pageSize+1;
q.setFirstResult(begin-1).setMaxResults(pageSize);
return q.list();
} }

前台页面student.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/css/bootstrap.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<style type="text/css">
h1,h3,table{
margin: 0 auto;
text-align: center;
}
</style> </head> <body>
<h1>学生信息表</h1>
<table class="table table-striped table-bordered">
<tr><td>学号</td><td>姓名</td><td>年龄</td><td>操作</td>
<c:forEach items="${requestScope.students}" var="student">
<tr><td>${student.id }</td><td>${student.name}</td><td>${student.age }</td>
<td><a href="saveStudentServlet?id=${student.id }">更新</a>&nbsp;&nbsp;<a href="student_deleteStudent?id=${student.id }">删除</a></td>
</tr> </c:forEach> </table>
<h3><span><a href="student_findStudents.action?page=${page-1 }">上一页</a>&nbsp;
<a href="student_findStudents.action?page=${page+1 }">下一页</a>&nbsp;
当前是第${page }页
<%-- a href="student_findStudents.action?page=${page-1 }" --%>
<!-- student是action name findstudents是方法
也可以写绝对目录 /项目名称/namespace/actionname.action-->
</span></h3>
</body>
</html>

student_add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="${pageContext.request.contextPath}/css/bootstrap.css" type="text/css" rel="stylesheet"/>
<script type="text/javascript" src="js/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<style type="text/css">
h1,h3,table{
margin: 0 auto;
text-align: center;
}
input{width:200px}
</style>
</head> <body>
<div class="container" style="width:500px;height: 500px"> <h1>增加学生信息</h1> <form role="form" action="student/student_saveStudent" method="post">
<input type="hidden" value="${stu.id }" name="id"/>
<div class="form-group">
<label for="email">邮箱</label>
<input type="email" class="form-control" value="${stu.email }" name="email" id="email" placeholder="Enter email">
</div>
<div class="form-group">
<label for="name">姓名</label>
<input type="text" class="form-control" name="name" value="${stu.name }" id="name" placeholder="name">
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" class="form-control" name="password" value="${stu.password }" id="password" placeholder="Password">
</div>
<div class="form-group">
<label for="age">年龄</label>
<input type="text" class="form-control" id="age" name="age" value="${stu.age }">
</div>
<div class="radio">
<label>
<input type="radio" class="form-control" id="sex" name="sex" value="male"/>男
<input type="radio" class="form-control" id="sex1" name="sex" value="female" checked="checked"/>女
</label>
</div>
<button type="submit" class="btn btn-default">保存</button>
</form>
</div>
</body>
</html>

struts+hibernate 请求数据库增删改查(小项目实例)的更多相关文章

  1. go——beego的数据库增删改查

    一直都不理解使用go语言的时候,为什么还要自己去装beego,以为使用go便可以解决所有的问题,结果在朋友的点拨下,才意识到: go与beego的关系就好比是nodejs与thinkjs的关系,因此也 ...

  2. spring--boot数据库增删改查

    spring--boot数据库增删改查 数据库配置:(必须配置),我写的文件是yml的,和properties是相同的 1 spring: 2 datasource: 3 driver-class-n ...

  3. node.js封装数据库增删改查

    数据库增删改查的封装 小编不容易 const sql = { insert: function (Collection, insertData) { return new Promise((resol ...

  4. Python实现mysql数据库增删改查

    利用python操作mysql数据库用法简单,环境配置容易,本文将实现对库增.删.改.查的简易封装!   1. 环境配置 安装第三方包  ,导入模块 mysql.connector  pip inst ...

  5. Yii2.0高级框架数据库增删改查的一些操作(转)

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  6. 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查

    一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...

  7. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  8. Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  9. WindowsPhone8 数据库增删改查

    今天第一次在博客园发表文章,如果有的地方写的不对,还请大家指出! 1.这就是一个简单wp8数据库增删改查 1.创建数据表Person [Table] public class Person : INo ...

随机推荐

  1. 2014多校3 Wow! Such Sequence!段树

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=4893 这个问题还真是纠结啊--好久不写线段树的题了.由于这几天学伸展树.然后认为线段树小case了. ...

  2. Extending your SharePoint 2007 site with Microsoft ASP.NET AJAX 3.5

    After ASP.NET 3.5 has been installed you need to modify the web.config file of your MOSS web site wi ...

  3. Sass入门——简介+语法格式及编译调试

    本文来自慕课网大漠. Sass简介 Sass和SCSS区别 1.后缀名不同,很好理解 2.Sass以严格的缩进语法规则书写,不带大括号和分号:而SCSS的语法规则和CSS的语法很类似. Sass: $ ...

  4. nvarchar and nchar

    Same: 1.store unicode charactor. 2. A charactor is stroed with 2 bytes. Different. 1. nchar  会自动填充数据 ...

  5. POJ 1458 Common Subsequence(LCS最长公共子序列)

    POJ 1458 Common Subsequence(LCS最长公共子序列)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?c ...

  6. HTML5 总结-音频-2

    HTML5 音频 音频格式 当前,audio 元素支持三种音频格式:   IE 9 Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg Vorbis   ...

  7. 第四节 Code 39 码 / 三九码

    39码是西元1974年发展出来的条码系统,是一种可供使用者双向扫瞄的分散式条码,也就是说相临两资料码之间,必须包含一个不具任何意义的空白(或细白,其逻辑值为0),且其具有支援文数字的能力,故应用较一般 ...

  8. 「操作系统」:Linker Use static Libraries

    While static libraries are useful and essential tools, they are also a source of confusion to progra ...

  9. 最新Android ADT, SDK, SDK_tool等官方下载说明(及时更新)

    1.Android SDK starter package SDK starter package http://dl.google.com/android/installer_r08-windows ...

  10. 【JUnit4.10源码分析】5 Statement

    假设要评选JUnit中最最重要的类型.或者说核心,无疑是org.junit.runners.model.Statement.Runner等类型看起来热闹而已. package org.junit.ru ...