springMVC+JDBC:分页示例
文章来源:http://liuzidong.iteye.com/blog/1067492
一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5
二 工程相关图片:
三 基本上参照之前示例修改得来,重点关注SimpleJdbcTemplate与JdbcTemplate用法
以下只列出比较重要的类
UserController.java
Java代码
package com.liuzd.sj.web;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import com.liuzd.page.Page;
import com.liuzd.sj.entity.User;
import com.liuzd.sj.service.UserService;
@Controller
@RequestMapping("/user")
@SessionAttributes("userList")
public class UserController extends BaseController{
private UserService userService;
public UserService getUserService() {
return userService;
}
@Resource
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/userList")
public ModelAndView userList(HttpServletRequest request){
StringBuilder querySql = new StringBuilder();
querySql.append("select * from users where 1=1 ");
String oracleQuerySql = querySql.toString();
//获取总条数
Long totalCount = new Long(this.getUserService().pageCounts(oracleQuerySql));
//设置分页对象
Page page = executePage(request,oracleQuerySql,totalCount," id desc ");
ModelAndView mv = new ModelAndView();
//查询集合
List<User> users = this.getUserService().pageList(page.getQuerySql());
mv.addObject("userList",users);
mv.setViewName("userList");
return mv;
}
@RequestMapping("/addUser")
public ModelAndView addUser(HttpServletRequest request,User user){
System.out.println("ADD USER: "+ user);
this.userService.addUser(user);
return userList(request);
}
@RequestMapping("/toAddUser")
public String toAddUser(){
return "addUser";
}
@RequestMapping("/delUser/{id}")
public ModelAndView delUser(@PathVariable("id") String id,HttpServletRequest request){
this.userService.delUser(new User().setId(id));
return userList(request);
}
@RequestMapping("/getUser/{id}")
public ModelAndView getUser(@PathVariable("id") String id){
User user = this.userService.getUserById(new User().setId(id));
ModelAndView mv = new ModelAndView("updateUser");
mv.addObject("user",user);
return mv;
}
@RequestMapping("/updateUser")
public ModelAndView editUser(User user,HttpServletRequest request){
System.out.println("编辑: "+user);
this.userService.editUser(user);
return userList(request);
}
}
BaseController.java
Java代码
package com.liuzd.sj.web;
import javax.servlet.http.HttpServletRequest;
import com.liuzd.page.Page;
import com.liuzd.page.PageState;
import com.liuzd.page.PageUtil;
/**
*Title:
*Description:
*Copyright: Copyright (c) 2011
*Company:http://liuzidong.iteye.com/
*Makedate:2011-5-23 下午03:31:03
* @author liuzidong
* @version 1.0
* @since 1.0
*
*/
public class BaseController {
/**
* oracel的三层分页语句
* 子类在展现数据前,进行分页计算!
* @param querySql 查询的SQL语句,未进行分页
* @param totalCount 根据查询SQL获取的总条数
* @param columnNameDescOrAsc 列名+排序方式 : ID DESC or ASC
*/
protected Page executePage(HttpServletRequest request,String querySql,Long totalCount,String columnNameDescOrAsc){
String oracleSql = PageUtil.createQuerySql(querySql,columnNameDescOrAsc);
if(null == totalCount){
totalCount = 0L;
}
/**页面状态,这个状态是分页自带的,与业务无关*/
String pageAction = request.getParameter("pageAction");
String value = request.getParameter("pageKey");
/**获取下标判断分页状态*/
int index = PageState.getOrdinal(pageAction);
Page page = null;
/**
* index < 1 只有二种状态
* 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1
* 2 当页面设置每页显示多少条: index=0,当每页显示多少条时,分页类要重新计算
* */
Page sessionPage = getPage(request);
if(index < 1){
page = PageUtil.inintPage(oracleSql,totalCount,index,value,sessionPage);
}else{
page = PageUtil.execPage(index,value,sessionPage);
}
setSession(request,page);
return page;
}
private Page getPage(HttpServletRequest request) {
Page page = (Page)request.getSession().getAttribute(PageUtil.SESSION_PAGE_KEY);
if(page == null){
page = new Page();
}
return page;
}
private void setSession(HttpServletRequest request,Page page) {
request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page);
}
}
UserRowMapper.java
Java代码
package com.liuzd.sj.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.liuzd.sj.entity.User;
public class UserRowMapper implements RowMapper<User> {
public UserRowMapper(){}
public User mapRow(ResultSet rs, int index) throws SQLException {
User user = new User(
rs.getString("id"),
rs.getString("name"),
rs.getString("password"),
rs.getString("address"),
rs.getString("sex"),
rs.getInt("age")
);
return user;
}
}
UserDAOImpl.java
Java代码
package com.liuzd.sj.dao.impl;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.stereotype.Repository;
import com.liuzd.sj.dao.UserDAO;
import com.liuzd.sj.dao.UserRowMapper;
import com.liuzd.sj.entity.User;
@Repository("userDao")
public class UserDAOImpl implements UserDAO
{
private static final String INSERT = "insert into users(id,name,age,sex,address,password)VALUES(?,?,?,?,?,?)";
private static final String UPDATE = "update users set name=?,age=?,sex=?,address=?,password=? where id=?";
private static final String GET = "select * from users where id=?";
private static final String CHECK = "select count(1) from users where name=? and password=?";
private static final String SELECT = "select * from users";
private static final String DEL = "delete users where id=?";
private org.springframework.jdbc.core.JdbcTemplate jdbcTemplate;
public org.springframework.jdbc.core.JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
@Resource
public void setJdbcTemplate(
org.springframework.jdbc.core.JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void addUser(final User user) {
getJdbcTemplate().update(INSERT, new PreparedStatementSetter(){
public void setValues(PreparedStatement ps)
throws SQLException {
int i = 0;
ps.setString(++i, user.getId());
ps.setString(++i, user.getName());
ps.setInt(++i, user.getAge());
ps.setString(++i,user.getSex());
ps.setString(++i,user.getAddress());
ps.setString(++i,user.getPassword());
}
});
}
public int checkUserExits(User user) {
return getJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword());
}
public void delUser(User user) {
getJdbcTemplate().update(DEL, user.getId());
}
public void editUser(final User user) {
getJdbcTemplate().update(UPDATE, new PreparedStatementSetter(){
public void setValues(PreparedStatement ps)
throws SQLException {
int i = 0;
ps.setString(++i, user.getName());
ps.setInt(++i, user.getAge());
ps.setString(++i,user.getSex());
ps.setString(++i,user.getAddress());
ps.setString(++i,user.getPassword());
ps.setString(++i, user.getId());
}
});
}
public List<User> getAllUser() {
return getJdbcTemplate().query(SELECT, new BeanPropertyRowMapper<User>(User.class));
}
public User getUserById(User user) {
return getJdbcTemplate().queryForObject(GET, new UserRowMapper(),user.getId());
}
public int pageCounts(String querySql) {
return getJdbcTemplate().queryForInt("select count(1) from("+querySql+")");
}
public List<User> pageList(String querySql) {
return getJdbcTemplate().query(querySql, new UserRowMapper());
}
}
UserDAOImpl2.java
Java代码
package com.liuzd.sj.dao.impl;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Repository;
import com.liuzd.sj.dao.UserDAO;
import com.liuzd.sj.entity.User;
import com.liuzd.util.BeanToMapUtil;
@Repository("userDao2")
public class UserDAOImpl2 implements UserDAO
{
private static final String INSERT = "insert into users(id,name,age,sex,address,password)VALUES(:id,:name,:age,:sex,:address,:password)";
private static final String UPDATE = "update users set name=:name,age=:age,sex=:sex,address=:address,password=:password where id=:id";
private static final String GET = "select * from users where id=?";
private static final String CHECK = "select count(1) from users where name=? and password=?";
private static final String SELECT = "select * from users";
private static final String DEL = "delete users where id=?";
private org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate;
public org.springframework.jdbc.core.simple.SimpleJdbcTemplate getSimpleJdbcTemplate() {
return simpleJdbcTemplate;
}
@Resource
public void setSimpleJdbcTemplate(
org.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate) {
this.simpleJdbcTemplate = simpleJdbcTemplate;
}
public void addUser(final User user) {
Map<String,Object> userMap = BeanToMapUtil.beanToMap(user);
getSimpleJdbcTemplate().update(INSERT, userMap);
}
public int checkUserExits(User user) {
return getSimpleJdbcTemplate().queryForInt(CHECK, user.getName(),user.getPassword());
}
public void delUser(User user) {
getSimpleJdbcTemplate().update(DEL, user.getId());
}
public void editUser(final User user) {
Map<String,Object> userMap = BeanToMapUtil.beanToMap(user);
getSimpleJdbcTemplate().update(UPDATE, userMap);
}
public List<User> getAllUser() {
return getSimpleJdbcTemplate().query(SELECT, new BeanPropertyRowMapper<User>(User.class));
}
public User getUserById(User user) {
return getSimpleJdbcTemplate().queryForObject(GET, new BeanPropertyRowMapper<User>(User.class),user.getId());
}
public int pageCounts(String querySql) {
return getSimpleJdbcTemplate().queryForInt("select count(1) from("+querySql+")");
}
public List<User> pageList(String querySql) {
return getSimpleJdbcTemplate().query(querySql, new BeanPropertyRowMapper<User>(User.class));
}
}
springmvc.xml
Java代码
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!--
自动搜索@Controller标注的类
用于指明系统从哪个路径下寻找controller,然后提前初始化这些对象。
-->
<context:component-scan base-package="com.liuzd.sj.web" />
<!-- ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
</beans>
userList.jsp
Java代码
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ include file="/common/meta.jsp"%>
</head>
<body>
<table width="60%" border="1" cellpadding="0" align="center">
<thead>
<tr>
<th style="cursor: hand;" title="按姓名进行排序" onclick="sortPage('name')" valign="top">
姓名<font color='red'>${page.sortName eq "name" ? page.sortInfo : page.defaultInfo}</font>
</th>
<th style="cursor: hand;" title="按年龄进行排序" onclick="sortPage('age')" valign="top">
年龄<font color='red'>${page.sortName eq "age" ? page.sortInfo : page.defaultInfo}</font>
</th>
<th style="cursor: hand;" title="按性别进行排序" onclick="sortPage('sex')" valign="top">
性别<font color='red'>${page.sortName eq "sex" ? page.sortInfo : page.defaultInfo}</font>
</th>
<th style="cursor: hand;" title="按地址进行排序" onclick="sortPage('address')" valign="top">
地址<font color='red'>${page.sortName eq "address" ? page.sortInfo : page.defaultInfo}</font>
</th>
<th style="cursor: hand;" >
操作
</th>
</tr>
</thead>
<tbody>
<c:forEach items="${userList}" var="user">
<tr align="center">
<td>
${user.name}
</td>
<td>
${user.age}
</td>
<td>
${user.sex eq 1 ? "男" : user.sex eq 2 ? "女" : "未知"}
</td>
<td>
${user.address}
</td>
<td>
<a
href="${pageContext.request.contextPath}/user/toAddUser.do">添加</a>
|
<a
href="${pageContext.request.contextPath}/user/getUser/${user.id}.do">编辑</a>
|
<a
href="${pageContext.request.contextPath}/user/delUser/${user.id}.do">删除</a>
</td>
</tr>
</c:forEach>
<jsp:include page="/page/page.jsp">
<jsp:param name="url" value="user/userList.do" />
</jsp:include>
</tbody>
</table>
<br>
<a href="${pageContext.request.contextPath}/index.jsp">返回</a><br>
</body>
</html>
springMVC+JDBC:分页示例的更多相关文章
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试
包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...
- jdbc分页
分页是一个被讲到烂掉的话题,今天我再拾起来踹几脚吧 (Hibernate的分页做得很好很强大,用的人都知道 ,这个就不用再说了) 1.为什么要分页? 首先是数据量太大会影响查询和传输的性能,关键 ...
- JDBC + MySQL 示例
jdbc mysql connection 教程 翻译自:JDBC MySQL Connection Tutorial Java Database Connectivity (JDBC) 是一个基于J ...
- SQL Server 2012 OFFSET/FETCH NEXT分页示例(转载)
原文:http://beyondrelational.com/modules/29/presentations/483/scripts/12983/sql-server-2012-server-sid ...
- Mybatis+SpringMVC实现分页查询(附源码)
Maven+Mybatis+Spring+SpringMVC实现分页查询(附源码) 一.项目搭建 关于项目搭建,小宝鸽以前写过一篇Spirng+SpringMVC+Maven+Mybatis+MySQ ...
- springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...
- springmvc 项目完整示例03 小结
利用spring 创建一个web项目 大致原理 利用spring的ioc 原理,例子中也就是体现在了配置文件中 设置了自动扫描注解 配置了数据库信息等 一般一个项目,主要有domain,dao,ser ...
- springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql语句 mybatis应用
百度百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBat ...
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n ---internationalization 不就是i和n之间有18个字母... http://logging.a ...
随机推荐
- js转化文章发布于几天几小时几分钟前
alert(dateFormat('2020-07-08 11:32:44')); function dateFormat(d1) { var dateEnd = new Date();//获取当前时 ...
- .NET Core开发实战(第18课:日志框架:聊聊记日志的最佳姿势)--学习笔记(下)
18 | 日志框架:聊聊记日志的最佳姿势 除了使用 CreateLogger 指定 logger 的名称,实际上还可以借助容器来构造 logger,通常情况下我们会定义自己的类 namespace L ...
- Matplotlib绘制散点图与条形图
Matplotlib绘制散点图与条形图 绘制散点图 # 绘制散点图 from matplotlib import pyplot as plt from matplotlib import font_m ...
- JS Leetcode 26. 删除有序数组中的重复项 题解分析,字典与快慢双指针
壹 ❀ 引 本题来自LeetCode26. 删除有序数组中的重复项,是一道简单题,题目描述如下: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组 ...
- JS Leetcode 80. 删除有序数组中的重复项 II题解,常规解法与快慢双指针做法
壹 ❀ 引 今天的题目来自LeetCode80. 删除有序数组中的重复项 II,是一道难度中等,但实际挺简单的一道题,题目描述如下: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每 ...
- Linux中出现Perf: interrupt took too long
问题原因: perf: interrupt took too long_雪虎-JL的博客-CSDN博客 解决方法: perf: interrupt took too long (3136 > 3 ...
- SSD接口与协议
该图来源于<Linux开源存储全栈详解:从Ceph到容器存储>- 2.3 存储接口协议的演变 物理接口: 从物理形态上确定各种不同的接口(引脚形式等完全不同) 传输协议: 以SATA为例, ...
- Linux进程通信 | 管道与FIFO
Linux进程间通信通常使用的方式有很多种,其中比较常用的包括管道(pipe)和 FIFO(命名管道).本文将介绍这两种通信方式的基本概念,并用C语言编写示例代码,来说明如何在两个进程之间使用这些IP ...
- 用 WebClient 代替 RestTemplate
RestTemplate是用于执行 HTTP 请求的同步客户端,通过底层 HTTP 客户端库(例如 JDK HttpURLConnection.Apache HttpComponents 等)公开一个 ...
- Freaktab将于12月底关闭
出过众多优秀固件的电视盒子论坛Freaktab, 将于2021年12月31日关闭 R.I.P