`

SpringMVC+JDBC:分页示例

阅读更多
一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5
二 工程相关图片:


三 基本上参照之前示例修改得来,重点关注SimpleJdbcTemplate与JdbcTemplate用法
以下只列出比较重要的类
UserController.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
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
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
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
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
<?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
<%@ 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>

另外page.jsp与page.jar可在附件中下载
  • 大小: 54.2 KB
  • 大小: 28.9 KB
分享到:
评论
7 楼 dragon888 2016-05-01  
伙计lib下所的有jar包故意删除了吗?
6 楼 windersehen 2015-08-17  
pager.jar的page中好像没executePage,调用报错。
工程检出页面全部报错,无法使用。
综上,没法用。
5 楼 ironfanprince 2014-05-22  
动手试了一下,除了有个别的小问题外,完全可用。大家应该表示感谢才对!谢谢!
4 楼 shiguanghui 2014-05-09  
这种垃圾文章,不转也罢。

写这样的东西,纯粹是浪费大家时间。真烂!
3 楼 Sawyer36 2012-06-04  
项目导入到eclipse中,所有的jar包都已经加上,但是所有的jsp界面都有错误,这是什么情况,求指教?
2 楼 liuzidong 2012-06-02  
1 你可以用jd.exe反编译jar就可得到源码
2 这个分布是针对oracle作的分页,你修改下sql语句就行了,在mysql中分页是:limit 0,10这样!你试下吧!
1 楼 fusm1008 2012-06-01  
求解!我把这个应用移植到mysql数据库,报错:
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [SELECT TTT.* FROM(SELECT TT.*,ROWNUM RN FROM( USERS WHERE 1=1 ORDER BY  ID DESC  )TT)TTT  WHERE RN>0 AND RN<=10]; nested exception is com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE 1=1 ORDER BY  ID DESC  )TT)TTT  WHERE RN>0 AND RN<=10' at line 1
**************
可以传给我个page.jar的java源码吗?

相关推荐

    spring+springmvc+mybatis+jsp分页插件

    本项目"spring+springmvc+mybatis+jsp分页插件"正是为了解决这个问题而设计的。下面我们将详细探讨这个项目的各个组成部分及其工作原理。 首先,Spring是一个开源的Java框架,它提供了全面的编程和配置模型,简化了...

    SpringMVC3.0+MyIbatis3.0(分页示例)

    标题 "SpringMVC3.0+MyIbatis3.0(分页示例)" 提到的是一个集成SpringMVC和MyBatis的项目,并且包含了分页功能的实现。这通常意味着我们要探讨的是如何在Java Web开发环境中整合这两个流行的框架,并实现数据的分页...

    SpringMVC3 + SpringJDBC整合 源码。

    总的来说,这个SpringMVC3 + SpringJDBC的案例项目提供了一个全面的实战示例,涵盖了Web开发中的关键部分。通过学习和实践这个案例,开发者可以深入理解SpringMVC和SpringJDBC的整合应用,以及如何在实际项目中实现...

    2017最新SpringMVC+Spring+Mybatis

    分页插件PageHelper则是Mybatis的扩展,它提供了强大的分页功能,只需简单配置,即可实现物理分页或逻辑分页。PageHelper的使用使得在查询大量数据时,既能满足用户体验,又避免了一次性加载大量数据对服务器造成...

    springmvc+mybatis+maven登陆、增删改查、分页实例-初学者必选(含数据库) zip文件

    这是一个基于SpringMVC、MyBatis和Maven的Web应用程序示例,专为初学者设计,旨在帮助他们理解和掌握这三大框架的集成与应用。这个项目涵盖了登录功能、基本的CRUD操作(创建、读取、更新、删除)以及分页处理。下面...

    SpringBoot+springMvc +mybatis+shiro安全架构的二手车项目代码,外加分页CSS+html+js

    这是一套完整的后端与前端结合的项目,旨在提供一个安全、高效的二手车交易平台开发示例。 首先,SpringBoot是Spring框架的一种轻量级实现,它简化了Spring应用程序的初始搭建以及开发过程。SpringBoot的特点在于...

    javaee-SpringMVC-Mybatis 分页插件

    本项目“javaee-SpringMVC-Mybatis 分页插件”显然是一个结合了这三个框架实现的分页功能示例。下面我们将深入探讨这些技术及其分页插件的应用。 1. **JavaEE**:JavaEE(Java Platform, Enterprise Edition)是...

    springMvc+mybatis(查询用户信息)Demo5

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 三、...

    传智播客_Springmvc+Mybatis由浅入深配套代码

    MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程,可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。...

    Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例

    本文的知识点涵盖了如何使用Spring Data JPA、SpringMVC和Jquery.pagination.js这三个技术栈组合实现数据的分页功能。接下来,将详细介绍这些技术的使用方法和优势,并结合示例代码来具体说明如何将这些技术集成在...

    springMVC(4.0)+MyBatis

    在SpringMVC中,控制器接收分页参数,如当前页和每页记录数,然后传递给服务层,最后由MyBatis执行相应的分页SQL并返回结果。 **事务管理** 事务管理是企业级应用中的重要组成部分,确保数据的一致性和完整性。...

    ssm框架-mysql的简单分页

    最后,`sql.rar`可能包含了创建表和插入示例数据的SQL脚本,而`mytest6`可能是项目中的一个测试类或者模块,用于验证分页功能的正确性。 总结起来,本项目是一个基本的SSM框架实践,通过结合Spring、SpringMVC和...

    ssm分页增删改查

    这个"ssm分页增删改查"的项目,旨在为新手和初学者提供一个基础的示例,帮助他们理解和掌握在实际应用中如何实现数据的分页查询、增加、删除和修改操作。 1. **Spring框架**:Spring作为核心容器,管理着应用中的...

    可以直接运行的基于SpringMVC的web框架示例,也可以直接当公司框架

    socket工具类,权限组件,菜单组件,jdbc分页支持多种数据库,ant路径工具类,增加jquery easyUI 1.0.9 版本管理,服务根路径工具类,文件上传工具类 1.0.10 集成ueditor在线编辑器 1.0.11 地址联动 1.0.12 Excel工具类 ...

    ssm+easyUI整合案列

    3. **MyBatis**:MyBatis是一个持久层框架,它允许开发者编写SQL语句并将其映射到Java接口上,消除了几乎所有的JDBC代码和手动设置参数。在SSM中,MyBatis作为数据访问层,负责与数据库交互。 4. **EasyUI**:...

    013-MyBatis分页插件-PageHelper1

    **引入依赖**:确保引入了MyBatis、SpringMVC、MyBatis-Spring、BoneCP连接池、MySQL驱动以及Spring JDBC的依赖。 B. **编写DAO层**:创建一个用于查询学生的Mapper接口,例如`StudentMapper`,并定义对应的XML...

    ssm增删改查代码

    这个项目的代码示例可以帮助初学者理解SSM框架的实际应用,特别是如何结合PageHelper实现分页查询,以及如何使用Ajax进行前后端交互。通过学习和实践这个项目,开发者可以进一步提升在Java web开发中的技能。

Global site tag (gtag.js) - Google Analytics