Hibernate 泛型DAO实现代码
发布时间:2020-12-15 03:17:07 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import?java.io.Serializable;import?java.util.List;import?org.hibernate.Criteria;import?org.hibernate.Query;import?org.hibernate.SQLQuery;imp
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import?java.io.Serializable; import?java.util.List; import?org.hibernate.Criteria; import?org.hibernate.Query; import?org.hibernate.SQLQuery; import?org.hibernate.criterion.Criterion; /** ?*? ?*?Hibernate?Generic?DAO?Interface ?* ?*?@param?<T> Entity ?*?@param?<PK>?Primary?Key ?*/ public?interface?GenericDaoIf<T,?PK?extends?Serializable>?{ /** ?*?Get?entity?by?primary?key ?*?@param?id?Primary?key ?*?@return?Entity?object ?*/ public?T?get(final?PK?id); /** ?*?Load?entity?by?primary?key ?*?@param?id?Primary?key ?*?@return?Entity?object ?*/ public?T?load(final?PK?id); /** ?*?Remove?entity?from?session,?changes?to?this?entity?will? ?*?not?be?synchronized?with?the?database ?*?@param?entity?The?object?to?be?evicted ?*/ public?void?evict(T?entity); /** ?*?Save?entity ?*?@param?entity?The?object?to?be?saved ?*?@return?The?generated?identifier ?*/ public?PK?save(T?entity); /** ?*?Update?entity ?*?@param?entity?The?object?to?be?updated ?*/ public?void?update(T?entity); /** ?*?Save?or?update?entity ?*?@param?entity?The?object?to?be?save?or?update ?*/ public?void?saveOrUpdate(T?entity); /** ?*?Update?entity's?not-null?property ?*?(this?entity?must?have?a?primary?key?property?"id") ?*?@param?entity?The?object?to?be?updated ?*/ public?void?updateSelective(T?entity); /** ?*?Merge?entity ?*?@param?entity?The?object?to?be?merged?into?database ?*?@return?The?persistent?object ?*/ public?T?merge(T?entity); /** ?*?Delete?entity?(actually,?delete?by?primary?key) ?*?@param?entity?The?object?to?be?deleted ?*/ public?void?delete(T?entity); /** ?*?Delete?entity?by?primary?key,?first?get?then?delete ?*?@param?id?Primary?key ?*/ public?void?delete(PK?id); /** ?*?Find?all?entities ?*?@return?Query?result?list ?*/ public?List<T>?findAll(); /** ?*?Find?entities?by?page ?*?@param?page?Paging?object ?*?@return?Paging?query?result,?Comes?with?a?results?list? ?*/ public?Page<T>?findAll(Page<T>?page); /** ?*?Press?the?HQL?Query?object?list ?*?@param?hql? ?*? HQL?statement? ?*?@param?values? ?*? Number?of?variable?parameters? ?*?@return?Query?result?list ?*/ public?List<T>?find(String?hql,?Object...?values); /** ?*?Press?the?SQL?Query?object?list ?*?@param?sql ?*? SQL?statement ?*?@param?values ?*? Number?of?variable?parameters? ?*?@return?Query?result?list ?*/ public?List<T>?findBySql(String?sql,?Object...?values); /** ?*?Press?the?HQL?query?paging?. ?*?@param?page ?*? Paging?parameters?. ?*?@param?hql ?*? HQL?statement?. ?*?@param?values ?*? Number?of?variable?parameters?. ?*?@return?Paging?query?results?,Comes?with?a?results?list?. ?*/ public?Page<T>?find(Page<T>?page,?String?hql,?Object...?values); /** ?*?Press?the?SQL?query?paging?. ?*?@param?page ?*? Paging?parameters?. ?*?@param?sql ?*? SQL?statement?. ?*?@param?values ?*? Number?of?variable?parameters?. ?*?@return?Paging?query?results?,Comes?with?a?results?list?. ?*/ public?Page<T>?findBySql(Page<T>?page,?String?sql,?Object...?values); /** ?*?Press?the?HQL?query?only?object ?*?@param?hql? ?*? HQL?statement ?*?@param?values? ?*? Number?of?variable?parameters ?*?@return?A?single?instance?that?matches?the?query,?or?null?if?the?query?returns?no?results ?*/ public?Object?findUnique(String?hql,?Object...?values); /** ?*?Press?the?SQL?query?only?object ?*?@param?sql ?*? SQL?statement ?*?@param?values ?*? Number?of?variable?parameters ?*?@return?A?single?instance?that?matches?the?query,?or?null?if?the?query?returns?no?results ?*/ public?Object?findUniqueBySql(String?sql,?Object...?values); /** ?*?According?to?the?Criterion?query?object?list?. ?*?@param?criterion ?*????????????Number?of?variable?Criterion?. ?*?@return?Query?result?list ?*/ public?List<T>?findByCriteria(Criterion...?criterion); /** ?*?According?to?the?Criterion?paging?query?. ?*?@param?page ?*????????????Paging?parameters?.Including?the?pageSize,?firstResult,?orderBy,?asc,?autoCount?. ?*????????????Where?firstResult?can?be?directly?specified?,You?can?also?specify?pageNo?.?autoCountSpecifies?whether?dynamic?gets?total?number?of?results?. ?*?@param?criterion ?*????????????Number?of?variable?criterion?. ?*?@return?Paging?query?results?.Comes?with?a?results?list?and?all?query?parameters?. ?*/ public?Page<T>?findByCriteria(Page<T>?page,?Criterion...?criterion); /** ?*?Find?a?list?of?objects?by?property?. ?*?@param?propertyName?Property?name?of?the?entity ?*?@param?value?Property?value ?*?@return?Query?result?list ?*/ public?List<T>?findByProperty(String?propertyName,?Object?value); /** ?*?Find?unique?object?by?property?. ?*?@param?propertyName?Property?name?of?the?entity ?*?@param?value?Property?value ?*?@return?A?single?instance?that?matches?the?query,?or?null?if?the?query?returns?no? ?*/ public?T?findUniqueByProperty(String?propertyName,?Object?value); /** ?*?Determine?the?object's?property?value?is?unique?within?the?database?. ?*?@param?propertyName?Property?name?of?the?entity ?*?@param?newValue?New?property?value ?*/ public?boolean?isPropertyUnique(String?propertyName,?Object?newValue); /** ?*?Depending?on?the?query?function?and?argument?list?to?create?a?Query?object?,Subsequent?to?processing?,The?auxiliary?function?. ?*?@param?queryString?HQL?string ?*?@param?values?Number?of?variable?parameters ?*?@return?Query?object ?*/ public?Query?createQuery(String?queryString,?Object...?values); /** ?*?Depending?on?the?query?function?and?argument?list?to?create?a?SQL?Query?object?,The?auxiliary?function?. ?*?@param?queryString?SQL?string ?*?@param?values?Number?of?variable?parameters ?*?@return?SQL?query?object ?*/ public?SQLQuery?createSQLQuery(String?queryString,?Object...?values); /** ?*?According?to?the?Criterion?conditions?create?Criteria?,The?auxiliary?function?. ?*?@param?criterions?Number?of?variable?criterion ?*?@return?A?criteria ?*/ public?Criteria?createCriteria(Criterion...?criterions); /** ?*?Count?HQL?query?result ?*?@param?hql?HQL?statement ?*?@param?values?Number?of?variable?parameters ?*?@return?Result?count ?*/ public?long?countQueryResult(String?hql,?Object...?values); /** ?*?Count?SQL?query?result ?*?@param?sql?HQL?statement ?*?@param?values?Number?of?variable?parameters ?*?@return?Result?count ?*/ public?long?countSQLQueryResult(String?sql,?Object...?values); /** ?*?Through?this?count?query?to?obtain?the?total?number?of?objects?. ?*?@param?page?Paging?object ?*?@param?c?Query?criteria ?*?@return?The?total?number?of?objects?of?the?query?result. ?*/ public?long?countCriteriaResult(Page<T>?page,?Criteria?c); /** ?*?Save?entities?in?batch ?*?@param?entities?The?objects?to?be?saved ?*?@param?batchSize?The?number?of?every?session?flush ?*?@return?Successful?save?count ?*/ public?int?batchSave(List<T>?entities,?int?batchSize); /** ?*?Update?entities?in?batch ?*?@param?entities?The?objects?to?be?updated ?*?@param?batchSize?The?number?of?every?session?flush ?*?@return?Successful?update?count ?*/ public?int?batchUpdate(List<T>?entities,?int?batchSize); /** ?*?Save?or?update?entities?in?batch ?*?@param?entities?The?objects?to?be?saved?or?updated ?*?@param?batchSize?The?number?of?every?session?flush ?*?@return?Successful?save?count?or?update?count ?*/ public?int?batchSaveOrUpdate(List<T>?entities,?int?batchSize); /** ?*?Update?entities?(not-null?property)?in?batch ?*?@param?entities?The?objects?to?be?updated ?*?@param?batchSize?The?number?of?every?session?flush ?*?@return?Successful?update?count ?*/ public?int?batchUpdateSelective(List<T>?entities,?int?batchSize); /** ?*?Merge?entities?in?batch ?*?@param?entities?The?objects?to?be?merged ?*?@param?batchSize?The?number?of?every?session?flush ?*?@return?Successful?merge?count ?*/ public?int?batchMerge(List<T>?entities,?int?batchSize); /** ?*?Delete?entities?in?batch ?*?@param?entities?The?objects?to?be?deleted ?*?@param?batchSize?The?number?of?every?session?flush ?*?@return?successful?delete?count ?*/ public?int?batchDelete(List<T>?entities,?int?batchSize); } import?java.io.Serializable; import?java.lang.reflect.Field; import?java.lang.reflect.ParameterizedType; import?java.util.ArrayList; import?java.util.List; import?org.apache.commons.lang.StringUtils; import?org.hibernate.Criteria; import?org.hibernate.HibernateException; import?org.hibernate.Query; import?org.hibernate.SQLQuery; import?org.hibernate.Session; import?org.hibernate.SessionFactory; import?org.hibernate.criterion.CriteriaSpecification; import?org.hibernate.criterion.Criterion; import?org.hibernate.criterion.Order; import?org.hibernate.criterion.Projection; import?org.hibernate.criterion.Projections; import?org.hibernate.criterion.Restrictions; import?org.hibernate.impl.CriteriaImpl; import?org.hibernate.impl.CriteriaImpl.OrderEntry; import?org.hibernate.transform.ResultTransformer; import?org.slf4j.Logger; import?org.slf4j.LoggerFactory; import?org.springframework.util.Assert; import?org.springframework.util.ReflectionUtils; import?com.alan.mvnapp.mvn_app.dao.GenericDaoIf; import?com.alan.mvnapp.mvn_app.dao.Page; /** ?*? ?*?Hibernate?Generic?DAO?Implementation ?* ?*?@param?<T>?Entity ?*?@param?<PK>?Primary?Key ?*/ public?class?GenericDaoImpl<T,?PK?extends?Serializable>?implements?GenericDaoIf<T,?PK>?{ protected?Logger?logger?=?LoggerFactory.getLogger(getClass());? protected?SessionFactory?sessionFactory; protected?Class<?>?entityClass; public?GenericDaoImpl()?{ this.entityClass?=?(Class<?>)?((ParameterizedType)?getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } public?GenericDaoImpl(SessionFactory?sessionFactory,?Class<T>?entityClass)?{ this.sessionFactory?=?sessionFactory; this.entityClass?=?entityClass; } @SuppressWarnings("unchecked") public?T?get(final?PK?id)?{ return?(T)?sessionFactory.getCurrentSession().get(entityClass,?id); } @SuppressWarnings("unchecked") public?T?load(final?PK?id)?{ return?(T)?sessionFactory.getCurrentSession().load(entityClass,?id); } public?void?evict(T?entity)?{ sessionFactory.getCurrentSession().evict(entity); } @SuppressWarnings("unchecked") public?PK?save(T?entity)?{ Assert.notNull(entity); PK?pk?=?(PK)?sessionFactory.getCurrentSession().save(entity); logger.info("save?entity:?{}",?entity); return?pk; } public?void?update(T?entity)?{ Assert.notNull(entity); sessionFactory.getCurrentSession().update(entity); logger.info("update?entity:?{}",?entity); } public?void?saveOrUpdate(T?entity)?{ Assert.notNull(entity); sessionFactory.getCurrentSession().saveOrUpdate(entity); logger.info("save?or?update?entity:?{}",?entity); } public?void?updateSelective(T?entity)?{ Assert.notNull(entity); Field[]?fields?=?entity.getClass().getDeclaredFields(); List<String>?params?=?new?ArrayList<String>(); List<Object>?values?=?new?ArrayList<Object>(); for(Field?field?:?fields)?{ String?fieldName?=?field.getName(); field.setAccessible(true); Object?value?=?ReflectionUtils.getField(field,?entity); if(value?!=?null)?{ params.add(fieldName); values.add(value); } } if(!params.isEmpty())?{ StringBuffer?sb?=?new?StringBuffer("update?"? +?entityClass.getSimpleName()?+?"?set?"); for(int?i?=?0;?i?<?params.size();?i++)?{ sb.append(params.get(i)?+?"?=???"); if(i?<?params.size()?-?1)?{ sb.append(",?"); } } Field?pkField?=?ReflectionUtils.findField(entityClass,?"id"); Assert.notNull(pkField); pkField.setAccessible(true); sb.append("?where?id?=???"); values.add(ReflectionUtils.getField(pkField,?entity)); createQuery(sb.toString(),?values.toArray()).executeUpdate(); logger.info("update?entity?selecitive:?{}"?+?entity); } } @SuppressWarnings("unchecked") public?T?merge(T?entity)?{ Assert.notNull(entity); T?t?=?(T)?sessionFactory.getCurrentSession().merge(entity); logger.info("merge?entity:?{}",?entity); return?t; } public?void?delete(T?entity)?{ Assert.notNull(entity); sessionFactory.getCurrentSession().delete(entity); logger.info("delete?entity:?{}",?entity); } public?void?delete(PK?id)?{ Assert.notNull(id); delete(get(id)); } public?List<T>?findAll()?{ return?findByCriteria(); } public?Page<T>?findAll(Page<T>?page)?{ return?findByCriteria(page); } @SuppressWarnings("unchecked") public?List<T>?find(String?hql,?Object...?values)?{ return?(List<T>)createQuery(hql,?values).list(); } @SuppressWarnings("unchecked") public?List<T>?findBySql(String?sql,?Object...?values)?{ return?(List<T>)createSQLQuery(sql,?values).addEntity(entityClass).list(); } @SuppressWarnings("unchecked") public?Page<T>?find(Page<T>?page,?Object...?values)?{ Assert.notNull(page); if(page.isAutoCount())?{ page.setTotalCount(countQueryResult(hql,?values)); } Query?q?=?createQuery(hql,?values); if(page.isFirstSetted())?{ q.setFirstResult(page.getFirst()); } if(page.isPageSizeSetted())?{ q.setMaxResults(page.getPageSize()); } page.setResult((List<T>)q.list()); return?page; } @SuppressWarnings("unchecked") public?Page<T>?findBySql(Page<T>?page,?Object...?values)?{ Assert.notNull(page); if(page.isAutoCount())?{ page.setTotalCount(countSQLQueryResult(sql,?values)); } SQLQuery?q?=?createSQLQuery(sql,?values); if(page.isFirstSetted())?{ q.setFirstResult(page.getFirst()); } if(page.isPageSizeSetted())?{ q.setMaxResults(page.getPageSize()); } page.setResult((List<T>)q.addEntity(entityClass).list()); return?page; } public?Object?findUnique(String?hql,?Object...?values)?{ return?createQuery(hql,?values).uniqueResult(); } public?Object?findUniqueBySql(String?sql,?Object...?values)?{ return?createSQLQuery(sql,?values).addEntity(entityClass).uniqueResult(); } @SuppressWarnings("unchecked") public?List<T>?findByCriteria(Criterion...?criterion)?{ return?(List<T>)createCriteria(criterion).list(); } @SuppressWarnings("unchecked") public?Page<T>?findByCriteria(Page<T>?page,?Criterion...?criterion)?{ Assert.notNull(page); Criteria?c?=?createCriteria(criterion); if(page.isAutoCount())?{ page.setTotalCount(countCriteriaResult(page,?c)); } if(page.isFirstSetted())?{ c.setFirstResult(page.getFirst()); } if(page.isPageSizeSetted())?{ c.setMaxResults(page.getPageSize()); } if(page.isOrderBySetted())?{ if(page.getOrder().toUpperCase().equals("AES"))?{ c.addOrder(Order.asc(page.getOrderBy())); }?else?{ c.addOrder(Order.desc(page.getOrderBy())); } } page.setResult((List<T>)c.list()); return?page; } @SuppressWarnings("unchecked") public?List<T>?findByProperty(String?propertyName,?Object?value)?{ Assert.hasText(propertyName); return?(List<T>)?createCriteria(Restrictions.eq(propertyName,?value)).list(); } @SuppressWarnings("unchecked") public?T?findUniqueByProperty(String?propertyName,?Object?value)?{ Assert.hasText(propertyName); return?(T)createCriteria(Restrictions.eq(propertyName,?value)).uniqueResult(); } public?boolean?isPropertyUnique(String?propertyName,?Object?newValue)?{ if(newValue?==?null)?return?false; try?{ Object?obj?=?findUniqueByProperty(propertyName,?newValue); return?obj?==?null; }?catch?(HibernateException?e)?{ return?false; } } public?Query?createQuery(String?queryString,?Object...?values)?{ Assert.hasText(queryString); Query?queryObject?=?sessionFactory.getCurrentSession().createQuery(queryString); if(values?!=?null)?{ for(int?i?=?0;?i?<?values.length;?i++)?{ queryObject.setParameter(i,?values[i]); } } return?queryObject; } public?SQLQuery?createSQLQuery(String?queryString,?Object...?values)?{ Assert.hasText(queryString); SQLQuery?queryObject?=?sessionFactory.getCurrentSession().createSQLQuery(queryString); if(values?!=?null)?{ for(int?i?=?0;?i?<?values.length;?i++)?{ queryObject.setParameter(i,?values[i]); } } return?queryObject; } public?Criteria?createCriteria(Criterion...?criterions)?{ Criteria?criteria?=?sessionFactory.getCurrentSession().createCriteria(entityClass); for(Criterion?c?:?criterions)?{ criteria.add(c); } return?criteria; } public?long?countQueryResult(String?hql,?Object...?values)?{ hql?=?hql.replaceAll("?[Ff][Rr][Oo][Mm]?",?"?from?"); String?str?=?hql.toLowerCase(); if(!StringUtils.contains(str,?"group?by") &&?!StringUtils.contains(str,?"union") &&?!StringUtils.contains(str,?"minus") &&?!StringUtils.contains(str,?"intersect") &&?!StringUtils.contains(StringUtils.substringAfter(str,?"from"),?"(") )?{ str?=?"select?count(*)?from?"?+?StringUtils.substringAfter(hql,?"from"); return?((Number)createQuery(hql,?values).iterate().next()).longValue(); }?else?{ throw?new?HibernateException("not?support?this?HQL?:?"?+?hql); } } public?long?countSQLQueryResult(String?sql,?Object...?values)?{ String?str?=?sql.toLowerCase(); String?beforeFrom?=?StringUtils.substringBefore(str,?"from"); if(StringUtils.countMatches(beforeFrom,?"(")? !=?StringUtils.countMatches(beforeFrom,?")") ||?StringUtils.contains(str,?"group?by") ||?StringUtils.contains(str,?"union") ||?StringUtils.contains(str,?"minus") ||?StringUtils.contains(str,?"intersect"))?{ str?=?"select?count(*)?from?("?+?sql?+?")?as?tmp"; }?else?{ str?=?"select?count(*)?from?"?+? StringUtils.substringAfter(str,?"from"); } Object?ret?=?createSQLQuery(str,?values).uniqueResult(); return?(ret?==?null???0?:?((Number)ret).longValue()); } @SuppressWarnings("unchecked") public?long?countCriteriaResult(Page<T>?page,?Criteria?c)?{ CriteriaImpl?cimpl?=?(CriteriaImpl)c; //?First?Projection,?ResultTransformer,?OrderBy?out?,Empty?after?a?three?Count?operations? Projection?projection?=?cimpl.getProjection(); ResultTransformer?transformer?=?cimpl.getResultTransformer(); List<CriteriaImpl.OrderEntry>?orderEntries?=?null; try?{ Field?orderEntriesField?=?cimpl.getClass().getDeclaredField("orderEntries"); orderEntriesField.setAccessible(true); orderEntries?=?(List<OrderEntry>)?ReflectionUtils.getField( orderEntriesField,?cimpl); ReflectionUtils.setField( orderEntriesField,?cimpl,? new?ArrayList<OrderEntry>()); }?catch?(Exception?e)?{ logger.error("Not?may?throw?an?exception?:{}",?e.getMessage()); } //?Do?Count?query? long?totalCount?=?(Long)?c.setProjection(Projections.rowCount()) .uniqueResult(); if?(totalCount?<?1) return?-1; //?Will?the?Projection?and?OrderBy?before?conditions?back?to?go?back? c.setProjection(projection); if?(projection?==?null)?{ c.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); } if?(transformer?!=?null)?{ c.setResultTransformer(transformer); } try?{ Field?orderEntriesField?=?cimpl.getClass().getDeclaredField("orderEntries"); orderEntriesField.setAccessible(true); ReflectionUtils.setField(orderEntriesField,?orderEntries); }?catch?(Exception?e)?{ logger.error("Not?may?throw?an?exception?:{}",?e.getMessage()); } return?totalCount; } private?int?tuneBatchSize(int?batchSize)?{ if(batchSize?<?20)?{ batchSize?=?20; }?else?if(batchSize?>?200)?{ batchSize?=?200; } return?batchSize; } public?int?batchSave(List<T>?entities,?int?batchSize)?{ Assert.notEmpty(entities); batchSize?=?tuneBatchSize(batchSize); int?count?=?0; Session?session?=?sessionFactory.getCurrentSession(); for(int?i?=?0;?i?<?entities.size();?i++)?{ session.save(entities.get(i)); if(i?%?batchSize?==?0?||?i?==?entities.size()?-?1)?{ session.flush(); session.clear(); } count++; } return?count; } public?int?batchUpdate(List<T>?entities,?int?batchSize)?{ Assert.notEmpty(entities); batchSize?=?tuneBatchSize(batchSize); int?count?=?0; Session?session?=?sessionFactory.getCurrentSession(); for(int?i?=?0;?i?<?entities.size();?i++)?{ session.update(entities.get(i)); if(i?%?batchSize?==?0?||?i?==?entities.size()?-?1)?{ session.flush(); session.clear(); } count++; } return?count; } public?int?batchSaveOrUpdate(List<T>?entities,?int?batchSize)?{ Assert.notEmpty(entities); batchSize?=?tuneBatchSize(batchSize); int?count?=?0; Session?session?=?sessionFactory.getCurrentSession(); for(int?i?=?0;?i?<?entities.size();?i++)?{ session.saveOrUpdate(entities.get(i)); if(i?%?batchSize?==?0?||?i?==?entities.size()?-?1)?{ session.flush(); session.clear(); } count++; } return?count; } public?int?batchUpdateSelective(List<T>?entities,?int?batchSize)?{ Assert.notEmpty(entities); batchSize?=?tuneBatchSize(batchSize); int?count?=?0; Session?session?=?sessionFactory.getCurrentSession(); for(int?i?=?0;?i?<?entities.size();?i++)?{ updateSelective(entities.get(i)); if(i?%?batchSize?==?0?||?i?==?entities.size()?-?1)?{ session.flush(); session.clear(); } count++; } return?count; } public?int?batchMerge(List<T>?entities,?int?batchSize)?{ Assert.notEmpty(entities); batchSize?=?tuneBatchSize(batchSize); int?count?=?0; Session?session?=?sessionFactory.getCurrentSession(); for(int?i?=?0;?i?<?entities.size();?i++)?{ session.merge(entities.get(i)); if(i?%?batchSize?==?0?||?i?==?entities.size()?-?1)?{ session.flush(); session.clear(); } count++; } return?count; } public?int?batchDelete(List<T>?entities,?int?batchSize)?{ Assert.notEmpty(entities); batchSize?=?tuneBatchSize(batchSize); int?count?=?0; Session?session?=?sessionFactory.getCurrentSession(); for(int?i?=?0;?i?<?entities.size();?i++)?{ session.delete(entities.get(i)); if(i?%?batchSize?==?0?||?i?==?entities.size()?-?1)?{ session.flush(); session.clear(); } count++; } return?count; } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |