热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

SpringMVC+JDBC:分页示例_MySQL

SpringMVC+JDBC
一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5
二 工程相关图片:


三 基本上参照之前示例修改得来,重点关注SimpleJdbcTemplate与JdbcTemplate用法
以下只列出比较重要的类
UserController.java

Java代码

  1. package com.liuzd.sj.web;
  2. import java.util.List;
  3. import javax.annotation.Resource;
  4. import javax.servlet.http.HttpServletRequest;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.SessionAttributes;
  9. import org.springframework.web.servlet.ModelAndView;
  10. import com.liuzd.page.Page;
  11. import com.liuzd.sj.entity.User;
  12. import com.liuzd.sj.service.UserService;
  13. @Controller
  14. @RequestMapping("/user")
  15. @SessionAttributes("userList")
  16. public class UserController extends BaseController{
  17. private UserService userService;
  18. public UserService getUserService() {
  19. return userService;
  20. }
  21. @Resource
  22. public void setUserService(UserService userService) {
  23. this.userService = userService;
  24. }
  25. @RequestMapping("/userList")
  26. public ModelAndView userList(HttpServletRequest request){
  27. StringBuilder querySql = new StringBuilder();
  28. querySql.append("select * from users where 1=1 ");
  29. String oracleQuerySql = querySql.toString();
  30. //获取总条数
  31. Long totalCount = new Long(this.getUserService().pageCounts(oracleQuerySql));
  32. //设置分页对象
  33. Page page = executePage(request,oracleQuerySql,totalCount," id desc ");
  34. ModelAndView mv = new ModelAndView();
  35. //查询集合
  36. List users = this.getUserService().pageList(page.getQuerySql());
  37. mv.addObject("userList",users);
  38. mv.setViewName("userList");
  39. return mv;
  40. }
  41. @RequestMapping("/addUser")
  42. public ModelAndView addUser(HttpServletRequest request,User user){
  43. System.out.println("ADD USER: "+ user);
  44. this.userService.addUser(user);
  45. return userList(request);
  46. }
  47. @RequestMapping("/toAddUser")
  48. public String toAddUser(){
  49. return "addUser";
  50. }
  51. @RequestMapping("/delUser/{id}")
  52. public ModelAndView delUser(@PathVariable("id") String id,HttpServletRequest request){
  53. this.userService.delUser(new User().setId(id));
  54. return userList(request);
  55. }
  56. @RequestMapping("/getUser/{id}")
  57. public ModelAndView getUser(@PathVariable("id") String id){
  58. User user = this.userService.getUserById(new User().setId(id));
  59. ModelAndView mv = new ModelAndView("updateUser");
  60. mv.addObject("user",user);
  61. return mv;
  62. }
  63. @RequestMapping("/updateUser")
  64. public ModelAndView editUser(User user,HttpServletRequest request){
  65. System.out.println("编辑: "+user);
  66. this.userService.editUser(user);
  67. return userList(request);
  68. }
  69. }


BaseController.java

Java代码

  1. package com.liuzd.sj.web;
  2. import javax.servlet.http.HttpServletRequest;
  3. import com.liuzd.page.Page;
  4. import com.liuzd.page.PageState;
  5. import com.liuzd.page.PageUtil;
  6. /**
  7. *Title:
  8. *Description:
  9. *Copyright: Copyright (c) 2011
  10. *Company:http://liuzidong.iteye.com/
  11. *Makedate:2011-5-23 下午03:31:03
  12. * @author liuzidong
  13. * @version 1.0
  14. * @since 1.0
  15. *
  16. */
  17. public class BaseController {
  18. /**
  19. * oracel的三层分页语句
  20. * 子类在展现数据前,进行分页计算!
  21. * @param querySql 查询的SQL语句,未进行分页
  22. * @param totalCount 根据查询SQL获取的总条数
  23. * @param columnNameDescOrAsc 列名+排序方式 : ID DESC or ASC
  24. */
  25. protected Page executePage(HttpServletRequest request,String querySql,Long totalCount,String columnNameDescOrAsc){
  26. String oracleSql = PageUtil.createQuerySql(querySql,columnNameDescOrAsc);
  27. if(null == totalCount){
  28. totalCount = 0L;
  29. }
  30. /**页面状态,这个状态是分页自带的,与业务无关*/
  31. String pageAction = request.getParameter("pageAction");
  32. String value = request.getParameter("pageKey");
  33. /**获取下标判断分页状态*/
  34. int index = PageState.getOrdinal(pageAction);
  35. Page page = null;
  36. /**
  37. * index <1 只有二种状态
  38. * 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1
  39. * 2 当页面设置每页显示多少条: index=0,当每页显示多少条时,分页类要重新计算
  40. * */
  41. Page sessiOnPage= getPage(request);
  42. if(index <1){
  43. page = PageUtil.inintPage(oracleSql,totalCount,index,value,sessionPage);
  44. }else{
  45. page = PageUtil.execPage(index,value,sessionPage);
  46. }
  47. setSession(request,page);
  48. return page;
  49. }
  50. private Page getPage(HttpServletRequest request) {
  51. Page page = (Page)request.getSession().getAttribute(PageUtil.SESSION_PAGE_KEY);
  52. if(page == null){
  53. page = new Page();
  54. }
  55. return page;
  56. }
  57. private void setSession(HttpServletRequest request,Page page) {
  58. request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page);
  59. }
  60. }


UserRowMapper.java

Java代码

  1. package com.liuzd.sj.dao;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import org.springframework.jdbc.core.RowMapper;
  5. import com.liuzd.sj.entity.User;
  6. public class UserRowMapper implements RowMapper {
  7. public UserRowMapper(){}
  8. public User mapRow(ResultSet rs, int index) throws SQLException {
  9. User user = new User(
  10. rs.getString("id"),
  11. rs.getString("name"),
  12. rs.getString("password"),
  13. rs.getString("address"),
  14. rs.getString("sex"),
  15. rs.getInt("age")
  16. );
  17. return user;
  18. }
  19. }


UserDAOImpl.java

Java代码

  1. package com.liuzd.sj.dao.impl;
  2. import java.sql.PreparedStatement;
  3. import java.sql.SQLException;
  4. import java.util.List;
  5. import javax.annotation.Resource;
  6. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  7. import org.springframework.jdbc.core.PreparedStatementSetter;
  8. import org.springframework.stereotype.Repository;
  9. import com.liuzd.sj.dao.UserDAO;
  10. import com.liuzd.sj.dao.UserRowMapper;
  11. import com.liuzd.sj.entity.User;
  12. @Repository("userDao")
  13. public class UserDAOImpl implements UserDAO
  14. {
  15. private static final String INSERT = "insert into users(id,name,age,sex,address,password)VALUES(?,?,?,?,?,?)";
  16. private static final String UPDATE = "update users set name=?,age=?,sex=?,address=?,password=? where id=?";
  17. private static final String GET = "select * from users where id=?";
  18. private static final String CHECK = "select count(1) from users where name=? and password=?";
  19. private static final String SELECT = "select * from users";
  20. private static final String DEL = "delete users where id=?";
  21. private org.springframework.jdbc.core.JdbcTemplate jdbcTemplate;
  22. public org.springframework.jdbc.core.JdbcTemplate getJdbcTemplate() {
  23. return jdbcTemplate;
  24. }
  25. @Resource
  26. public void setJdbcTemplate(
  27. org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) {
  28. this.jdbcTemplate = jdbcTemplate;
  29. }
  30. public void addUser(final User user) {
  31. getJdbcTemplate().update(INSERT, new PreparedStatementSetter(){
  32. public void setValues(PreparedStatement ps)
  33. throws SQLException {
  34. int i = 0;
  35. ps.setString(++i, user.getId());
  36. ps.setString(++i, user.getName());
  37. ps.setInt(++i, user.getAge());
  38. ps.setString(++i,user.getSex());
  39. ps.setString(++i,user.getAddress());
  40. ps.setString(++i,user.getPassword());
  41. }
  42. });
  43. }
  44. public int checkUserExits(User user) {
  45. return getJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword());
  46. }
  47. public void delUser(User user) {
  48. getJdbcTemplate().update(DEL, user.getId());
  49. }
  50. public void editUser(final User user) {
  51. getJdbcTemplate().update(UPDATE, new PreparedStatementSetter(){
  52. public void setValues(PreparedStatement ps)
  53. throws SQLException {
  54. int i = 0;
  55. ps.setString(++i, user.getName());
  56. ps.setInt(++i, user.getAge());
  57. ps.setString(++i,user.getSex());
  58. ps.setString(++i,user.getAddress());
  59. ps.setString(++i,user.getPassword());
  60. ps.setString(++i, user.getId());
  61. }
  62. });
  63. }
  64. public List getAllUser() {
  65. return getJdbcTemplate().query(SELECT, new BeanPropertyRowMapper(User.class));
  66. }
  67. public User getUserById(User user) {
  68. return getJdbcTemplate().queryForObject(GET, new UserRowMapper(),user.getId());
  69. }
  70. public int pageCounts(String querySql) {
  71. return getJdbcTemplate().queryForInt("select count(1) from("+querySql+")");
  72. }
  73. public List pageList(String querySql) {
  74. return getJdbcTemplate().query(querySql, new UserRowMapper());
  75. }
  76. }


UserDAOImpl2.java

Java代码

  1. package com.liuzd.sj.dao.impl;
  2. import java.util.List;
  3. import java.util.Map;
  4. import javax.annotation.Resource;
  5. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  6. import org.springframework.stereotype.Repository;
  7. import com.liuzd.sj.dao.UserDAO;
  8. import com.liuzd.sj.entity.User;
  9. import com.liuzd.util.BeanToMapUtil;
  10. @Repository("userDao2")
  11. public class UserDAOImpl2 implements UserDAO
  12. {
  13. private static final String INSERT = "insert into users(id,name,age,sex,address,password)VALUES(:id,:name,:age,:sex,:address,:password)";
  14. private static final String UPDATE = "update users set name=:name,age=:age,sex=:sex,address=:address,password=:password where id=:id";
  15. private static final String GET = "select * from users where id=?";
  16. private static final String CHECK = "select count(1) from users where name=? and password=?";
  17. private static final String SELECT = "select * from users";
  18. private static final String DEL = "delete users where id=?";
  19. private org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate;
  20. public org.springframework.jdbc.core.simple.SimpleJdbcTemplate getSimpleJdbcTemplate() {
  21. return simpleJdbcTemplate;
  22. }
  23. @Resource
  24. public void setSimpleJdbcTemplate(
  25. org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate) {
  26. this.simpleJdbcTemplate = simpleJdbcTemplate;
  27. }
  28. public void addUser(final User user) {
  29. Map userMap = BeanToMapUtil.beanToMap(user);
  30. getSimpleJdbcTemplate().update(INSERT, userMap);
  31. }
  32. public int checkUserExits(User user) {
  33. return getSimpleJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword());
  34. }
  35. public void delUser(User user) {
  36. getSimpleJdbcTemplate().update(DEL, user.getId());
  37. }
  38. public void editUser(final User user) {
  39. Map userMap = BeanToMapUtil.beanToMap(user);
  40. getSimpleJdbcTemplate().update(UPDATE, userMap);
  41. }
  42. public List getAllUser() {
  43. return getSimpleJdbcTemplate().query(SELECT, new BeanPropertyRowMapper(User.class));
  44. }
  45. public User getUserById(User user) {
  46. return getSimpleJdbcTemplate().queryForObject(GET, new BeanPropertyRowMapper(User.class),user.getId());
  47. }
  48. public int pageCounts(String querySql) {
  49. return getSimpleJdbcTemplate().queryForInt("select count(1) from("+querySql+")");
  50. }
  51. public List pageList(String querySql) {
  52. return getSimpleJdbcTemplate().query(querySql, new BeanPropertyRowMapper(User.class));
  53. }
  54. }

推荐阅读
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
author-avatar
猪猪情系qq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有