-
2018-12-14 12:46:37
Java 自定义分页工具类
1、为什么要写这个工具类:
Mybatis 分页插件只能够对mapper的select返回的数据进行分页操作,而要对分页数据进行包装的话,目前只能自定义工具类了,我还没有找到合适的解决办法。
2、代码实现如下:
import java.util.ArrayList; import java.util.List; /** * @author ZSCDumin * @version 1.0 * @description: 自定义分页工具类:传递参数只需要(要分页的数组,当前页,每页大小) * @date 2018/12/13 21:10 */ public class MyPageHelper<T> { private List<T> list;//要分页的数组 private Integer total; //总个数 private Integer currentPage; //当前页 private Integer totalPages; //总页数 private Integer pageSize; // 每页个数大小 private Integer previousPage; //前一页 private Integer nextPage;//后一页 public Integer getPreviousPage() { return previousPage; } public void setPreviousPage() { this.previousPage = currentPage > 0 ? currentPage - 1 : currentPage; } public Integer getNextPage() { return nextPage; } public void setNextPage() { this.nextPage = currentPage < totalPages ? currentPage + 1 : currentPage; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } public Integer getTotal() { return total; } public void setTotal() { this.total = list.size(); } public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; } public Integer getTotalPages() { return totalPages; } public void setTotalPages() { this.totalPages = (int) Math.ceil(1.0 * total / pageSize); } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } /** * @param list * @param currentPage * @param pageSize */ public MyPageHelper(List<T> list, Integer currentPage, Integer pageSize) { this.list = list; this.currentPage = currentPage; this.pageSize = pageSize; setTotal(); setTotalPages(); setNextPage(); setPreviousPage(); getResult(); } /** * 获取结果 */ public void getResult() { if (pageSize < total && pageSize > 0) {// 每页小于总数目 int start = 0, end = 0; if (currentPage < totalPages - 1 && currentPage >= 0) { start = currentPage * pageSize; end = (currentPage + 1) * pageSize - 1; setData(start, end); } else if (currentPage == totalPages - 1) { start = currentPage * pageSize; end = total - 1; setData(start, end); } } } /** * 获取数组指定位置的元素 * * @param start 起始位置 * @param end 截止位置 * @return */ void setData(int start, int end) { if (start >= 0 && end < total) { List<T> list1 = new ArrayList<>(); for (int i = start; i <= end; i++) { list1.add(list.get(i)); } this.list.clear(); setList(list1); } } }
3、使用方式
MyPageHelper<User> myPageHelper = new MyPageHelper<>(list, pageNum, pageSize);
更多相关内容 -
C#使用IComparer自定义List类实现排序的方法
2020-09-03 10:20:10主要介绍了C#使用IComparer自定义List类实现排序的方法,涉及C#使用IComparer接口定义List类进行排序的相关技巧,需要的朋友可以参考下 -
自定义list
2013-06-29 14:24:47自定义圆角listview,使用的是android:shape设置样式 -
Android自定义list的item显示内容
2015-06-08 23:47:41安卓自定义list的listitem,item中添加图片,按钮等元素 -
mybatis自定义List集合解析器
2020-10-13 13:17:331. 编写类型解析器 方案1:实现TypeHandler重写方法 ... import org.apache.ibatis.type.*;...import java.util.List; /** * Created with IntelliJ IDEA. * * @author: wb-zcx696752 * @descriptio1. 编写类型解析器
方案1:实现TypeHandler重写方法
package com.aliyun.kuxuandemo.typeHandler; import org.apache.ibatis.type.*; import java.sql.*; import java.util.Arrays; import java.util.List; /** * Created with IntelliJ IDEA. * * @author: wb-zcx696752 * @description: * @data: 2020/10/13 11:19 PM */ @MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes(List.class) public class ListTypeHandler implements TypeHandler<List<String>> { @Override public void setParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException { StringBuffer sb = new StringBuffer(); for (String pa : parameter) { sb.append(pa).append(","); } ps.setString(i, sb.toString().substring(0, sb.toString().length() - 1)); } @Override public List<String> getResult(ResultSet resultSet, String s) throws SQLException { String[] split = resultSet.getString(s).split(","); return Arrays.asList(split); } @Override public List<String> getResult(ResultSet resultSet, int i) throws SQLException { String[] split = resultSet.getString(i).split(","); return Arrays.asList(split); } @Override public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException { String[] split = callableStatement.getString(i).split(","); return Arrays.asList(split); } }
方案二:继承BaseTypeHandler类,重写方法
package com.aliyun.kuxuandemo.typeHandler; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; import java.util.List; /** * Created with IntelliJ IDEA. * * @author: wb-zcx696752 * @description: * @data: 2020/10/13 12:56 PM */ @MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes(List.class) public class ListTypeHandler extends BaseTypeHandler<List<String>> { @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, List<String> strings, JdbcType jdbcType) throws SQLException { //1.List集合转字符串 StringBuffer sb = new StringBuffer(); for (String string : strings) { sb.append(string).append(","); } //2.设置给ps preparedStatement.setString(i, sb.toString().substring(0, sb.toString().length() - 1)); } @Override public List<String> getNullableResult(ResultSet resultSet, String s) throws SQLException { String[] split = resultSet.getString(s).split(","); return Arrays.asList(split); } @Override public List<String> getNullableResult(ResultSet resultSet, int i) throws SQLException { String[] split = resultSet.getString(i).split(","); return Arrays.asList(split); } @Override public List<String> getNullableResult(CallableStatement callableStatement, int i) throws SQLException { String[] split = callableStatement.getString(i).split(","); return Arrays.asList(split); } }
2. 在mybatis-config.xml中注册该解析器
<typeHandlers> <typeHandler handler="com.aliyun.kuxuandemo.typeHandler.ListTypeHandler"/> </typeHandlers>
3.使用自定义类型解析器
查询时
@Select("select video_id,corp_id,oss_url,title,category_list,description from video_basic_info " + "where video_id=#{VideoID} and corp_id=#{CorpID}") @Results({ @Result(property = "videoId", column = "video_id"), @Result(property = "corpId", column = "corp_id"), @Result(property = "ossUrl", column = "oss_url"), @Result(property = "categoryList", column = "category_list", typeHandler = com.aliyun.kuxuandemo.typeHandler.ListTypeHandler.class) })
插入修改时
@Update({ "<script> ", "update video_basic_info ", "<set> ", "<if test = \"Title != null and Title != '' \"> ", "title=#{Title}, ", "</if> ", "<if test = \"Desc != null and Desc != '' \"> ", "description=#{Desc}, ", "</if> ", "<if test = \"Tag != null and Tag.size() > 0 \"> ", "category_list=#{Tag,javaType=List,jdbcType=VARCHAR,typeHandler=com.aliyun.kuxuandemo.typeHandler.ArrayTypeHandler} ", "</if> ", "</set> ", "where video_id=#{VideoID} and corp_id=#{CorpID}", "</script>" }) int updateVideoBasicInfoTitleDescTag(BaseRequestParameterValidationModel parameter);
-
C# 通过数组实现一个自定义List类
2018-11-25 13:27:34先在主方法使用一下自己定义的集合类 MyList,MyList代码在最下面(MyList集合类的功能还有很多可以完善,这里仅举例) using System; using System....namespace _005_List的创建和使用 { class Program ...使用泛型和索引器来实现一个我们自己的集合类MyList
创建一个类MyList.cs继承接口IComparableusing System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _005_List的创建和使用 { //使用泛型和索引器来实现一个我们自己的集合类MyList class MyList<T> where T : IComparable//继承接口(加一个约束) { private T[] array; private int count = 0; //表示当前的元素的个数 //构造方法new MyList<T>(size) public MyList(int size) { if (size >= 0) { array = new T[size]; } } public MyList() { array = new T[0]; } //容量其实就是数组长度 public int Capacity { get { return array.Length; } } //元素个数 public int Count { get { return count; } } //添加元素 public void Add(T item) { if (Count == Capacity) //判断元素个数跟列表容量大小是否一样大,如果一样大,说明数组容量不用,需要创建新的数组 { if (Capacity == 0) //当数组长度为0的时候,创建一个长度为4的数组 { array = new T[4]; } else { var newArray = new T[Capacity * 2]; //当长度不为0的时候,我们创建一个长度为原来2倍的数组 Array.Copy(array, newArray, Count); //把旧数组中的元素复制到新的数组中 , 复制前count个 array-->newArray array = newArray; //数组是引用类型,newArray赋值给array的是堆中的储存地址 } } array[Count] = item; count++; } //通过索引获取元素 public T GetItem(int index) { if (index >= 0 && index < count) { return array[index]; } else { throw new Exception("索引超出了范围"); } } //创建索引器,索引器:通过[index]这种形式去访问数据,就是索引器 public T this[int index] { get { return GetItem(index); } set { if (index >= 0 && index < count) { array[index] = value; } else { throw new Exception("索引超出了范围"); } } } //插入元素 public void Insert(int index, T item) { if (index >= 0 && index < count) { if (Count == Capacity) { if (Capacity == 0) { array = new T[4]; } else { var newArray = new T[Capacity * 2]; Array.Copy(array, newArray, Count); array = newArray; } for (int i = count - 1; i >= index; i--) { array[i + 1] = array[i]; //把i位置的值放在后面,就是向后移动一个单位 } array[index] = item; count++; } } else { throw new Exception("索引超出了范围"); } } //删除元素 public void RemoveAt(int index) { if (index >= 0 && index < count) { for (int i = index + 1; i < count; i++) { array[i - 1] = array[i]; } count--; } else { throw new Exception("索引超出了范围"); } } //从前(后)查找 public int IndexOf(T item) { for (int i = 0; i < count; i++) { if (array[i].Equals(item)) { return i; } } return -1; } public int LastIndexOf(T item) { for (int i = Count - 1; i >= 0; i--) { if (array[i].Equals(item)) { return i; } } return -1; } //排序 public void Sort() { for (int i = 0; i < Count - 1; i++) { if (array[i].CompareTo(array[i + 1]) > 0)//CompareTo返回值是int,返回值大于零表示前者大于后者,小于表示前者小于后者,等于零表示俩者相等 { T temp = array[i]; array[i] = array[i + 1]; array[i + 1] = temp; } } } } }
在主方法调用自己定义的集合类 MyList
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _005_List的创建和使用 { class Program { static void Main(string[] args) { MyList<int> mylist = new MyList<int>(); //MyList<int> mylist2 = new MyList<int>(10); //添加元素 mylist.Add(234); mylist.Add(24); mylist.Add(24); mylist.Add(274); ForList();//循环列表 //插入元素 mylist.Insert(2, 9000); ForList();//循环列表 //访问元素个数 Console.WriteLine(mylist.Count); //获取容量大小 Console.WriteLine(mylist.Capacity); //移除指定位置的元素 mylist.RemoveAt(2); ForList();//循环列表 //IndexOf索引从第一个元素开始取得元素所在列表中的索引位置(LastIndexOf从后往前开始),查找不到返回-1 Console.WriteLine(mylist.IndexOf(24)); Console.WriteLine(mylist.LastIndexOf(24)); Console.WriteLine(mylist.IndexOf(999)); ForList(); //排序 mylist.Sort(); ForList(); Console.WriteLine(); //mylist[0] = 100;//可以通过索引器 设置值 //循环数组 void ForList() { /*for (int i = 0; i < mylist.Count; i++) { Console.WriteLine(mylist.GetItem(i));//通过GetItem方法取元素 }*/ for (int i = 0; i < mylist.Count; i++) { Console.Write(mylist[i]+" ");//通过索引器 取值 } Console.WriteLine(); } Console.ReadKey(); } } }
运行结果
-
MFC自定义列表listcontrol
2018-04-01 16:55:29内嵌图片,下拉框,排序,单选框,显示,隐藏,链接等自定义列表功能,MFC版本 -
自定义Listctrl
2013-09-11 14:15:40自定义的listctrl,第一列checkbox居中显示,第二列显示图片,第三列自定义文字显示 -
fastJson 之JSONObject.toJavaObject()方法不能解析嵌套自定义list对象
2019-08-09 19:51:53我有一个dto类,里面有一个int字段,一个list<String> 字段,一个list<dto2>字段,这个dto2字段里面也就一些long字段和string字段。 发生了什么 只能解析int字段,list<String> 字段,但是不能...背景
我有一个
dto
类,里面有一个int
字段,一个list<String>
字段,一个list<dto2>
字段,这个dto2
字段里面也就一些long
字段和string
字段。发生了什么
只能解析
int
字段,list<String>
字段,但是不能解析list<dto2>
干了什么事情
追了一波源码,发现解析
int
,list<dto2>
都没有问题,唯独在解析list<dto2>
的时候发现这个字段反解析对象filedDeser
为空
进入这个smartMatch(key)的方法,发现这个filedDeserializer为null
进入这个getFiledDeserializer方法发现,
解决方案
投向了google 的gson
DTO res = new GsonBuilder().create().fromJson(resStr, DTO.class);
-
C#创建自定义控件及添加自定义属性和事件使用实例详解
2020-08-19 04:58:56主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 -
自定义实现的ArrayList
2017-03-03 22:38:57自定义实现的ArrayList数据结构,有大量注释以及编写思路,帮助新手用Java语言来实现数据结构 -
java自定义List中的sort()排序方法,用于日期排序
2019-06-04 15:27:171、问题描述 List是java中一个有序可重复的的集合,其中自带的.sort()排序方法,该方法在...java中List允许我们自定义sort()排序方法,以下自定义了List集合的sort排序方法,用于对一个字符串类型的日期集合进行... -
C# 传入自定义列表List 到Oracle存储过程
2021-09-11 15:57:48C# 传入自定义列表List 到Oracle存储过程 亲测有效,执行速度极快 -
增加 自定义listfilter
2013-04-11 11:29:11这里是具体内容和方法: http://blog.csdn.net/jk007/article/details/8211928 -
list泛型自定义排序示例
2020-10-26 08:32:26主要介绍了list泛型自定义排序示例,实现List泛型类将制定元素至前排序,大家参考使用吧 -
java自定义List内部元素比较问题
2017-04-04 08:17:47我自定义了一个list,在定义其中一个查看是否有序的方法时,提示比较没有被定义,怎么解决这个问题啊 -
Java中实现List自定义排序
2019-01-30 10:46:49list . add ( new User ( 1 , "java" , 20 ) ) ; list . add ( new User ( 2 , "spark" , 19 ) ) ; list . add ( new User ( 3 , "hive" , 21 ) ) ; for ( User user : list ) ... -
Xadmin自定义list_display_links链接跳转页面
2018-06-25 15:32:57Xadmin自定义list_display_links链接跳转页面通常list_display_links跳转的是编辑页面,如果想要在列表页之间进行跳转,而不是跳转到update页面怎么办呢:需要自定义xadmin/views/base.py 和list.py文件以自定义开始... -
自定义listcontrl单行颜色
2009-11-24 13:35:18自定义listcontrl单行颜色 单行,多行,自定义行, 很方便的类 -
list集合实现自定义排序
2020-06-08 09:51:301.基本数据类型的简单排序 public class Demo01 {... List<Integer> list = Arrays.asList(1,5,2,0,-1); Collections.sort(list); System.out.println(list); } } (1)Collections.sort(list)分析: @Suppress -
List排序根据自定义字段自定义排序规则
2020-07-10 09:37:45List排序根据自定义字段自定义排序规则 1.ListSortUtils自定义工具类【 List排序根据自定义字段自定义排序规则】: import com.dahuatech.bigfish.project.planmanage.entity.PlanVO; import java.lang.reflect.... -
Java Collections.sort()实现List排序的默认方法和自定义方法
2020-08-30 06:02:06主要介绍了Java Collections.sort()实现List排序的默认方法和自定义方法,需要的朋友可以参考下 -
ubuntu自定义sourcelist
2019-04-26 01:10:49NULL 博文链接:https://snv.iteye.com/blog/2357537 -
Unity中自定义结构体创建List时如何在Inspector上显示
2022-04-22 11:20:39在自定义结构体前加 [System.Serializable] using UnityEngine; [System.Serializable] public struct MyStruct { public string name; public Transform trans_Obj; public bool isOK; } 在创建该结构体的... -
java中List自定义比较器
2020-07-12 10:57:00import java.util.ArrayList;...import java.util.List; public class Lab { public static void main(String[] args) { List<Student> list = new ArrayList<>(); //构建Student对. -
C#中List自定义类的集合操作
2019-05-08 09:48:20List<User> list = list1.MyDistinct(s => s.Id).ToList(); Console.WriteLine("去重:"); foreach (var item in list) { Console.WriteLine(item.Id); } list = list1.MyExcept(list2, s => s.Id).ToList();... -
自定义Valid注解,校验List集合
2021-05-13 16:15:34自定义注解 @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = ListValidator.class) public @interface ListValid { int min() default 0; int max() default ... -
C++ list自定义函数排序
2019-03-31 21:15:55总时间限制: 1000ms 内存限制: 65536kB // 在此处补充你的代码 描述 程序填空,产生指定输出 #include <cstdio> #include <iostream>...list> using namespace std; int main()... -
自定义列表项符号list-style-image详解
2021-06-12 11:42:43本篇文章给大家带来的内容是关于自定义列表项符号list-style-image详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一、list-style-image属性不管是有序列表,还是无序列表,都有它们自身的...