在这里给大家分享一个java的分页插件,valuelist,具体源代码可以查看附件。
首先介绍下该插件有什么功能:
1、不用我们在sql中写具体的分页语句,如mysql,我们不必去写limit ?,?这样的代码,这些代码组件会自动拼装上
2、支持自定义多条件查询,即如果我参数中不传要查询的字段值,在查询时会去掉该查询条件,当然这要在sql语句中进行一个简单的配置。
基本功能就是上述两种,个人认为还是比较好用的,尤其是第二点,当我们综合查询时,不确定哪些字段要查询时,是非常方便的。在网上搜valuelist,可能还会有文章介绍它还带有相应的页面标签,我们使用的是不支持标签的,仅用来方便查询。
下面介绍使用方法:首先说明下该组件是将sql写到xml文件中的
1、首先这个组件可能依赖的jar包有以下几个,以gradle语法列出:
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(); }
以上就是该组件的使用方式,在进行很多个条件查询时,确实带来了很大的方便;若是以上有什么叙述的不到位的,或者不明白的,请指出,我进行改正。
相关推荐
本实例使用SSH框架整合开发,sqlserver2000数据库,valueList 插件,目的是练习分页插件的使用。由于jar包文件太多,故把jar包删去了,使用者只要加上SSH的jar文件,导入eclipse就可以运行
功能强大的JSP分页组件 valuelist0.1.8 封装的很好
包括应用示例的功能强大的分页组件valuelist0.1.8
valuelist 排序 分页 j2ee java 页面分页 框架
高性能的表格组建(基于j2ee),提供分页,分组,排序等功能!
valuelist;valuelist;valuelist;valuelist; 不错的表格控制技术
郁闷,我下载人家的要10分,他怎么不去抢????? 我的是免费的, 本文档译自ValueList的官方网站的文档,因为ValueList的文档很少,所以想上传给那些手头有点紧的银兄.
vlaueList是很好的机遇AJax的框架。可以实现排序,分页等功能!
初学者可以参考,这个控件在开发过程中还是蛮适用的
ValueList技术分享 超级实用
ValueList的文档--基础篇
NULL 博文链接:https://relive123-yahoo-com-cn.iteye.com/blog/848414
使用struts2+hibernate+spring整合实现权限管理,使用struts-menu实现菜单,使用valueList实现信息分页
NULL 博文链接:https://c297186864.iteye.com/blog/1977611
本篇文章是对通过配置自动实现ValueList中hql语句的整型参数转换进行了详细的分析介绍,需要的朋友参考下
BaseItemLayout 更新 对项目进行了重构,详情请看项目重构 上个图 简介 在工作中经常会遇到下面的... List valueList = new ArrayList(); valueList.add("相册"); valueList.add("收藏"); valueList.add("钱包");
一.values() 1.values()结果是什么? ...示例: 结果:values()得到的是一个字典形式的查询集(QuerySet),查询集是一个可迭代对象。 2.values()结果如何序列化为json? (1)将QuerySet转为list: city_list = list...
灰烬高级组合框 可以(在其他旁边)的Ember组合框: 筛选项目 排序项目 多选项目 移动支持(“几乎”为本地) 延迟加载组合框项目 当心余烬> = 2.0.0 我们使用来确保此插件在所有浏览器上都可以使用... valueList=
2017年 公用事业碳排放权专题报告:全国碳市场启动在即,或只纳入发电行业-西南证券-20171219_[valuelist_cn]_价值目录【16页】.pdf 2017年 其他电气设备统一碳市场挂牌交易日益临近,碳资产管理百亿市场大幕开启-...