1.创建一个web工程
2.导入jar包
3.创建Student表
4.创建实体类
packagecom.entity;public classStudent {privateInteger sid;privateString sname;privateString password;privateString sex;privateInteger cid;publicStudent() {
}publicStudent(Integer sid, String sname, String password, String sex,
Integer cid) {this.sid =sid;this.sname =sname;this.password =password;this.sex =sex;this.cid =cid;
}publicStudent(String sname, String password, String sex,
Integer cid) {this.sname =sname;this.password =password;this.sex =sex;this.cid =cid;
}publicInteger getSid() {returnsid;
}public voidsetSid(Integer sid) {this.sid =sid;
}publicString getSname() {returnsname;
}public voidsetSname(String sname) {this.sname =sname;
}publicString getPassword() {returnpassword;
}public voidsetPassword(String password) {this.password =password;
}publicString getSex() {returnsex;
}public voidsetSex(String sex) {this.sex =sex;
}publicInteger getCid() {returncid;
}public voidsetCid(Integer cid) {this.cid =cid;
}
@OverridepublicString toString() {return "Student [cid=" + cid + ", password=" + password + ", sex="
+ sex + ", sid=" + sid + ", sname=" + sname + "]";
}
}
5.配置映射文件
SEQ_STUDENT
6.配置主配置文件
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@127.0.0.1:1521:orcl
holly
sys
org.hibernate.dialect.Oracle10gDialect
true
true
7.创建一个工具类
packagecom.util;importorg.hibernate.HibernateException;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;/*** Hibernate打开session和关闭session的工具包
*@authorHolly
**/
public classHibernate_Util {private static ThreadLocal threadLocal=new ThreadLocal();private static Configuration configuration=null;private static SessionFactory sessionFactory=null;static{try{
configuration=new Configuration().configure("/hibernate.cfg.xml");
sessionFactory=configuration.buildSessionFactory();
}catch(HibernateException e) {
System.out.println("解析xml和创建Session工厂error");
e.printStackTrace();
}
}public staticSession getSession(){
Session session=threadLocal.get();if(session==null){
session=sessionFactory.openSession();
threadLocal.set(session);
}returnsession;
}public static voidcloseSession(){
Session session=threadLocal.get();if(session!=null){
threadLocal.set(null);
session.close();
}
}
}
8.创建分页实体类
packagecom.page;public classPage {private Integer pagesize; //页面大小
private Integer pageno; //当前页
private Integer startrow; //起始行
private Integer totalpage; //总页数
private Integer totalcount; //总条数
publicPage() {
}publicPage(Integer pageSize, Integer pageNo, Integer totalCount) {this.pagesize = pageSize; //页面大小
this.pageno = pageNo; //当前页
this.totalcount = totalCount; //计算总条数
this.setStartrow(pageNo, pageSize); //计算起始行
this.setTotalpage(totalCount, pageSize); //计算总页数
}publicInteger getPagesize() {returnpagesize;
}public voidsetPagesize(Integer pageSize) {this.pagesize =pageSize;
}publicInteger getPageno() {returnpageno;
}public voidsetPageno(Integer pageNo) {this.pageno =pageNo;
}publicInteger getStartrow() {returnstartrow;
}/*** 计算起始行
*@parampageNo
*@parampageSize*/
public voidsetStartrow(Integer pageNo,Integer pageSize) {this.startrow = (pageNo-1)*pageSize;
}publicInteger getTotalpage() {returntotalpage;
}/*** 计算总页数
*@paramtotalCount
*@parampageSize*/
public voidsetTotalpage(Integer totalCount,Integer pageSize) {this.totalpage = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
}publicInteger getTotalcount() {returntotalcount;
}public voidsetTotalCount(Integer totalCount) {this.totalcount =totalCount;
}
@OverridepublicString toString() {return "[{\"pageno\":" + pageno + ",\"pagesize\":" +pagesize+ ",\"startrow\":" + startrow + ",\"totalcount\":" +totalcount+ ",\"totalpage\":" + totalpage + "}]";
}
}
9.创建Dao类
packagecom.dao;importjava.util.List;importcom.entity.Student;importcom.page.Page;public interfaceStudentDao {/*** 1.根据用户名和密码查询
*@paramsname
*@parampassword
*@return
*/Student findByNameAndPwd(String sname,String password);/*** 2.延时加载:查询所有
*@return
*/ListfindAll();/*** 3.保存
*@paramstu
*@return
*/
intsave(Student stu);/*** 4.根据主键id查询单条
*@paramsid
*@return
*/Student findById(Integer sid);/*** 5.修改*/
intupdate(Student stu);/*** 6.删除对象
*@paramstu
*@return
*/
intdelete(Student stu);/*** 7.分页查询*/ListfindPage(Page page);/*** 8.查询总条数*/
intgetTotalCount();
}
10.实现Dao接口
packagecom.dao.impl;importjava.util.List;importorg.hibernate.HibernateException;importorg.hibernate.Query;importorg.hibernate.Session;importcom.dao.StudentDao;importcom.entity.Student;importcom.page.Page;importcom.util.Hibernate_Util;public class StudentDaoImpl implementsStudentDao{/*** 1.查询所有:立即加载*/
public ListfindAll() {//1.获取session对象
Session session=Hibernate_Util.getSession();//2.定义hql语句
String hql="from Student";//3.Session创建Query对象
Query query=session.createQuery(hql);//4.query对象执行操作
List it=query.list();//5.释放资源
Hibernate_Util.closeSession();returnit;
}/*** 2.根据用户名和密码查询*/
publicStudent findByNameAndPwd(String sname, String password) {//1.获取session对象
Session session=Hibernate_Util.getSession();//2.定义hql语句(命名参数)
String hql="from Student where sname=:sname and password=:password";//3.Session创建Query对象
Query query=session.createQuery(hql);//4.query对象给占位符赋值
/*query.setString("sname", sname);
query.setString("password", password);*/query.setParameter("sname", sname);
query.setParameter("password", password);//query.setProperties(user);//5.执行操作(uniqueResult()查询的单行数据)
Student stu=(Student) query.uniqueResult();//6.释放资源
Hibernate_Util.closeSession();returnstu;
}/*** 根据id主键查询单条*/
publicStudent findById(Integer sid) {//1.获取session对象
Session session=Hibernate_Util.getSession();//2.利用session根据主键查询
Student stu=(Student) session.get(Student.class, sid);/*3.
* 因为在修改时要提前查询单条,和session关联已经变成持久化对象,
* 而在修改时session执行update方法时,
* 首先会查询该主键id是否存在,
* 如果存在,则根据主键id修改该对象,此时对象已经处于持久化对象,
* 而实际session中不能同时存在两个主键id相同的对象,
* 否则会出现如下错误:
* org.hibernate.NonUniqueObjectException:
* a different object with the same identifier
* value was already associated with the
* session: [com.entity.Student#1]*/Hibernate_Util.closeSession();//session.clear();
returnstu;
}/*** 删除对象*/
public intdelete(Student stu) {int num=1;//1.获取session对象
Session session=Hibernate_Util.getSession();try{//session删除操作
session.delete(stu);
session.beginTransaction().commit();
}catch(HibernateException e) {
num=0;//TODO Auto-generated catch block
e.printStackTrace();
}finally{//5.释放资源
Hibernate_Util.closeSession();
}returnnum;
}/*** 添加*/
public intsave(Student stu) {int num=1;//1.获取session对象
Session session=Hibernate_Util.getSession();//执行操作
try{
session.save(stu);
session.beginTransaction().commit();
}catch(HibernateException e) {
num=0;
e.printStackTrace();
}finally{//5.释放资源
Hibernate_Util.closeSession();
}returnnum;
}/*** 修改*/
public intupdate(Student stu) {int num=1;//1.获取session对象
Session session=Hibernate_Util.getSession();try{//执行操作//该对象的主键id必须存在
session.update(stu);
session.beginTransaction().commit();
}catch(HibernateException e) {
num=0;
e.printStackTrace();
}finally{//5.释放资源
Hibernate_Util.closeSession();
}returnnum;
}/*** 7.分页查询*/
public ListfindPage(Page page) {//1.获取session
Session session=Hibernate_Util.getSession();//2.定义查询最大记录数的hql
String hql="from Student";//3.定义查询最大记录数的Query对象
Query querypage=session.createQuery(hql);//4.查询最大记录数的数据
querypage.setMaxResults(page.getPagesize());//5.确定查询起点
querypage.setFirstResult(page.getStartrow());//6.分页查询
List list=querypage.list();//7.关闭session
Hibernate_Util.closeSession();returnlist;
}/*** 8.查询总条数*/
public intgetTotalCount() {//1.获取session
Session session=Hibernate_Util.getSession();//2.定义查询总条数hql语句
String hqlcount="select count(*) from Student";//3.利用Session创建Query对象
Query querycount=session.createQuery(hqlcount);//4.获取总条数(返回单行数据uniqueResult())
Integer totalCount=Integer.parseInt(querycount.uniqueResult().toString());//5.释放资源
Hibernate_Util.closeSession();returntotalCount;
}
}
11.创建业务层的接口
packagecom.service;importjava.util.List;importcom.entity.Student;importcom.page.Page;/*** 业务接口
*@authorpc
**/
public interfaceStudentService {/*** 1.登录的业务
*@paramsname
*@parampassword
*@return
*/Student login(String sname,String password);/*** 2.注册
*@paramstu
*@return
*/
intregister(Student stu);/*** 3.查询所有*/ListfindAll();/*** 4.根据主键id查询
*@paramsid
*@return
*/Student findById(Integer sid);/*** 5.修改*/
intupdate(Student stu);/*** 6.删除*/
intdelete(Student stu);/*** 7.分页查询*/ListfindPage(Page page);/*** 8.查询总条数*/
intgetTotalCount();
}
12.实现业务层接口
packagecom.service.impl;importjava.util.List;importcom.dao.StudentDao;importcom.dao.impl.StudentDaoImpl;importcom.entity.Student;importcom.page.Page;importcom.service.StudentService;public class StudentServiceImpl implementsStudentService {/*** 使用多态引用数据访问层对象*/
private StudentDao dao = newStudentDaoImpl();/*** 登录*/
publicStudent login(String sname, String password) {returndao.findByNameAndPwd(sname, password);
}public intdelete(Student stu) {//TODO Auto-generated method stub
returndao.delete(stu);
}public ListfindAll() {//TODO Auto-generated method stub
returndao.findAll();
}publicStudent findById(Integer sid) {//TODO Auto-generated method stub
returndao.findById(sid);
}public intregister(Student stu) {//TODO Auto-generated method stub
returndao.save(stu);
}public intupdate(Student stu) {//TODO Auto-generated method stub
returndao.update(stu);
}public ListfindPage(Page page) {//TODO Auto-generated method stub
returndao.findPage(page);
}public intgetTotalCount() {//TODO Auto-generated method stub
returndao.getTotalCount();
}
}
13.创建Servlet类
Servlet类里的增删改查我是分开写的,所以就不一一粘贴代码,这里只粘贴部分
packagecom.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.entity.Student;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;public class RegisterServlet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//2.接受参数
String sname = request.getParameter("sname");
String password= request.getParameter("password");
String sex= request.getParameter("sex");
Integer cid= Integer.valueOf(request.getParameter("cid"));
Student stu= newStudent(sname, password, sex, cid);//3.业务处理
StudentService service = newStudentServiceImpl();int num =service.register(stu);if (num > 0) {
System.out.println("register success!");
response.sendRedirect("FindAllServlet");
}else{
System.out.println("register fail!");
}
}
}
packagecom.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.codehaus.jackson.map.ObjectMapper;importcom.entity.Student;importcom.page.Page;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;/*** 分页查询
*
*@authorpc
**/
public class FindPageServlet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");/*** ☆
* 在使用ajax往前台通过输出流对象的print方法发送json时
* 该行获取输出流对象的代码必须放在
* response.setContentType("text/html;charset=UTF-8");
* 之后,否则ajax回调时,页面拿到的中文数据就永远都是乱码,
* 原因是:如果将改行代码写在处理客户端乱码之前,表示编码格式已经确定,
* 所以,编码格式的处理应该放在获取PrintWriter对象之前
**/PrintWriter out=response.getWriter();//2.接受参数
String no=request.getParameter("pageNo");//3.业务处理
StudentService service = newStudentServiceImpl();int pageSize=3; //页面大小
int pageNo=1; //默认的pageNo为1
if(no!=null && no!=""){
pageNo=Integer.valueOf(no);
}//获取总条数
int totalCount=service.getTotalCount();//封装分页所需字段
Page page=newPage(pageSize, pageNo, totalCount);//分页查询
List list =service.findPage(page);
ObjectMapper om=newObjectMapper();
String str=om.writeValueAsString(list);
String pagestr=om.writeValueAsString(page);
str="{\"page\":"+pagestr+",\"list\":"+str+"}";
System.out.println(str);
out.print(str);/*if (list != null) {
System.out.println("find page success");
request.setAttribute("list", list);
request.setAttribute("page", page);
request.getRequestDispatcher("index.jsp").forward(request, response);
} else {
System.out.println("find page fail!");
}*/}
}
packagecom.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.entity.Student;importcom.page.Page;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;public class FindAllServlet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");/*** ☆
* 在使用ajax往前台通过输出流对象的print方法发送json时
* 该行获取输出流对象的代码必须放在
* response.setContentType("text/html;charset=UTF-8");
* 之后,否则ajax回调时,页面拿到的中文数据就永远都是乱码,
* 原因是:如果将改行代码写在处理客户端乱码之前,表示编码格式已经确定,
* 所以,编码格式的处理应该放在获取PrintWriter对象之前
**/
//2.接受参数
String no=request.getParameter("pageNo");//3.业务处理
StudentService service = newStudentServiceImpl();int pageSize=3; //页面大小
int pageNo=1; //默认的pageNo为1
if(no!=null && no!=""){
pageNo=Integer.valueOf(no);
}//获取总条数
int totalCount=service.getTotalCount();
Page page=newPage(pageSize, pageNo, totalCount);
List list =service.findPage(page);if(list!=null){
System.out.println("find All page success");
request.setAttribute("list", list);
request.setAttribute("page", page);
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
System.out.println("find All page fail!");
}
}
}
代码
packagecom.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.entity.Student;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;public class LoginServlet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//2.接受参数
String sname=request.getParameter("sname");
String password=request.getParameter("password");//3.业务处理
StudentService service=newStudentServiceImpl();
Student stu=service.login(sname, password);if(stu!=null){
System.out.println("login success!");//4.页面跳转
request.getSession().setAttribute("sname", sname);
response.sendRedirect("FindAllServlet");
}else{
System.out.println("login fail!");
}
}
}
packagecom.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.entity.Student;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;importcom.util.Hibernate_Util;public class FindByIdSerlvet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//2.接受参数
Integer sid=Integer.valueOf(request.getParameter("sid"));//3.业务处理
StudentService service = newStudentServiceImpl();
Student stu=service.findById(sid);
System.out.println("stu:"+stu);if(stu!=null){
System.out.println("根据id查询到对象");
request.setAttribute("stu", stu);
request.getRequestDispatcher("update.jsp").forward(request, response);
}else{
System.out.println("没有根据id查询到对象");
}
}
}
packagecom.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.entity.Student;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;public class UpdateServlet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//2.接受参数
Integer sid=Integer.valueOf(request.getParameter("sid"));
String sname= request.getParameter("sname");
String password= request.getParameter("password");
String sex= request.getParameter("sex");
Integer cid=Integer.valueOf(request.getParameter("cid"));
Student stu=newStudent(sid,sname, password, sex, cid);//3.业务处理
StudentService service = newStudentServiceImpl();int num=service.update(stu);if(num>0){
System.out.println("update success!");
response.sendRedirect("FindAllServlet");
}else{
System.out.println("update fail!");
}
}
}
packagecom.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.entity.Student;importcom.service.StudentService;importcom.service.impl.StudentServiceImpl;public class DeleteSerlvet extendsHttpServlet {private static final long serialVersionUID = 1L;public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");//2.接受参数
Integer sid=Integer.valueOf(request.getParameter("sid"));//3.业务处理
StudentService service = newStudentServiceImpl();
Student stu=service.findById(sid);if (stu != null) {
System.out.println("根据id查询成功");int num=service.delete(stu);if(num>0){
System.out.println("delete success!!");//4.页面跳转
response.sendRedirect("FindAllServlet");
}else{
System.out.println("delete success!!");
}
}else{
System.out.println("根据id查询失败!");
}
}
}
14.配置web.xml
LoginServlet
com.servlet.LoginServlet
FindAllServlet
com.servlet.FindAllServlet
FindByIdSerlvet
com.servlet.FindByIdSerlvet
UpdateServlet
com.servlet.UpdateServlet
DeleteSerlvet
com.servlet.DeleteSerlvet
RegisterServlet
com.servlet.RegisterServlet
FindPageServlet
com.servlet.FindPageServlet
LoginServlet
/LoginServlet
FindAllServlet
/FindAllServlet
FindByIdSerlvet
/FindByIdSerlvet
UpdateServlet
/UpdateServlet
DeleteSerlvet
/DeleteSerlvet
RegisterServlet
/RegisterServlet
FindPageServlet
/FindPageServlet
login.jsp
15.首页
String basePath= request.getScheme() + "://"
+ request.getServerName() + ":" +request.getServerPort()+ path + "/";%>
My JSP 'index.jsp' starting page学生信息表
序号 | 姓名 | 性别 | 操作 |
${i.sid } | ${i.sname } | ${i.sex } |
16.登录页面
String basePath= request.getScheme() + "://"
+ request.getServerName() + ":" +request.getServerPort()+ path + "/";%>
My JSP 'index.jsp' starting page登录
用户名: | |
密码: | |
17.注册页面
String basePath= request.getScheme() + "://"
+ request.getServerName() + ":" +request.getServerPort()+ path + "/";%>
My JSP 'index.jsp' starting page注册
用户名: | |
密码: | |
性别: | 男女 |
班级编号: | TB07 TB13 TB24 TB31 |
18.修改
String basePath= request.getScheme() + "://"
+ request.getServerName() + ":" +request.getServerPort()+ path + "/";%>
My JSP 'index.jsp' starting page
修改
用户名: | |
密码: | |
性别: | 男女 男女 |
班级编号: | TB07 TB13 TB24 TB31 |
部分截图 2016-09-2415:21:19
注:希望各路大神多多指点!!!