分页查询--SpringMVC+JDBC 2
- 格式:doc
- 大小:246.50 KB
- 文档页数:16
jdbcpagingitemreader setpramatervalue用法-回复"jdbcpagingitemreader setparametervalue用法"指的是在JDBC分页读取器(JdbcPagingItemReader)中使用setParametervalue方法来设置参数值。
该方法的主要目的是在查询数据库时,向SQL语句中的预定义参数传递值。
本文将详细介绍jdbcpagingitemreader setparametervalue用法以及其步骤。
1. 了解JDBC分页读取器(JdbcPagingItemReader)JDBC分页读取器是Spring Batch框架中的一个重要组件,用于从关系型数据库中分页读取数据。
它可以优化大数据量的查询操作,并提供了简单易用的接口。
2. 导入所需的依赖项在使用JDBC分页读取器之前,需要在项目的构建文件(如Maven或Gradle)中添加相应的依赖项。
确保导入了`spring-boot-starter-batch`和适当版本的数据库驱动程序依赖项(如`mysql-connector-java`)。
3. 创建数据源配置在使用JDBC分页读取器之前,需要先配置数据源。
可以通过Spring Boot的自动化配置来实现,或者手动创建一个依赖于数据库类型的数据源。
4. 创建JdbcPagingItemReader对象在代码中创建JdbcPagingItemReader对象,以便在查询时使用参数值。
这可以通过以下步骤实现:- 设置数据源:通过setDataSource()方法将数据源对象传递给JdbcPagingItemReader对象。
- 设置查询语句:通过setSql()方法将要执行的SQL语句传递给JdbcPagingItemReader对象。
- 设置分页参数:通过setPageSize()方法设置每页返回的记录数。
- 设置参数值:通过调用setParameterValues()方法来设置参数值。
一种支持多条件过滤查询的分页组件设计与实现作者:祝衍军来源:《电脑知识与技术》2014年第03期摘要:常见的分页组件存在一些不足,针对多条件组合过滤的分页查询业务场景提出了改进方案,在实现分页查询封装的同时给业务开发者提供足够的开发灵活性,并在Spring MVC 开发框架的基础上实现了该分页组件,在视图层使用JQuery实现了一个与后台开发框架完全分离的分页页面组件,在后台使用泛型和桥接模式实现了分页查询的封装。
应用结果表明该组件能够满足日常开发中的所有应用场景,且具有较好的移植性和稳定性。
关键词:分页组件;查询优化;分页框架;Spring框架中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)03-0514-06在企业级应用开发中,对业务实体信息的多条件组合过滤查询是基本功能之一。
针对客户的查询要求,服务器可以一次性将符合条件的所有数据推送给客户端,但这种方式只适合返回少量数据集的情况。
针对大型和超大型数据集,服务器必须采用分页的方式将符合要求的数据以分页的方式推送给客户端。
文献[1]提出了一种基于MVC的分页组件,但对应的查询语句写死在分页抽象类中,这就导致了该分页组件没办法满足多条件组合过滤查询和对结果集按照特定属性进行排序等应用场景。
文献[2]使用泛型DAO实现了支持多条件组合查询和对结果集进行排序的分页组件,但是实现方法是将查询过滤条件和排序字段以键值对的方式存放在Map 中,这就要求业务开发者在处理分页查询时需要进行二次加工,将过滤条件或者排序条件按照预定好的方式组成键值对推入到预定义好的Map变量中,这种方式将界面查询元素和分页查询处理代码进行了紧耦合,不但增加了程序调试和维护的难度,且增加了业务开发者的工作量。
另外上述两种方法也都是针对单个对象的分页查询应用,对多个对象间关联查询的应用场景支持不了,而在实际企业应用中,这种多表关联查询的分页查询业务场景非常多,且分页的多个查询条件通常是动态组合的。
mvc pagedlistpager 参数MVC中的PagedListPager是一个用于分页显示数据的类,它可以帮助我们更好地管理大量数据。
在MVC应用程序中使用PagedListPager 时,需要传递一些参数以实现分页功能。
以下是一些常见的PagedListPager参数:1. CurrentPage:当前页码,用于指定要显示的页数。
例如,如果当前页码为2,则显示第2页的数据。
2. PageSize:每页显示的记录数。
通过设置PageSize,我们可以控制每页显示的数据量。
3. TotalRecords:总记录数。
这个参数表示数据表中的总记录数,以便PagedListPager能够正确地计算分页信息。
4. SortExpression:排序字段。
用于指定对数据进行排序的字段。
例如,如果我们需要按照“名称”字段进行升序排序,可以设置SortExpression 为“名称”。
5. SortDirection:排序方向。
取值为Ascending(升序)或Descending (降序)。
用于指定排序字段的顺序。
6. FilterExpression:过滤表达式。
用于筛选数据。
例如,如果我们需要筛选出“状态”为“激活”的记录,可以设置FilterExpression为“状态='激活'”。
7. Query:查询语句。
用于获取指定条件的数据。
这个参数可以根据需要自定义查询语句。
8. DataSource:数据源。
用于指定数据来源。
通常为Entity Framework 或其他数据访问库。
在MVC应用程序中使用PagedListPager时,需要根据实际需求设置这些参数,以便正确地分页显示数据。
以下是一个简单的示例:```csharppublic ActionResult Index(){int currentPage = Request.QueryString["currentPage"];int pageSize = Request.QueryString["pageSize"];string sortExpression = Request.QueryString["sortExpression"];string filterExpression = Request.QueryString["filterExpression"];// 初始化数据源IQueryable<MyEntity> dataSource = new MyEntityRepository().GetEntities();// 根据参数设置分页和排序var pagedData = dataSource.OrderBy(sortExpression, SortDirection.Ascending).Where(filterExpression).ToPagedList(currentPage, pageSize);// 返回视图return View(pagedData);}```在视图中,我们可以使用以下代码显示分页控件和数据:```html@using Microsoft.AspNetCore.Mvc.Rendering@model IEnumerable<MyEntity><table>@foreach (var item in Model){<tr><td>@</td><!--的其他字段--></tr>}</table>@Html.PagedListPager(Model, pageSize: 10, currentPage: 2)```以上代码示例中,我们使用了ToPagedList方法将数据源转换为分页数据,并设置了分页控件。
jdbctemplate查询语法JdbcTemplate是Spring Framework中提供的一个方便的JDBC 操作工具,可以简化数据库操作。
以下是JdbcTemplate的查询语法示例:1. 查询单行记录:```String sql = "SELECT * FROM users WHERE id = ?";User user = jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));```2. 查询多行记录:```String sql = "SELECT * FROM users";List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));```3. 查询某列的值:```String sql = "SELECT name FROM users WHERE id = ?";String name = jdbcTemplate.queryForObject(sql, new Object[]{id}, String.class);```4. 带条件查询:```String sql = "SELECT * FROM users WHERE age > ?";List<User> userList = jdbcTemplate.query(sql, new Object[]{age}, new BeanPropertyRowMapper<>(User.class));```5. 分页查询:```int pageNo = 1;int pageSize = 10;String sql = "SELECT * FROM users LIMIT ? OFFSET ?";List<User> userList = jdbcTemplate.query(sql, newObject[]{pageSize, (pageNo-1)*pageSize}, new BeanPropertyRowMapper<>(User.class));```上述示例中,`User`表示实体类,`users`表示数据库表名,`id`、`name`、`age`表示表中的列名。
谈谈你对mvc的理解MVC是Model—View—Controler的简称。
即模型—视图—控制器。
MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不同的任务。
视图: 视图是用户看到并与之交互的界面。
视图向用户显示相关的数据,并接受用户的输入。
视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。
相当于JavaBean。
一个模型能为多个视图提供数据。
这提高了应用程序的重用性控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。
然后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。
控制器调用相应的视图来显示处理的结果。
并通过视图呈现给用户。
项目中为什么使用SSH1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。
2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。
hibernate 是个轻量级的持久性框架,功能丰富。
3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等struts如何实现国际化以下以两国语言(中文,英文)为例:1. 在工程中加入Struts支持2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如: lable.welcome.china=Welcome!!!3. 创建英文资源文件ApplicationResource_en.properites4. 创建临时中文资源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中国欢迎您!5. 对临时中文资源文件进行编码转换。
reactivecrudrepository 分页-回复什么是ReactiveCrudRepository 分页?ReactiveCrudRepository 分页是Spring Data框架中的一个功能,用于在响应式编程的环境中对数据库进行分页查询。
它提供了方法来获取指定页数和大小的数据片段,以便在响应式应用程序中进行处理和展示。
为什么需要分页?在实际的应用中,数据库通常存储了大量的数据。
当需要从数据库中获取数据时,一次性获取所有数据可能会导致性能问题和内存消耗。
因此,将数据分为小块进行逐页获取是一种常见的做法,这样可以更好地控制数据的加载和显示。
如何使用ReactiveCrudRepository 分页?要使用ReactiveCrudRepository 分页,首先需要定义一个继承自ReactiveCrudRepository接口的自定义接口。
在自定义接口中,可以定义具体的查询方法,并指定所需的分页参数。
接下来,可以在应用程序中注入或自动装配这个自定义接口,并使用这些方法来执行分页查询。
1. 定义自定义接口javaimport org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;org.springframework.data.repository.reactive.ReactiveCrudReposit ory;public interface UserRepository extends ReactiveCrudRepository<User, Long> {Mono<Page<User>> findAllByAgeGreaterThan(int age, Pageable pageable);}2. 注入自定义接口javaServicepublic class UserService {private final UserRepository userRepository;public UserService(UserRepository userRepository) {erRepository = userRepository;}public Mono<Page<User>> getOlderUsers(int age, int page,PageRequest pageRequest = PageRequest.of(page, size);return userRepository.findAllByAgeGreaterThan(age, pageRequest);}}3. 使用分页查询javaRestControllerpublic class UserController {private final UserService userService;public UserController(UserService userService) {erService = userService;}GetMapping("/older-users")public Mono<Page<User>> getOlderUsers(RequestParam int age, RequestParam int page, RequestParam int size) {return userService.getOlderUsers(age, page, size);}}在上述示例中,我们定义了一个UserRepository接口,并添加了一个方法来获取大于指定年龄的用户。
SpringDataJpa使⽤原⽣sql(EntityManager)动态拼接,分页查询SpringDataJpaSpring Data JPA是较⼤的Spring Data系列的⼀部分,可轻松实现基于JPA的存储库。
该模块处理对基于JPA的数据访问层的增强⽀持。
它使构建使⽤数据访问技术的Spring⽀持的应⽤程序变得更加容易。
实现应⽤程序的数据访问层已经很长⼀段时间了。
为了执⾏简单查询以及执⾏分页和审核,必须编写太多样板代码。
Spring Data JPA旨在通过将⼯作量减少到实际需要的数量来显着改善数据访问层的实现。
作为开发⼈员,您将编写包括⾃定义finder⽅法在内的存储库接⼝,Spring会⾃动提供实现。
使⽤EntityManager 来创建原⽣查询语句在service层的代码:@PersistenceContextEntityManager entityManager;@Overridepublic Object findMeetingSignRecoredPage(Long meetingId, Integer pageIndex, Integer pageSize) {MeenoAssert.notNull(meetingId, ErrEnum.MEETING_ID_IS_EMPTY);Meeting meeting = this.meetingRepository.getOne(meetingId);MeenoAssert.notNull(meeting,ErrEnum.MEETING_IS_NOT_EXIST);Pageable pageable = PageUtils.getPageable(pageIndex,pageSize);StringBuilder sql = new StringBuilder();sql.append(" select ,MAX(r.sign) from mnt_emp_rel_meeting as e ");sql.append(" left join mnt_sign_record as r on(r.employee_id=e.employee_id) ");sql.append(" left join mnt_employee as ep on(ep.id = e.employee_id) ");sql.append(" where e.meeting_id = ? ");sql.append(" order by r.sign desc,r.create_date asc ");Query query = entityManager.createNativeQuery(sql.toString());query.setFirstResult(pageable.getOffset());query.setMaxResults(pageable.getPageSize());query.setParameter(1,meetingId);List<Object[]> list = query.getResultList();List<SignRecordView> listView = Lists.newArrayList();if(list != null && !list.isEmpty()){for (Object[] objects : list) {String empName = objects[0]==null?null:objects[0].toString();Integer sign = objects[1]==null?Constants.SIGN_RECORD_NO:Integer.parseInt(objects[1].toString());SignRecordView view = new SignRecordView();view.setEmployeeName(empName);view.setSign(sign);listView.add(view);}}//countStringBuilder countSql = new StringBuilder();countSql.append(" select count(distinct e.id) from mnt_emp_rel_meeting as e ");countSql.append(" left join mnt_sign_record as r on(r.employee_id=e.employee_id) ");countSql.append(" left join mnt_employee as ep on(ep.id = e.employee_id) ");countSql.append(" where e.meeting_id = ? ");countSql.append(" order by r.sign desc,r.create_date asc ");Query countQuery = entityManager.createNativeQuery(countSql.toString());countQuery.setParameter(1,meetingId);Object singleResult = countQuery.getResultList().get(0);Integer count = singleResult==null?0:Integer.valueOf(singleResult.toString());Map<String, Object> resultPage = PageUtils.getResultPage(count, listView);return resultPage;}PageUtils⼯具类代码如下:package com.meeno.framework.page.utils;import mon.collect.Lists;import mon.collect.Maps;import lombok.Data;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Pageable;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Map;/*** @description: 分页⼯具类* @author: Wzq* @create: 2019-12-26 20:19*/@Datapublic class PageUtils {/***@Description 获取集合分页对象*@Param [list, pageIndex, pageSize]*@Return void*@Author Wzq*@Date 2020/1/6*@Time 14:07*/public static <T> Map<String,Object> getCollectionPage(List<T> list, Pageable pageable){ if(list==null||list.isEmpty()){return PageUtils.getResultPage(0,null );}int offset = pageable.getOffset();int pageSize = pageable.getPageSize();List<T> listView = Lists.newArrayList();if(list!=null && !list.isEmpty()){if(list.size() < offset){return PageUtils.getResultPage(0,null );}for(;list.size() > offset && pageSize != 0 ; offset++,pageSize--){listView.add(list.get(offset));}return PageUtils.getResultPage(list.size(),listView);}return PageUtils.getResultPage(0,null );}/***@Description 根据pageIndex和pageSize获取Pageable*@Param [pageIndex, pageSize]*@Return org.springframework.data.domain.Pageable*@Author Wzq*@Date 2019/12/27*@Time 11:12*/public static Pageable getPageable(Integer pageIndex, Integer pageSize){if(pageIndex==null){pageIndex = 0;}else{pageIndex--;}if(pageSize==null){pageSize = 10;}PageRequest pageRequest = new PageRequest(pageIndex, pageSize);return pageRequest;}/***@Description 获取分页返回对象*@Param [totalCount, list]*@Return java.util.Map<ng.String,ng.Object>*@Author Wzq*@Date 2019/12/26*@Time 20:22*/public static Map<String,Object> getResultPage(Page<?> page, List<?> list){ Map<String,Object> resultPageMap = Maps.newHashMap();resultPageMap.put("totalCount",page.getTotalElements());resultPageMap.put("list",list);return resultPageMap;}public static Map<String,Object> getResultPage(Integer count, List<?> list){ Map<String,Object> resultPageMap = Maps.newHashMap();resultPageMap.put("totalCount",count);resultPageMap.put("list",list);return resultPageMap;}}。
分页查询案例——前台页⾯(Index.aspx)<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Shite.Master" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.PagedList<HouseSys.Models.HouseModel> >" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">⾸页</asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"><DIV id=navbar class=wrap><DL class="search clearfix"><FORM id=sform method=post action=search.action><DT><UL><LI class=bold>房屋信息</LI><LI>标题:<INPUT class=text type=text name=title> <LABEL class=ui-blue><INPUT onclick=doSearch() value=搜索房屋 type=button name=search></LABEL></LI></UL></DT><DD><UL><LI class=first>价格 </LI><LI><SELECT name=price> <OPTION selected value="">不限</OPTION> <OPTIONvalue=0-100>100元以下</OPTION> <OPTION value=100-200>100元—200元</OPTION><OPTION value=200-1000000>200元以上</OPTION></SELECT> </LI></UL></DD><DD><UL><LI class=first>房屋位置</LI><LI><%--《SELECT id=street name=street_id> <OPTION selectedvalue="">不限</OPTION> <OPTION value=1000>知春路</OPTION> <OPTIONvalue=1001>中关村⼤街</OPTION> <OPTION value=1002>学院路</OPTION> <OPTIONvalue=1003>朝阳路</OPTION></SELECT> --%><%=Html.DropDownList("street",(SelectList)ViewData["selectStree"],"不限")%></LI></UL></DD><DD><UL><LI class=first>房型</LI><LI><%-- <SELECT name=type_id> <OPTION selected value="">不限</OPTION> <OPTIONvalue=1000>⼀室⼀厅</OPTION> <OPTION value=1001>⼀室两厅</OPTION> <OPTIONvalue=1002>两室⼀厅</OPTION> <OPTION value=1003>两室两厅</OPTION></SELECT> --%><%=Html.DropDownList("type",(SelectList)ViewData["selectType"],"不限")%></LI></UL></DD><DD><UL><LI class=first>⾯积 </LI><LI><SELECT name=floorage> <OPTION selected value="">不限</OPTION> <OPTIONvalue=0-40>40以下</OPTION> <OPTION value=40-500>40-500</OPTION> <OPTIONvalue=500-1000000>500以上</OPTION></SELECT> </LI></UL></DD><LABEL class="ui-green searchs"><a href="fabu.htm" title="">查询</a></LABEL></FORM></DL></DIV><DIV class="main wrap"><TABLE class=house-list><TBODY><%foreach(var house in Model){%><TR><TD class=house-thumb><span><A href="details.htm" target="_blank"><img src="../images/thumb_house.gif" width="100" height="75" alt=""></a></span></TD><TD><DL><DT><A href="details.htm" target="_blank"><%=house.Title %></A></DT><DD><%= %><BR>联系⽅式:<%=house.Contract %></DD></DL></TD><TD class=house-type><%= %></TD><TD class=house-price><SPAN><%=house.Price %></SPAN>元/⽉</TD></TR><%}%></TBODY></TABLE><DIV class=pager><%=Html.Pager<HouseSys.Models.HouseModel>(Model) %></DIV></asp:Content>。
ssm总结SSM(Spring+SpringMVC+MyBatis)框架是一种企业级Java 开发框架,集成了Spring、SpringMVC和MyBatis三个主要组件,它们分别负责业务逻辑、Web请求处理和数据库操作。
SSM框架的诞生解决了传统Java开发中繁琐的配置和低效的开发方式,提供了一种更加便捷和高效的开发模式。
首先,SSM框架的核心组件之一是Spring框架。
Spring框架是Java应用程序开发中最常用的开发框架之一,它提供了面向切面编程(AOP)和控制反转(IOC)等强大的功能。
通过使用Spring框架,开发人员可以更好地解耦应用程序的各个模块,并且可以通过注解方式来声明依赖关系,简化了编码过程。
此外,Spring还提供了一系列的企业级开发功能,如事务管理、远程调用、(RMI、Hessian、Burlap、HTTP Invoker 等)、消息队列(JMS)、定时任务(Quartz)、缓存(EHCache、Redis)等。
其次,SSM框架的另一个核心组件是SpringMVC。
SpringMVC是基于MVC(Model-View-Controller)设计模式的Web框架。
它提供了一个强大的分离和组织应用程序逻辑的方式,使得开发人员可以更好地分工合作,并且可以将不同的模块独立开发、测试和维护。
SpringMVC还提供了一系列的Web开发功能,如表单处理、数据校验、文件上传、JSON/XML的数据支持、RESTful风格的URL映射等。
最后,SSM框架的第三个核心组件是MyBatis。
MyBatis是一种优秀的持久层框架,它简化了数据库操作的编码过程。
相比传统的JDBC操作,MyBatis通过使用XML或注解描述SQL语句,提供了更加便捷和灵活的数据库访问方式。
同时,MyBatis还具备分页查询、缓存管理、动态SQL等一系列高级功能,极大地提升了数据库操作的效率和开发人员的开发体验。
javajdbc连接数据库查询方法Java JDBC连接数据库查询方法JDBC(Java Database Connectivity)是Java开发中用于连接数据库的API。
通过JDBC,我们可以轻松地连接各种数据库系统,并且执行各种操作,如查询数据、插入数据、更新数据等。
本文将介绍如何使用JDBC连接数据库并进行查询操作。
第一步- 导入所需的JDBC包在开始编写Java代码之前,我们需要导入所需的JDBC包。
通常情况下,我们需要导入以下几个包:javaimport java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;第二步- 建立数据库连接在执行任何数据库操作之前,我们需要首先建立与数据库的连接。
在JDBC 中,我们使用`DriverManager`类来建立数据库连接。
javaString url = "jdbc:mysql:localhost:3306/mydatabase"; 数据库连接URLString username = "root"; 数据库用户名String password = "password"; 数据库密码try {Connection connection = DriverManager.getConnection(url, username, password);Connection对象表示与数据库的连接} catch (SQLException e) {e.printStackTrace();}在上面的代码中,我们使用了MySQL数据库,并指定了数据库的连接URL、用户名和密码。
`DriverManager.getConnection()`方法用于建立数据库连接,并返回一个表示与数据库的连接的`Connection`对象。
本文通过一个实例,详细地说明了如何用SpringMVC进行数据库查询并且分页显示开发环境:操作系统:windows XP sp3数据库:Oracle10gIDE:MyEclipse6Web容器:Tomcat5.xJDK版本:JDK1.6工程切图如下基本上参照之前示例修改得来,重点关注SimpleJdbcTemplate与JdbcTemplate用法以下只列出比较重要的类UserController.javapackage 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 er;import erService;@Controller@RequestMapping("/user")@SessionAttributes("userList")public class UserController extends BaseController{private UserService userService;public UserService getUserService() {return userService;}@Resourcepublic void setUserService(UserService userService) {erService = 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 = newLong(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);erService.addUser(user);return userList(request);}@RequestMapping("/toAddUser")public String toAddUser(){return "addUser";}@RequestMapping("/delUser/{id}")public ModelAndView delUser(@PathVariable("id") Stringid,HttpServletRequest request){erService.delUser(new User().setId(id));return userList(request);}@RequestMapping("/getUser/{id}")public ModelAndView getUser(@PathVariable("id") String id){ User user = erService.getUserById(newUser().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);erService.editUser(user);return userList(request);}}BaseController.javapackage 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:/*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,p age);}}UserRowMapper.javapackage com.liuzd.sj.dao;import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;import er;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.javapackage 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 erDAO;import erRowMapper;import er;@Repository("userDao")public class UserDAOImpl implements UserDAO{private static final String INSERT = "insert intousers(id,name,age,sex,address,password)VALUES(?,?,?,?,?,?)";private static final String UPDATE = "update users setname=?,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;}@Resourcepublic 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.javapackage 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 erDAO;import er;import com.liuzd.util.BeanToMapUtil;@Repository("userDao2")public class UserDAOImpl2 implements UserDAO{private static final String INSERT = "insert intousers(id,name,age,sex,address,password)VALUES(:id,:name,:age,:sex,:ad dress,:password)";private static final String UPDATE = "update users setname=: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=?";privateorg.springframework.jdbc.core.simple.SimpleJdbcTemplate simpleJdbcTemplate;public org.springframework.jdbc.core.simple.SimpleJdbcTemplate getSimpleJdbcTemplate() {return simpleJdbcTemplate;}@Resourcepublic 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="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd /schema/mvc/schema/mvc/spring-mvc-3.0.xsd"><!--自动搜索@Controller标注的类用于指明系统从哪个路径下寻找controller,然后提前初始化这些对象。