how2j.cn

下载区
文件名 文件大小
请先登录 19m
增值内容 19m
19m
使用站长秘制下载工具
步骤 1 : ProductImageService   
步骤 2 : BaseService   
步骤 3 : BaseServiceImpl   
步骤 4 : ProductImageServiceImpl   
步骤 5 : 可运行项目   

步骤 1 :

ProductImageService

edit
增值内容,请先登录
完整的SSH模仿天猫项目,使用J2SE、前端技术(包含所有前端jsp文件)、J2EE,SSH一整套技术栈, 从无到有涵盖全部133个知识点,571个开发步骤, 充实SSH项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package com.how2java.tmall.service; import java.util.List; import com.how2java.tmall.pojo.Product; import com.how2java.tmall.pojo.ProductImage; public interface ProductImageService extends BaseService { public static final String type_single = "type_single"; public static final String type_detail = "type_detail"; public List<ProductImage> list(String key_product, Product product, String key_type, String type) ; public void setFirstProdutImage(Product product); }
package com.how2java.tmall.service.impl; import java.util.HashMap; import java.util.List; import java.util.Set; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Service; import com.how2java.tmall.pojo.Product; import com.how2java.tmall.pojo.ProductImage; import com.how2java.tmall.service.ProductImageService; @Service public class ProductImageServiceImpl extends BaseServiceImpl implements ProductImageService { @Override public void setFirstProdutImage(Product product) { if(null!=product.getFirstProductImage()) return; List<ProductImage> pis= list("product", product, "type", ProductImageService.type_single); if(!pis.isEmpty()) product.setFirstProductImage(pis.get(0)); } public List<ProductImage> list(String key_product, Product product, String key_type, String type) { DetachedCriteria dc = DetachedCriteria.forClass(clazz); dc.add(Restrictions.eq(key_product, product)); dc.add(Restrictions.eq(key_type, type)); dc.addOrder(Order.desc("id")); return this.findByCriteria(dc); } }
增值内容,请先登录
完整的SSH模仿天猫项目,使用J2SE、前端技术(包含所有前端jsp文件)、J2EE,SSH一整套技术栈, 从无到有涵盖全部133个知识点,571个开发步骤, 充实SSH项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package com.how2java.tmall.service; import java.util.List; import com.how2java.tmall.util.Page; public interface BaseService { public Integer save(Object object); public void update(Object object); public void delete(Object object); public Object get(Class clazz,int id); public Object get(int id); public List list(); public List listByPage(Page page); public int total(); public List listByParent(Object parent); public List list(Page page, Object parent); public int total(Object parentObject); public List list(Object ...pairParms); }
增值内容,请先登录
完整的SSH模仿天猫项目,使用J2SE、前端技术(包含所有前端jsp文件)、J2EE,SSH一整套技术栈, 从无到有涵盖全部133个知识点,571个开发步骤, 充实SSH项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package com.how2java.tmall.service.impl; import java.util.HashMap; import java.util.List; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Service; import com.how2java.tmall.service.BaseService; import com.how2java.tmall.util.Page; @Service public class BaseServiceImpl extends ServiceDelegateDAO implements BaseService { protected Class clazz; public BaseServiceImpl(){ try{ throw new Exception(); } catch(Exception e){ StackTraceElement stes[]= e.getStackTrace(); String serviceImpleClassName= stes[1].getClassName(); try { Class serviceImplClazz= Class.forName(serviceImpleClassName); String serviceImpleClassSimpleName = serviceImplClazz.getSimpleName(); String pojoSimpleName = serviceImpleClassSimpleName.replaceAll("ServiceImpl", ""); String pojoPackageName = serviceImplClazz.getPackage().getName().replaceAll(".service.impl", ".pojo"); String pojoFullName = pojoPackageName +"."+ pojoSimpleName; clazz=Class.forName(pojoFullName); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } } } @Override public List list() { DetachedCriteria dc = DetachedCriteria.forClass(clazz); dc.addOrder(Order.desc("id")); return findByCriteria(dc); } @Override public int total() { String hql = "select count(*) from " + clazz.getName() ; List<Long> l= find(hql); if(l.isEmpty()) return 0; Long result= l.get(0); return result.intValue(); } @Override public List<Object> listByPage(Page page) { DetachedCriteria dc = DetachedCriteria.forClass(clazz); dc.addOrder(Order.desc("id")); return findByCriteria(dc,page.getStart(),page.getCount()); } @Override public Integer save(Object object) { return (Integer) super.save(object); } @Override public Object get(Class clazz, int id) { return super.get(clazz, id); } @Override public Object get(int id) { return get(clazz, id); } @Override public List listByParent(Object parent) { String parentName= parent.getClass().getSimpleName(); String parentNameWithFirstLetterLower = StringUtils.uncapitalize(parentName); DetachedCriteria dc = DetachedCriteria.forClass(clazz); dc.add(Restrictions.eq(parentNameWithFirstLetterLower, parent)); dc.addOrder(Order.desc("id")); return findByCriteria(dc); } @Override public List list(Page page, Object parent) { String parentName= parent.getClass().getSimpleName(); String parentNameWithFirstLetterLower = StringUtils.uncapitalize(parentName); DetachedCriteria dc = DetachedCriteria.forClass(clazz); dc.add(Restrictions.eq(parentNameWithFirstLetterLower, parent)); dc.addOrder(Order.desc("id")); return findByCriteria(dc,page.getStart(),page.getCount()); } @Override public int total(Object parentObject) { String parentName= parentObject.getClass().getSimpleName(); String parentNameWithFirstLetterLower = StringUtils.uncapitalize(parentName); String sqlFormat = "select count(*) from %s bean where bean.%s = ?"; String hql = String.format(sqlFormat, clazz.getName(), parentNameWithFirstLetterLower); List<Long> l= this.find(hql,parentObject); if(l.isEmpty()) return 0; Long result= l.get(0); return result.intValue(); } @Override public List list(Object... pairParms) { HashMap<String,Object> m = new HashMap<>(); for (int i = 0; i < pairParms.length; i=i+2) m.put(pairParms[i].toString(), pairParms[i+1]); DetachedCriteria dc = DetachedCriteria.forClass(clazz); Set<String> ks = m.keySet(); for (String key : ks) { if(null==m.get(key)) dc.add(Restrictions.isNull(key)); else dc.add(Restrictions.eq(key, m.get(key))); } dc.addOrder(Order.desc("id")); return this.findByCriteria(dc); } }
步骤 4 :

ProductImageServiceImpl

edit
增值内容,请先登录
完整的SSH模仿天猫项目,使用J2SE、前端技术(包含所有前端jsp文件)、J2EE,SSH一整套技术栈, 从无到有涵盖全部133个知识点,571个开发步骤, 充实SSH项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package com.how2java.tmall.service.impl; import java.util.HashMap; import java.util.List; import java.util.Set; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Service; import com.how2java.tmall.pojo.Product; import com.how2java.tmall.pojo.ProductImage; import com.how2java.tmall.service.ProductImageService; @Service public class ProductImageServiceImpl extends BaseServiceImpl implements ProductImageService { @Override public void setFirstProdutImage(Product product) { if(null!=product.getFirstProductImage()) return; List<ProductImage> pis= list("product", product, "type", ProductImageService.type_single); if(!pis.isEmpty()) product.setFirstProductImage(pis.get(0)); } }
增值内容,请先登录
完整的SSH模仿天猫项目,使用J2SE、前端技术(包含所有前端jsp文件)、J2EE,SSH一整套技术栈, 从无到有涵盖全部133个知识点,571个开发步骤, 充实SSH项目经验,为简历加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2019-11-27 Restrictions.isNull(key)
ilqjx

站长,Restrictions.isNull(key)是判断key是否为空的吗?如果key为空返回true,dc.add(Restrictions.isNull(key))就是dc.add(true),那么dc.add(true)或者dc.add(false)是什么意思啊? 如果value为空,那我们为什么还要判断key是否为空呢?可以直接continue过去吗? 感谢站长的解答




1 个答案

how2j
答案时间:2019-11-27
Restrictions.isNull 方法返回的是 Criteria 对象,而非 boolean 对象,所以提问的基础是不存在的。 请仔细检查一下哦



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2019-10-20 如果输入奇数个参数,存在数组越界的风险
JavaCBird




for (int i = 0; i < pairParms.length; i=i+2) m.put(pairParms[i].toString(), pairParms[i+1]); 如果输入的参数不是偶数个,pairParms[i+1]会数组越界,为提高代码健壮性,是否可以改成如下: for(int i=0;i<pairParams.length;i+=2){ String key=pairParams[i].toString(); Object value=null; if(i+1<pairParams.length){ value=pairParams[i+1]; } params.put(key,value); }
for(int i=0;i<pairParams.length;i+=2){
            String key=pairParams[i].toString();
            Object value=null;
            if(i+1<pairParams.length){
                value=pairParams[i+1];
            }
            params.put(key,value);
        }

							


2 个答案

Ivan2019
答案时间:2019-12-17
直接开头加个if(0==pairParms%2)可不可以/抠鼻

how2j
答案时间:2019-10-22
嗯,很好,你这个改动让代码更健壮了,赞



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-06-26 循环这块不是很懂,为啥i=i+2
2018-05-06 步骤四写错了单词???
2017-12-20 其实可以把所有list一起合并到list(Object... pairParms)中,把所有total()合并到一个total(Object... pairParms)中


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 1 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 已下架实践项目-天猫整站SSH-Service重构-多条件查询 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 635924385
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图