之前写了个分页查询,感觉还是比较通用的,虽然还有一点问题 也希望大家指点一下。我用的Hibernate.

pager的帮助类:

  1 import java.util.List;
  2
  3 /**
  4  * @author AsceticJ
  5  * @date 2017年5月28日 下午9:09:01
  6  * @version 1.0
  7  * @param <T>
  8
  9  * @TODO 分页帮助类:在Action里传参设置pager的参数,在需要分页的页面使用include指令导入webroot目录下pager.jsp
 10  */
 11 public class Pager<T>
 12 {
 13     //action传值得到
 14     private Integer currPage=1;//设置当前页,默认显示第一页
 15     private Integer pageSize=10;//每页显示记录数,默认显示10条
 16     private Integer indexSize=5;//设置需要显示页码的总数,默认显示5页
 17     private String actionName;//设置跳转到第N页的action名称
 18     //查询得到
 19     private Integer totalCount;//总记录数
 20     private List<T> countList;//用于存放每页记录的集合
 21     //计算得到
 22     private Integer totalPage;//总页数
 23     //用于设置页码显示
 24     private Integer beginIndex;//显示的开始页码
 25     private Integer endIndex;//显示的结束页码
 26
 27     public Pager(){}
 28
 29     public Pager(Integer currPage, Integer pageSize ,Integer totalCount ,List<T> countList)
 30     {
 31         this.currPage = currPage;
 32         this.pageSize = pageSize;
 33         this.totalCount = totalCount;
 34         this.countList = countList;
 35         //设置总页数
 36         this.totalPage = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
 37         //设置页码
 38         //中间情况
 39         this.beginIndex = currPage - (indexSize-1)/2;
 40         this.endIndex = currPage + indexSize/2;
 41         //首端
 42         if (beginIndex < 1)
 43         {
 44             beginIndex = 1;
 45             endIndex = totalPage<indexSize?totalPage:indexSize;
 46         }
 47         //末端
 48         if (endIndex > totalPage)
 49         {
 50             endIndex = totalPage;
 51             beginIndex = totalPage<indexSize?1:totalPage-indexSize+1;
 52         }
 53     }
 54     //设置带有显示页码数量的pager
 55     public Pager(Integer currPage,Integer pageSize ,Integer indexSize ,Integer totalCount ,List<T> countList)
 56     {
 57         this.currPage = currPage;
 58         this.pageSize = pageSize;
 59         this.totalCount = totalCount;
 60         this.countList = countList;
 61         //设置总页数
 62         this.totalPage = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
 63         //设置页码
 64         int halfSize= (indexSize-1)/2;
 65         //中间情况
 66         this.beginIndex = currPage - halfSize;
 67         this.endIndex = currPage + halfSize + 1;
 68         //首端
 69         if (beginIndex < 1)
 70         {
 71             beginIndex = 1;
 72             endIndex = totalPage<indexSize?totalPage:indexSize;
 73         }
 74         //末端
 75         if (endIndex > totalPage)
 76         {
 77             endIndex = totalPage;
 78             beginIndex = totalPage<indexSize?1:totalPage-indexSize+1;
 79         }
 80     }
 81
 82     //============get/set====================
 83     public Integer getCurrPage()
 84     {
 85         return currPage;
 86     }
 87     public void setCurrPage(Integer currPage)
 88     {
 89         this.currPage = currPage;
 90     }
 91     public Integer getTotalCount()
 92     {
 93         return totalCount;
 94     }
 95     public void setTotalCount(Integer totalCount)
 96     {
 97         this.totalCount = totalCount;
 98     }
 99     public Integer getPageSize()
100     {
101         return pageSize;
102     }
103     public void setPageSize(Integer pageSize)
104     {
105         this.pageSize = pageSize;
106     }
107     public Integer getTotalPage()
108     {
109         return totalPage;
110     }
111     public void setTotalPage(Integer totalPage)
112     {
113         this.totalPage = totalPage;
114     }
115     public List<T> getCountList()
116     {
117         return countList;
118     }
119     public void setCountList(List<T> countList)
120     {
121         this.countList = countList;
122     }
123     public Integer getIndexSize()
124     {
125         return indexSize;
126     }
127     public void setIndexSize(Integer indexSize)
128     {
129         this.indexSize = indexSize;
130     }
131
132     public Integer getBeginIndex()
133     {
134         return beginIndex;
135     }
136
137     public void setBeginIndex(Integer beginIndex)
138     {
139         this.beginIndex = beginIndex;
140     }
141
142     public Integer getEndIndex()
143     {
144         return endIndex;
145     }
146
147     public void setEndIndex(Integer endIndex)
148     {
149         this.endIndex = endIndex;
150     }
151
152     public String getActionName()
153     {
154         return actionName;
155     }
156
157     public void setActionName(String actionName)
158     {
159         this.actionName = actionName;
160     }
161
162 }

View Code

我是在BaseDao里面对分页进行封装的(里面写了几种查询的方法,我用的是findByCriteria)。

  1 import java.lang.reflect.Field;
  2 import java.lang.reflect.InvocationTargetException;
  3 import java.lang.reflect.Method;
  4 import java.lang.reflect.ParameterizedType;
  5 import java.util.ArrayList;
  6 import java.util.Iterator;
  7 import java.util.List;
  8 import java.util.Map;
  9
 10 import javax.annotation.Resource;
 11
 12 import org.hibernate.Criteria;
 13 import org.hibernate.Query;
 14 import org.hibernate.Session;
 15 import org.hibernate.SessionFactory;
 16 import org.hibernate.criterion.DetachedCriteria;
 17 import org.hibernate.criterion.Projections;
 18 import org.hibernate.criterion.Restrictions;
 19 import org.springframework.orm.hibernate3.HibernateTemplate;
 20 import org.springframework.stereotype.Repository;
 21 import org.springframework.transaction.annotation.Transactional;
 22
 23 import com.eduask.group8.dao.IBaseDao;
 24 import com.eduask.group8.pojo.Pager;
 25
 26 /**
 27  * @author AsceticJ
 28  * @date 2017年5月23日 上午9:32:28
 29  * @version 1.0
 30
 31  * @TODO Dao层基础类
 32  */
 33
 34 @SuppressWarnings("all")
 35 @Repository
 36 @Transactional
 37 public abstract class BaseDaoImpl<T>  implements IBaseDao<T>{
 38     @Resource
 39     private SessionFactory sessionFactory;
 40
 41     private Class<T> classObject;
 42
 43     public BaseDaoImpl(){
 44         /* 使用反射技术得到T的真实类型  */
 45         // 获取当前new的对象的 泛型的父类 类型(即获得BaseDaoImpl<T>)
 46         ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
 47         // 获取第一个类型参数的真实类型(即获得<T>中的T)
 48         this.classObject = (Class<T>) pt.getActualTypeArguments()[0];
 49     }
 50
 51     protected Session getSession(){
 52         return sessionFactory.getCurrentSession();
 53     }
 54     //获取hibernateTemplate
 55     private HibernateTemplate hibernateTemplate;
 56     protected HibernateTemplate getHibernateTemplate(){
 57         if(hibernateTemplate==null){
 58             hibernateTemplate = new HibernateTemplate(sessionFactory);
 59         }
 60         return hibernateTemplate;
 61     }
 62
 63
 64     @Override
 65     public void add(T t) {
 66         getSession().save(t);
 67     }
 68
 69     @Override
 70     public void del(Integer id) {
 71         Session session=getSession();
 72         T t=(T)session.get(classObject, id);
 73         session.delete(t);
 74     }
 75
 76     @Override
 77     public void update(T t) {
 78         getSession().update(t);
 79     }
 80
 81     @Override
 82     public T getById(Integer id) {
 83         return  (T)getSession().get(classObject, id);
 84     }
 85
 86     @Override
 87     public List<T> getAll() {
 88         /*
 89          * 如果实现了HibernateSupport接口的写法
 90          * return getHibernateTemplate.find("from "+classObject.getSimpleName());
 91          */
 92         String hqlForResult="from "+classObject.getSimpleName();
 93         return getSession().createQuery(hqlForResult).list();
 94     }
 95
 96     @Override
 97     public Pager<T> getAll(Integer currPage,Integer pageSize) {
 98         String hqlForResult="from "+classObject.getSimpleName();
 99         return usePage(currPage, pageSize, hqlForResult);
100     }
101
102
103     //-------------------------------------------------------------------------
104     // 使用HibernateTemplate进行查询
105     //-------------------------------------------------------------------------
106     //使用HibernateTemplate的find()方法:多条件模糊查询,未分页
107     public List<T> find(T t,String[] fieldNames) throws Exception
108     {
109         //使用hibernateTemplate的find()方法
110         String hql = "from "+classObject.getSimpleName()+" where 1=1 ";
111         //获取属性名的get方法
112         String[] getMethodNames = new String[fieldNames.length];
113         Method[] getFieldValues = new Method[fieldNames.length];
114         List<Object> paramList = new ArrayList<Object>();
115         for (int i = 0; i < fieldNames.length; i++)
116         {
117             getMethodNames[i] = "get"+fieldNames[i].substring(0,1).toUpperCase()+fieldNames[i].substring(1);
118             getFieldValues[i] = classObject.getMethod(getMethodNames[i], null);
119             //拼hql语句
120             if (null!=getFieldValues[i]&&!"".equals(getFieldValues[i]))
121             {
122                 hql+="and "+fieldNames[i]+" like ?";
123                 paramList.add("%"+getFieldValues[i]+"%");
124             }
125         }
126         List<T> countList = getHibernateTemplate().find(hql, paramList.toArray());
127         return countList;
128     }
129
130     //使用HibernateTemplate的findByCriteria()方法:多条件模糊查询带分页
131     public Pager<T> findByHibernateCriteria(T t,String[] fieldNames,Integer currPage,Integer pageSize){
132         //获得离线对象
133         DetachedCriteria criteria = DetachedCriteria.forClass(classObject);
134         //用于接收getFiledName的方法名数组
135         String[] getMethodNames = new String[fieldNames.length];
136         //用于接收getFiledName的方法数组
137         Method[] getFieldValues = new Method[fieldNames.length];
138         for (int i = 0; i < fieldNames.length; i++)
139         {
140             getMethodNames[i] = "get"+fieldNames[i].substring(0,1).toUpperCase()+fieldNames[i].substring(1);
141             try
142             {
143                 //获得所有getFiledName的方法
144                 getFieldValues[i] = classObject.getMethod(getMethodNames[i], null);
145                 //给离线对象添加查询条件
146                 if (null!=getFieldValues[i]&&!"".equals(getFieldValues[i]))
147                 {
148                     criteria.add(Restrictions.like(fieldNames[i], "%"+getFieldValues[i].invoke(t, null)+"%"));
149                 }
150             } catch (Exception e)
151             {
152                 e.printStackTrace();//使用反射获取当前实体对象的属性的值失败
153                 return null;
154             }
155         }
156         //设置分页
157         //判断当前页是否为空
158         currPage = null==currPage?1:currPage;
159         //获取总记录数
160         int totalCount = 0;
161         Criteria c = getSession().createCriteria(classObject);
162         c.setProjection(Projections.rowCount());
163         totalCount = Integer.parseInt(c.uniqueResult().toString());
164         //获取单页的结果集
165         List<T> countList = getHibernateTemplate().findByCriteria(criteria,(currPage-1)*pageSize,pageSize);
166         return new Pager<T>(currPage, pageSize, totalCount, countList);
167     }
168
169     //使用将属性和值均传递过来(或者json)
170     public Pager<T> findByHibernateCriteria(Map<String, Object> fieldMap,Integer currPage,Integer pageSize){
171         //获得离线对象
172         DetachedCriteria criteria = DetachedCriteria.forClass(classObject);
173         //设置查询条件
174         for(String s : fieldMap.keySet()){
175             criteria.add(Restrictions.like(s, "%"+fieldMap.get(s)+"%"));
176         }
177         //设置分页
178         //判断当前页是否为空
179         currPage = null==currPage?1:currPage;
180         //获取总记录数
181         int totalCount = 0;
182         Criteria c = getSession().createCriteria(classObject);
183         c.setProjection(Projections.rowCount());
184         totalCount = Integer.parseInt(c.uniqueResult().toString());
185         //获取单页的结果集
186         List<T> countList = getHibernateTemplate().findByCriteria(criteria,(currPage-1)*pageSize,pageSize);
187         return new Pager<T>(currPage, pageSize, totalCount, countList);
188     }
189
190     //使用HibernateTemplate的findByCriteria()方法:多条件模糊查询带分页
191     public Pager<T> findByHibernateCriteria(T t,Integer currPage,Integer pageSize){
192         //获得离线对象
193         DetachedCriteria criteria = DetachedCriteria.forClass(classObject);
194         //获取实体对象的所有字段
195         Field[] fields = classObject.getDeclaredFields();
196         //用于接收getFiledName的方法名数组
197         String[] getMethodNames = new String[fields.length];
198         //用于接收getFiledName的方法数组
199         Method[] getFieldValues = new Method[fields.length];
200         for (int i = 0; i < fields.length; i++)
201         {
202             getMethodNames[i] = "get"+fields[i].getName().substring(0,1).toUpperCase()+fields[i].getName().substring(1);
203             try
204             {
205                 //获得所有getFiledName的方法
206                 getFieldValues[i] = classObject.getMethod(getMethodNames[i], null);
207                 //给离线对象添加查询条件
208                 if (null!=getFieldValues[i]&&!"".equals(getFieldValues[i]))
209                 {
210                     criteria.add(Restrictions.like(fields[i].getName(), "%"+getFieldValues[i].invoke(t, null)+"%"));
211                 }
212             } catch (Exception e)
213             {
214                 e.printStackTrace();//使用反射获取当前实体对象的属性的值失败
215                 return null;
216             }
217         }
218         //设置分页
219         //判断当前页是否为空
220         currPage = null==currPage?1:currPage;
221         //获取总记录数
222         int totalCount = 0;
223         Criteria c = getSession().createCriteria(classObject);
224         c.setProjection(Projections.rowCount());
225         totalCount = Integer.parseInt(c.uniqueResult().toString());
226         //获取单页的结果集
227         List<T> countList = getHibernateTemplate().findByCriteria(criteria,(currPage-1)*pageSize,pageSize);
228         return new Pager<T>(currPage, pageSize, totalCount, countList);
229     }
230
231
232
233     //-------------------------------------------------------------------------
234     // 使用Criteria进行查询
235     //-------------------------------------------------------------------------
236     //使用Criteria分页查询,未使用HibernateTemplate
237     public Pager<T> findByCriteria(Integer currPage,Integer pageSize)
238     {
239         Criteria criteria = getSession().createCriteria(classObject);
240         //判断当前页是否为空
241         currPage = null==currPage?1:currPage;
242         //获取总记录数
243         int totalCount = 0;
244         criteria.setProjection(Projections.rowCount());
245         totalCount = Integer.parseInt(criteria.uniqueResult().toString());
246
247         //获得当前页的List集合
248         Criteria criteria2 = getSession().createCriteria(classObject);
249         criteria2.setFirstResult((currPage-1)*pageSize).setMaxResults(pageSize);
250         List<T> countList = criteria2.list();
251         return new Pager<T>(currPage,pageSize,totalCount,countList);
252     }
253
254     //使用criteria进行条件查询分页
255     public Pager<T> findByCriteria(T t,Integer currPage,Integer pageSize){
256         //当传过来的实体对象不存在,说明没有查询条件的限制
257         if (null==t)
258         {
259             return findByCriteria(currPage,pageSize);
260         }
261         //获得criteria对象
262         Criteria criteria = getSession().createCriteria(classObject);
263         //设置查询条件
264         setConditions(t, criteria);
265         //设置分页
266         //判断当前页是否为空
267         currPage = null==currPage?1:currPage;
268         //获取总记录数
269         Integer totalCount = 0;
270         criteria.setProjection(Projections.rowCount());
271         totalCount = Integer.parseInt(criteria.uniqueResult().toString());
272         //获取单页的结果集
273         Criteria c = getSession().createCriteria(classObject);
274         setConditions(t, c);
275         List<T> countList = c.setFirstResult((currPage-1)*pageSize).setMaxResults(pageSize).list();
276         return new Pager<T>(currPage, pageSize, totalCount, countList);
277     }
278
279     //设置查询条件
280     public void setConditions(T t, Criteria criteria)
281     {
282         //获取实体对象的所有字段
283         Field[] fields = classObject.getDeclaredFields();
284         //用于接收getFiledName的方法名数组
285         String[] getMethodNames = new String[fields.length];
286         //用于接收getFiledName的方法数组
287         Method[] getFieldValues = new Method[fields.length];
288         //用于临时存放getgetFiledName的方法的执行结果
289         Object fieldValue=null;
290         for (int i = 0; i < fields.length; i++)
291         {
292             getMethodNames[i] = "get"+fields[i].getName().substring(0,1).toUpperCase()+fields[i].getName().substring(1);
293             try
294             {
295                 //获得所有getFiledName的方法
296                 getFieldValues[i] = classObject.getMethod(getMethodNames[i], null);
297                 //获取参数的值
298                 fieldValue = getFieldValues[i].invoke(t, null);
299                 //给离线对象添加查询条件
300                 if (null!=fieldValue&&!"".equals(fieldValue)&&fieldValue!=Integer.valueOf(0))
301                 {
302                     if (fieldValue.getClass().getSimpleName().equals("Integer"))
303                     {
304                         criteria.add(Restrictions.eq(fields[i].getName(), fieldValue));
305                     }else{
306                         criteria.add(Restrictions.like(fields[i].getName(), "%"+fieldValue+"%"));
307                     }
308                 }
309             } catch (Exception e)
310             {
311                 e.printStackTrace();//使用反射获取当前实体对象的属性的值失败
312             }
313         }
314     }
315
316
317
318     //-------------------------------------------------------------------------
319     // 使用hql语句进行操作
320     //-------------------------------------------------------------------------
321     //hql已经拼接完成,单纯在原来基础上进行分页,不需要设置参数
322     public Pager<T> usePage(Integer currPage,Integer pageSize,String hqlForResult){
323         //获取总记录数
324         int totalCount = 0;
325         Number c = (Number) getSession().createQuery("select count(*) "+hqlForResult).uniqueResult();
326         totalCount = c.intValue();
327         //判断当前页是否为空
328         currPage = null==currPage?1:currPage;
329         //获得当前页的List集合
330         Query query=getSession().createQuery(hqlForResult);
331         query.setFirstResult((currPage-1)*pageSize).setMaxResults(pageSize);
332         List<T> countList = query.list();
333         return new Pager<T>(currPage,pageSize,totalCount,countList);
334     }
335
336     //hql语句多条件分页查询
337     //固定查询条件,而且均是必填内容
338     //这里的hql语句是带问号需要设置参数的,当别人未填写时有问题
339     public Pager<T> findByPage(String hql,String [] parameters,Integer pageSize,Integer currPage){
340         //获取总记录数
341         int totalCount = 0;
342         Query queryCounts = getSession().createQuery("select count(*) "+hql);
343         //先判断是否有参数要绑定
344         if(parameters!=null&& parameters.length>0){
345             for(int i=0;i<parameters.length;i++){
346                 queryCounts.setString(i, parameters[i]);
347             }
348         }
349         totalCount = ((Number)queryCounts.uniqueResult()).intValue();
350         //查询数据设置分页
351         Query query=getSession().createQuery(hql);
352         //先判断是否有参数要绑定
353         if(parameters!=null&& parameters.length>0){
354             for(int i=0;i<parameters.length;i++){
355                 query.setString(i, parameters[i]);
356             }
357         }
358         //设置分页
359         query.setFirstResult((currPage-1)*pageSize).setMaxResults(pageSize);
360         List<T>    countList=query.list();
361         return new Pager<T>(currPage,pageSize,totalCount,countList);
362     }
363
364     //hql语句进行update或delete操作
365     public void executeUpdate(String hql,String [] parameters){
366         Query query = getSession().createQuery(hql);
367         //先判断是否有参数要绑定
368         if(parameters!=null&& parameters.length>0){
369             for(int i=0;i<parameters.length;i++){
370                 query.setString(i, parameters[i]);
371             }
372         }
373         query.executeUpdate();
374     }
375
376
377 }

View Code

JSP页面静态导入的pager.jsp

<%@ page pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<!-- 写一个点击事件,将form表单(ID为search_form)内的所有含有name属性且value不为空的元素获取到,然后获取分页a标签的href值,往url上将name和value添加上去 -->
<script type="text/javascript">
function changeAnchorUrl(obj){
var pageUrl = $(obj).attr("data");
var searchForm = $("#search_form");
var formUrl = searchForm.attr("action");
console.log(formUrl+"&"+pageUrl);
if(formUrl.indexOf("?")==-1){
searchForm.attr("action",formUrl+"?"+pageUrl);
}else{
searchForm.attr("action",formUrl+"&"+pageUrl);
}
searchForm.submit();
}

</script>
<body>
<div id="pages">
<c:if test="${pager.currPage!=1}">
<a data="pager.currPage=${pager.currPage-1}" οnclick="changeAnchorUrl(this)">上一页</a>
</c:if>
<c:if test="${pager.totalPage>1}">
<c:forEach var="index" begin="${pager.beginIndex}" end="${pager.endIndex}">
<a data="pager.currPage=${index}" οnclick="changeAnchorUrl(this)" class="${pager.currPage==index?'current_page':''}">${index}</a>
</c:forEach>
</c:if>
<c:if test="${pager.currPage!=pager.totalPage&&0!=pager.totalPage}">
<a data="pager.currPage=${pager.currPage+1}" οnclick="changeAnchorUrl(this)" >下一页</a>
</c:if>
</div>
</body>
</html>

转载于:https://www.cnblogs.com/ascetic-xj/p/7010235.html

一个简单的java分页相关推荐

  1. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  2. Intellij Idea创建一个简单的java项目

    2016年11月12日 我即将要离开象牙塔(校园),踏入社会,想想未来我是某个公司的一个程序员,再对比一下小时的梦想,好像出入挺大的.今天我不得不为即将的工作准备,一个java开发工程师,但是我现在是 ...

  3. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  4. 一个简单的Java计时器项目,附源码

    学Java开发的小伙伴都会想着做一些项目来检验自己的学习成果,今天小千就来分享一个简单的Java计时器项目,源码也放在文中,大家可以参考一下. Java计时器项目 开发环境:win8+eclipse+ ...

  5. idea建立一个java工程_IntelliJ IDEA(三、各种工程的创建 -- 之一 -- 创建一个简单的Java工程)...

    一.创建一个简单的Java工程:HelloWorld 1. Eclipse的第一步是选择工作空间,然后创建项目: IDEA不同(没有工作空间的概念),第一步就直接创建具体的项目,项目创建过程中会选择在 ...

  6. Ant—使用Ant构建一个简单的Java工程(两)

    博客<Ant-使用Ant构建一个简单的Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个样例来进一步学习Ant: 上面样例须要运行多条ant命令才干运行Test类中的 ...

  7. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。

    提问:编写一个简单的Java程序,模拟计算器的功能. 网友回答: 程序参考: import java.awt.*; import java.awt.event.ActionEvent; import ...

  8. 一个简单的Java EEDocker示例

    本文讲的是一个简单的Java EE&Docker示例,[编者的话]学习Docker的最好办法就是迅速在工作中应用它,本文作者使用Docker部署了一个Java EE应用,非常简单和方便.需要注 ...

  9. 编写一个java_Java入门篇(一)——如何编写一个简单的Java程序

    最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...

最新文章

  1. qtablewidget设置单元格背景色_这3个关于单元格格式的Excel小技巧,实在太好用了!...
  2. Proxy代理 和 Reflect反射(反射的是obj)的概念
  3. c++字符串大小比较可以用来干什么?
  4. C#语言基础— 输入与输出
  5. 关于Keras在测试不能使用正则dropout的解决
  6. Adaptive Images : 为不同的屏幕尺寸提供不同的图片
  7. 云上“超算中心” 阿里云推出弹性高性能计算平台E-HPC
  8. 概率论与数理统计图解
  9. 关于领域驱动设计(DDD)中聚合设计的一些思考
  10. 【微信小程序更改appid失败】微信小程序修改appid一直失败报错tourist appid解决办法
  11. OAS的使用——概述
  12. 孙子定理c语言程序,中国剩余定理(孙子定理)的证明和c++求解
  13. ResNet之残差结构的理解
  14. docker logs查看日志
  15. 小米申请 MIX 商标被驳回
  16. eclipse-美化插件
  17. 液化天然气(LNG)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 完美Vista纯洁版下载原版Vista Ultimate ghost(完美激活 可以通过正版验证)
  19. 使用Druid,C3P0连接池连接达梦主备集群
  20. 《Android4游戏编程入门经典》读后感

热门文章

  1. tcl网络电视android无法启动,tcl智能电视系统升级和刷机常见问题解答
  2. Switch新机发布引全球吐槽,老任给牙膏厂上了一课,这波是等等党输了
  3. CSS去除input框自带的叉号
  4. 区块链经济学:制度加密经济学入门指南
  5. java-php-python-ssm网上购物超市系统计算机毕业设计
  6. 由浅入深讲二叉树4种遍历算法的由来
  7. 反射式、透射式空间光调制器简介
  8. 【互联网人的英语】把技能当知识,是学英语最大的坑
  9. 文科生python自学行吗_对于文科生,Python好学吗?
  10. Excel隔行插入空白行小技巧