步骤 2 : BaseService 步骤 3 : BaseServiceImpl 步骤 4 : ProductImageServiceImpl 步骤 5 : 可运行项目 
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的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);
	}
    
}
 
								
										
									
								
							
				
					
						增值内容,请先登录
					
				
				 
		
					
		
		
					
					完整的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) 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
1 个答案 
	 
how2j 跳转到问题位置 答案时间:2019-11-27 Restrictions.isNull 方法返回的是 Criteria 对象,而非 boolean 对象,所以提问的基础是不存在的。
请仔细检查一下哦 
		
							
		
		
		
		
	
	
	
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2019-10-20
	  		
	  				
	  					 
	  
					
						如果输入奇数个参数,存在数组越界的风险 
					
					
						
							
						
											
							
					
					
					
	   
	  
	  
	  
 
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 条以前的提问,请 点击查看 
			
			提问之前请登陆
			
		 
		提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢	
	 
 | 
	|||||||||||||||||