java hibernate 分页取数_Hibernate全套增删改查+分页

1.创建一个web工程

2.导入jar包

aca8a8828d8f41f5e969307f7ed9bad7.png

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 }

添加

  修改

  删除

第${page.pageno}/${page.totalpage}页    首页

上一页

上一页

下一页

下一页

末页

共${page.totalcount}条

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

注:希望各路大神多多指点!!!

54e4dd828e9514a7759b7505f72e0050.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值