`

java分页插件valuelist

    博客分类:
  • java
阅读更多

在这里给大家分享一个java的分页插件,valuelist,具体源代码可以查看附件。

首先介绍下该插件有什么功能:

1、不用我们在sql中写具体的分页语句,如mysql,我们不必去写limit ?,?这样的代码,这些代码组件会自动拼装上

2、支持自定义多条件查询,即如果我参数中不传要查询的字段值,在查询时会去掉该查询条件,当然这要在sql语句中进行一个简单的配置。

 

基本功能就是上述两种,个人认为还是比较好用的,尤其是第二点,当我们综合查询时,不确定哪些字段要查询时,是非常方便的。在网上搜valuelist,可能还会有文章介绍它还带有相应的页面标签,我们使用的是不支持标签的,仅用来方便查询。

 

下面介绍使用方法:首先说明下该组件是将sql写到xml文件中的

1、首先这个组件可能依赖的jar包有以下几个,以gradle语法列出:

compile ("commons-beanutils:commons-beanutils:1.9.1")
compile ("org.springframework:spring-jdbc:4.0.0.RELEASE")
compile ("org.springframework:spring-context:4.0.0.RELEASE")
compile ("org.slf4j:slf4j-api:1.7.7") //同时加上你项目中log的实现,如log4j
compile("mysql:mysql-connector-java:5.1.29")
compile("com.alibaba:druid:1.0.15") //也可以换成别的连接池,如c3p0、dbcp等

因为该组件是依赖于spring的,所以需要引入spring相关jar包。

2、将该组件源代码(见附件)复制进入项目中,或者自己打个jar包放入项目中

3、配置数据库连接池,以下仅为参考,自己可配置自己项目使用的连接池

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close" init-method="init">
		<property name="driverClassName" value="${datasource.driverClassName}" />
		<property name="url" value="${datasource.url}" />
		<property name="username" value="${datasource.username}" />
		<property name="password" value="${datasource.password}" />
		<property name="initialSize" value="${datasource.initial.size}" />
		<property name="minIdle" value="${datasource.min.idle}" />
		<property name="maxActive" value="${datasource.max.active}" />
		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="${datasource.max.wait}" />
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${datasource.time.eviction}" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${datasource.min.eviction}" />
		<property name="validationQuery" value="${datasource.validation.query}" />
		<property name="testWhileIdle" value="${datasource.test.while.idle}" />
		<property name="testOnBorrow" value="${datasource.test.borrow}" />
		<property name="testOnReturn" value="${datasource.test.return}" />
	</bean>

 4、配置valuelist用到的类,可以新建一个valuelist.xml放入你项目spring扫描的配置文件路径下

<bean id="rowMapper" class="org.springframework.jdbc.core.ColumnMapRowMapper" />

<bean id="sqlPagingSupport" class="net.mlw.vlh.adapter.jdbc.util.SqlPagingSupport">
               <!--配置使用的数据库,只测试过mysql,其余数据库未测试,可修改源代码增加自己实现-->
		<property name="database" value="mysql" />
</bean>

<!--下面配置具体查询的类,也是配置sql语句的地方-->
<bean id="getShareListByUserIdAndCate"
		class="net.mlw.vlh.adapter.jdbc.spring.SpringDaoValueListAdapter">
		<!--指定数据库连接池-->
                <property name="dataSource" ref="dataSource" />
		<property name="rowMapper" ref="rowMapper" />
		<property name="sqlPagingSupport" ref="sqlPagingSupport" />
                <!--默认每页记录数-->
		<property name="defaultNumberPerPage" value="20" />
		<!--执行查询时,是否打印sql语句,调试时可打开该选项-->
                <property name="showSql" value="true" />
		<!--配置要查询的sql语句-->
                <property name="sql">
			<value>
<!--可以看到以下条件都被/~~/包住了,这里面的条件即你传入该参数就根据该参数查询,你不传的话就不根据该条件查询。请注意:冒号前面的名字,如authorId,要和大括号里面的名字保持一致-->
				<![CDATA[
	               select `id`,`content`,`tag`,`type`,`pId`,`pData`,`authorId`,`authorName`,`createTime`,cmtCnt as cmtCount  from share_[table] 
				   where 1=1 
            
                   /~authorId: and authorId = {authorId} ~/
                   /~cateId: and cateId = {cateId} ~/
                   order by createTime desc
                 ]]>
			</value>
		</property>
	</bean>
<!--若有另外查询,则再定义个类-->
	<bean id="getUserByUserName"
		class="net.mlw.vlh.adapter.jdbc.spring.SpringDaoValueListAdapter">
		<property name="dataSource" ref="dataSource" />
		<property name="rowMapper" ref="rowMapper" />
		<property name="sqlPagingSupport" ref="sqlPagingSupport" />
		<property name="defaultNumberPerPage" value="20" />
		<property name="showSql" value="true" />
		<property name="sql">
			<value>
 <!--像这种不/~~/里面的条件,则为每次都会执行的条件,所以realName这个参数是必须传入的,而userName则可以不传入,不传即不根据此条件查询-->
				<![CDATA[
					select `id`,`userName`,`realName`,`idNum`,`signature`,`desc` 
					from user where 1=1                           
                                        realName={realName}               
					 /~userName: AND `userName` like '%[userName]%' ~/  
                 ]]>
			</value>
		</property>
	</bean>

<!--配置完了sql语句,还需要有以下的一个小小的配置-->
<bean id="valueListHandler" class="net.mlw.vlh.DefaultValueListHandlerImpl">
		<property name="config.adapters">
			<map>
				<!-- 将刚才配置的sql的bean注入到这里,在代码调用时,则需要使用这里配置的key值 -->
				<entry key="getUserByUserName" value-ref="getUserByUserName" />
				<entry key="getShareListByUserIdAndCate" value-ref="getShareListByUserIdAndCate" />
			</map>
		</property>
	</bean>

 
 以上即为配置文件,请保证项目启动时,spring能够扫描到以上配置,我们配置的net.mlw.vlh.adapter.jdbc.spring.SpringDaoValueListAdapter类可以想象为一个个的查询方法,不同的sql则定义多个这样的类。

5、最后,我们看代码的使用

如我们使用第一个getShareListByUserIdAndCate查询:

/**
	 * 注入要使用的类,即我们在配置文件中配置的 net.mlw.vlh.DefaultValueListHandlerImpl
	 */
	@Autowired
	private ValueListHandler handler;
	
	public void getShare(int pageIndex,int pageSize){
		//定义map存放查询参数
		Map<String,Object> paras=new HashMap<String, Object>();
		//设置查询页码,须将pageIndex转换为string
		paras.put("pagingPage", String.valueOf(pageIndex));
		//设置每页记录数
		paras.put("pagingNumberPer",String.valueOf(pageSize));
		//设置sql中的查询参数,key即配置文件sql语句中{}中的值,如果sql配置中查询条件没有在/~~/之内,则必须传入;
		paras.put("authorId","123");
		paras.put("cateId","567");
		//执行查询,第一个参数即我们最后配置的valueListHandler中注入的map中对应getShareListByUserIdAndCate这个sql bean配置的key值
		//即 <entry key="getShareListByUserIdAndCate" value-ref="getShareListByUserIdAndCate" /> 这里对应的key
		ValueList list=handler.getValueList("getUserByUserName", new ValueListInfo(paras));
		//以上ValueList对象里包含很多字段,如记录总数,查询条件,查询结果等
		//查询结果,每条记录以Map形式返回
		List<Map<String,Object>> res=list.getList();
		//记录总数
		int count=list.getValueListInfo().getTotalNumberOfEntries();
	}

 

以上就是该组件的使用方式,在进行很多个条件查询时,确实带来了很大的方便;若是以上有什么叙述的不到位的,或者不明白的,请指出,我进行改正。

 

 

 

  • valuelist.zip (77 KB)
  • 描述: valuelist源代码
  • 下载次数: 31
2
1
分享到:
评论
2 楼 z19910509 2015-07-29  
windlike 写道
Oracle的分页比较难搞,嗯。

是啊,相比mysql,oracle和sqlserver的分页确实有点麻烦
1 楼 windlike 2015-07-29  
Oracle的分页比较难搞,嗯。

相关推荐

    valueList 分页插件的使用

    本实例使用SSH框架整合开发,sqlserver2000数据库,valueList 插件,目的是练习分页插件的使用。由于jar包文件太多,故把jar包删去了,使用者只要加上SSH的jar文件,导入eclipse就可以运行

    功能强大的JSP分页组件 valuelist0.1.8

    功能强大的JSP分页组件 valuelist0.1.8 封装的很好

    包括应用示例的功能强大的分页组件valuelist0.1.8

    本文将详细讨论“包括应用示例的功能强大的分页组件valuelist0.1.8”。 Valuelist 0.1.8是一款高效且功能丰富的分页组件,它专为优化用户界面和提高用户体验而设计。此组件适用于Java开发环境,尤其是那些基于Web的...

    valuelist

    "valuelist"是一个专为高性能表格展示设计的组件,主要应用于J2EE环境中,它提供了丰富的功能,如分页、分组以及排序等,旨在优化数据处理和用户体验。在这个项目中,我们可以看到一系列的JSP文件,这些文件是Web...

    ValueList_delphiValueList_

    在Delphi编程环境中,`ValueList`是一种非常实用的组件,尤其对于初学者来说,它提供了方便的方式来管理和处理数据集合。`ValueList`组件通常用于存储键值对,类似于其他编程语言中的字典或哈希表。在这个压缩包中,...

    兔八哥ValueList的文档0.3

    兔八哥ValueList文档翻译 概述:ValueList是一个强大的数据访问工具,它可以帮助开发者快速构建数据驱动的应用程序。本文档是ValueList的官方文档翻译,旨在帮助开发者更好地理解和使用ValueList。 一、ValueList...

    ValueList的文档

    ValueList 支持像 JDO 和 Hibernate 这样的ORM(对象关系映射)工具,但即使在不使用这些高级框架的情况下,它也能够处理从 service 层接收POJO(Plain Old Java Object)列表的场景。ValueListHandler 是核心组件,...

    valuelist war

    valuelist;valuelist;valuelist;valuelist; 不错的表格控制技术

    ValueList技术分享 ValueList技术应用.doc

    ValueList技术是一种在Java开发中用于简化数据访问和处理的技术,尤其在处理JDBC操作时提供了便利。它通过ValueListHandler接口和ValueListAdapter接口来实现对数据库查询结果的封装和处理,使得数据处理更加统一和...

    Java调用SPSS的实例.docx

    首先,要在Java项目中使用SPSSINC API,你需要确保已经安装了SPSS,并且在SPSS中安装了Java插件(SPSS/Java Add-in)。这样,你就可以在SPSS环境中运行Java代码,并访问其丰富的统计功能。 以下是一个简单的示例,...

    仿valuelist式动态sql拼装

    标题“仿valuelist式动态sql拼装”指的是在编程中实现类似MyBatis的`&lt;foreach&gt;`标签功能,用于动态地拼接SQL语句,尤其是处理列表参数时的插入、更新或查询操作。这种技术常见于Java后端开发,尤其是在使用ORM(对象...

    分离valuelist的sql拼装

    - **ORM框架**:像Hibernate(Java)、Django ORM(Python)等ORM(对象关系映射)框架会自动处理SQL拼装,包括valuelist的分离,提供更安全的方式。 - **参数化查询**:使用PreparedStatement(Java)、Psycopg2...

    权限控制(struts2+hibernate+spring+struts-menu+valuelist)

    最后,valuelist是实现信息分页的一种机制,它帮助在大量数据列表中分页展示结果,提升用户体验。在查询大量数据时,valuelist可以限制每次请求返回的数据量,避免一次性加载过多数据导致性能下降。 总的来说,这个...

    java多线程_设计模式_各种技术(我的书架)

    而“ValuelList+介紹.ppt”可能是一份介绍Valuelist的文档,Valuelist可能是一种自定义的数据结构或者组件,它可能支持特定的数据绑定和事件处理机制,方便开发者在多线程环境下处理数据更新。 总的来说,这个主题...

    如何通过配置自动实现ValueList中hql语句的整型参数转换

    在使用Java Hibernate框架进行数据操作时,我们常常会遇到ValueList和HQL(Hibernate Query Language)结合使用的情况。HQL是一种面向对象的查询语言,它允许开发者以对象和属性的方式编写查询,而不是直接操作...

    2021-2022收藏的精品资料基于Java语言开发的个性化股票分析技术能量潮指标OBV.docx

    - `&lt;valueList&gt;`:定义了指标输出值的名称。 - `&lt;drawChart&gt;`:定义了如何绘制指标图表。 - **Java代码实现**: - `DailyOBVIndicator.java`:实现了具体的计算逻辑。 - 导入必要的包,如日期处理、数据分析...

    基于Java语言开发的个性化股票分析技术移动平均线MA.doc

    3. 数据结构定义:如XML文档所示,定义了参数列表(paramList)、数据列表(dataList)和输出列表(valueList),分别存储不同周期的移动平均线参数、原始数据和计算结果。 4. 图形绘制:通过定义不同的线型、颜色和...

Global site tag (gtag.js) - Google Analytics