⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bookloaddaoimpl.java

📁 本系统实现了从五个网站上搜索的图书进行整合后
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			        temp3 += " book.bookName not like ? and"; 
                }
			    final String tempStr = temp3.substring(0, temp3.length()-3);
			    
		        String tem3 = "select count(*) from Book as book where (";			        
		        for(int i = 0;i<temList.size();i++){
		        	
		        	   tem3 += " book.bookName like ? or"; 	
		        }
		        					    
		        String strHql3 = tem3.substring(0, tem3.length()-2) + ")and ("+tempStr+")";
		        /**/
		        String args [] = new String [temList.size()+keywordArr.size()];
		        int i = 0;
		        for(;i<temList.size();i++){
		        		args[i] = "%"+temList.get(i)+"%";
		        }
		        for(int j = i;j<temList.size() + keywordArr.size();j++)
		        	args[j] = "%"+keywordArr.get(j-i)+"%";
		        List secondList = this.getHibernateTemplate().find(strHql3, args);
		        if(null != secondList)
		        secondNum =  (Long)secondList.get(0);	        
		   }
	      /**/
	      num = firstNum + secondNum;
	      //System.out.println("firstNum:"+firstNum+"secondNum:"+ secondNum);
		}
		return num;
	}
	/**
	* Function:  loadBookNumByAuthor
	* Description: 从数据库中获得按作者方式检索的记录总数
	* Calls:  no
	* Called By:  this.loadBookNum()
	* @param bookAuthor as String
	* @return long
	* @throws no
	*/
	public long loadBookNumByAuthor(String bookAuthor){
		
		long num = 0;
		List<String> keywordArr = new ArrayList<String>();
		/*按" "进行分词处理,分成单独的一条条记录*/
		StringTokenizer st = new StringTokenizer(bookAuthor, " ");
		
		while (st.hasMoreElements()) {

			keywordArr.add(st.nextToken());
		}
		if(keywordArr.size() == 1){
			/*完全匹配,向前匹配,向后匹配的记录总数*/
	    	String temHql = "select count(*) from Book as book where book.bookAuthor like ?";
	    	List firstList = this.getHibernateTemplate().find(temHql, "%"+bookAuthor+"%");
	    	if(firstList.size()>0)
	    		num =  (Long)firstList.get(0);
    	
	    }else{
			/*多个关键字同时存在和不同时存在时的记录数*/
			String firstHql = "select count(*) from Book as book where";	
				 
			for(int i = 0;i<keywordArr.size();i++){
			        	
				firstHql += " book.bookAuthor like ? or"; 
	        }
			firstHql =firstHql.substring(0, firstHql.length()-2);
			/*查询参数*/
			String []temKey = new String[keywordArr.size()];
			for(int j = 0;j<keywordArr.size();j++)temKey[j] = "%" + keywordArr.get(j) + "%";
	        List firstList = this.getHibernateTemplate().find(firstHql, temKey);
	        if(null != firstList)
	        	num =  (Long)firstList.get(0); 
	    }
		return num;
	}
	/**
	* Function:  loadBookPublisherNum
	* Description: 从数据库中获得按出版社匹配的记录总数
	* Calls:  no
	* Called By:  this.loadBookNum()
	* @param bookPublisher as String
	* @return long
	* @throws no
	*/
	public long loadBookPublisherNum(String bookPublisher){
		
		long num = 0;
		List<String> keywordArr = new ArrayList<String>();
		/*按" "进行分词处理,分成单独的一条条记录*/
		StringTokenizer st = new StringTokenizer(bookPublisher, " ");
		
		while (st.hasMoreElements()) {

			keywordArr.add(st.nextToken());
		}
		if(keywordArr.size() == 1){
			/*完全匹配,向前匹配,向后匹配的记录总数*/
	    	String temHql = "select count(*) from Book as book where book.bookPublisher like ?";
	    	List firstList = this.getHibernateTemplate().find(temHql, "%"+bookPublisher+"%");
	    	if(firstList.size()>0)
	    		num =  (Long)firstList.get(0);
    	
	    }else{
			/*多个关键字同时存在和不同时存在时的记录数*/
			String firstHql = "select count(*) from Book as book where";	
				 
			for(int i = 0;i<keywordArr.size();i++){
			        	
				firstHql += " book.bookPublisher like ? or"; 
	        }
			firstHql =firstHql.substring(0, firstHql.length()-2);
			/*查询参数*/
			String []temKey = new String[keywordArr.size()];
			for(int j = 0;j<keywordArr.size();j++)temKey[j] = "%" + keywordArr.get(j) + "%";
	        List firstList = this.getHibernateTemplate().find(firstHql, temKey);
	        if(null != firstList)
	        	num =  (Long)firstList.get(0); 
	    }
		return num;
	}
	/**
	* Function:  getSQL
	* Description: 从数据库中获得满足高级搜索条件的记录总数
	* Calls:  no
	* Called By:  this.loadAdvancedBookNum(),this.loadAdvancedBook()
	* @param list as ArrayList<String>
	* @return String
	* @throws no
	*/
	public String getSQL(ArrayList<String> list){
				
		String conditionSQL = "";
		String whereSQL = "where";
		if(!"null".equals(list.get(0))){
			
			String temkeyword = list.get(0).replace("%20", "+");
			/*按" "进行分词处理,分成单独的一条条记录*/
			StringTokenizer temst = new StringTokenizer(temkeyword, " ");
			List<String> keywordArr = new ArrayList<String>();
			while (temst.hasMoreElements()) {
				/*因为分词之后会有一个是空的,所以进行一下判断*/
				keywordArr.add(temst.nextToken());
			}
			for(int i = 0;i<keywordArr.size();i++){
				
				conditionSQL = conditionSQL + "bookName like '%" +keywordArr.get(i)+"%' and ";
			}
		}
		if (!"null".equals(list.get(1))){
			conditionSQL = conditionSQL + "bookAuthor like '%" + list.get(1).replace("%20", "+")+"%' and ";
		}
		if (!"null".equals(list.get(2))){
			conditionSQL = conditionSQL + "bookISBN like '%" + list.get(2).replace("%20", "+")+"%' and ";
		}
		if (!"null".equals(list.get(3))){
			conditionSQL = conditionSQL + "bookPublisher like '%" + list.get(3).replace("%20", "+")+"%' and ";
		}
		if (!"null".equals(list.get(4))&&"null".equals(list.get(6))){
			conditionSQL = conditionSQL + "year(bookPublishTime)>=" + Integer.valueOf(list.get(4).replace("%20", "+")) + " and ";	
		}
		if("null".equals(list.get(4))&&!"null".equals(list.get(6))){
			conditionSQL = conditionSQL + "year(bookPublishTime)<=" + Integer.valueOf(list.get(6).replace("%20", "+")) + " and "; 
			//System.out.println("SSSSSSSSSSSS"+conditionSQL+list.get(6));
		}
		if (!"null".equals(list.get(4))&&!"null".equals(list.get(6))){
			conditionSQL = conditionSQL + "year(bookPublishTime) >= " + Integer.valueOf(list.get(4).replace("%20", "+"))+" and "
			             + "year(bookPublishTime)<="+Integer.valueOf(list.get(6).replace("%20", "+"))+" and ";
			//System.out.println("SDDSDSD"+list.get(6));
		}
		if (!"null".equals(list.get(5))&&"null".equals(list.get(7))){
			conditionSQL = conditionSQL + "month(bookPublishTime)>=" + Integer.valueOf(list.get(5).replace("%20", "+")) + " and ";
		}
		if("null".equals(list.get(5))&&!"null".equals(list.get(7))){
			conditionSQL = conditionSQL + "month(bookPublishTime)<=" + Integer.valueOf(list.get(7).replace("%20", "+")) + " and "; 
		}
		if (!"null".equals(list.get(5))&&!"null".equals(list.get(7))){
			conditionSQL = conditionSQL + "month(bookPublishTime) >= " + Integer.valueOf(list.get(5).replace("%20", "+"))+" and "
			             + "month(bookPublishTime)<="+Integer.valueOf(list.get(7).replace("%20", "+"))+" and ";
		
		}
		//if (Float.valueOf(list.get(8)) != 0.0&& Float.valueOf(list.get(9)) == 0.0){
		if (!"null".equals(list.get(8).replace("%20", "+"))&& "null".equals(list.get(9).replace("%20", "+"))){
			conditionSQL = conditionSQL + "bookFixPrice>=" + list.get(8).replace("%20", "+") + " and ";
		}
		//if (Float.valueOf(list.get(8)) == 0.0&& Float.valueOf(list.get(9))!= 0.0){
		if ("null".equals(list.get(8).replace("%20", "+"))&& !"null".equals(list.get(9).replace("%20", "+"))){
			conditionSQL = conditionSQL +"bookFixPrice<=" + list.get(9).replace("%20", "+") + " and ";
		}
		//if (Float.valueOf(list.get(8)) != 0.0&& Float.valueOf(list.get(9)) != 0.0){
		if (!"null".equals(list.get(8).replace("%20", "+"))&& !"null".equals(list.get(9).replace("%20", "+"))){
			conditionSQL = conditionSQL +"bookFixPrice>=" + list.get(8).replace("%20", "+") + " and "+"bookFixPrice<=" + list.get(9).replace("%20", "+")  + " and ";
		}
		conditionSQL = conditionSQL.substring(0, conditionSQL.length() - 4);
		String sql = whereSQL+" "+conditionSQL;
		return sql;
	}

	private ArrayList<Book> loadBookByRank(String keyword,String searchKind,int currPage,String rankKind){
		
		ArrayList<Book> bookList = new ArrayList<Book>();
//		
//    	if("relavancy".equals(rankKind)){
//    		if(!"advanced".equals(searchKind))
//    			bookList = this.loadBook(keyword, searchKind, currPage);
//    		else
//    			bookList = this.loadAdvancedBook(keyword, currPage);
//    		return bookList;
//    	}
    	/**/
		String tempRank = "";
		if("bookPublishTime".equals(rankKind))
			tempRank = " order by book.bookPublishTime desc ";
		else if("bookFixPrice".equals(rankKind))
			tempRank = " order by book.bookFixPrice asc ";
		
		final String tempKind = searchKind;
		final List<String> keywordArr = new ArrayList<String>();
		final ArrayList<String> temList = new ArrayList<String>();   
		/*按" "和"+"进行分词处理,分成单独的一条条记录*/
		StringTokenizer st = new StringTokenizer(keyword, " ");	
		while (st.hasMoreElements()) {

			keywordArr.add(st.nextToken());
		}
		//System.out.println("关键字个数:"+keywordArr.size() + keywordArr.get(0));
		
	    /*处理查询hql语句*/								 
	    String tempStr = "from Book as book where ";	 
        if("name".equals(tempKind)||"all".equals(tempKind)){
        	
    		/*如果输入的关键字不是一个时的查询方式*/
		   if(keywordArr.size()>1){			
		        /*对每个关键字进行分词处理*/
			    for(int m = 0;m<keywordArr.size();m++){				    	
			        /*如果长度大于2,就进行分词处理*/
			        if(keywordArr.get(m).length()>2){			        	
				        try {        
				           TokenStream ts = this.writerAnalyzer.tokenStream("", new StringReader(keywordArr.get(m)));
				           Token token ;
				           while ((token = ts.next()) != null) {
				        	    temList.add(token.toString().substring(1, token.toString().indexOf(",")).trim());
					            //System.out.println(token.toString().substring(1, token.toString().indexOf(",")));
				           }
				        }catch (Exception e) {
				            logger.error(e + "==========" + "庖丁解牛分词出错" + "==========");
				              //  e.printStackTrace();
				               // System.out.println("poading error");	
				        }
			       }
			    }
			}else {
		        if(keyword.length()>2){			        	
			        try {        
			           TokenStream ts = this.writerAnalyzer.tokenStream("", new StringReader(keyword));
			           Token token ;
			           while ((token = ts.next()) != null) {
			        	    temList.add(token.toString().substring(1, token.toString().indexOf(",")).trim());
				           // System.out.println(token.toString().substring(1, token.toString().indexOf(",")));
			           }
			        }catch (Exception e) {
					    logger.error(e);
			               // e.printStackTrace();
			               // System.out.println("poading error");	
			        }
		        }    
			}
	        for(int j=0;j<keywordArr.size();j++){
		           tempStr += " book.bookName like :bookname" + j + " or";
		    }
			/*如果分词之后,个数大于零,则查询对于每个分词的模糊匹配记录数*/
			if(temList.size()>0){	  				        
			     for(int i = 0;i<temList.size();i++){
			        	
			       tempStr += " book.bookName like :namebook" + i + " or"; 	
			     }
			}
        }
        if("author".equals(tempKind)||"all".equals(tempKind)){
        	
		    for(int j=0;j<keywordArr.size();j++){
			     tempStr += " book.bookAuthor like :bookauthor" + j + " or";
			}
        }
        if("publisher".equals(tempKind)||"all".equals(tempKind)){
        	
		    for(int j=0;j<keywordArr.size();j++){
			     tempStr += " book.bookPublisher like :bookpublisher" + j + " or";
			}
        }
		 /*处理分页*/
	     final int secondResult = (int) ((currPage-1)*10);
	     final int secondEndResult = 10;
	     /*向前匹配的hql*/
	     final String strHql2 = tempStr.substring(0, tempStr.length()-2) + tempRank; 
	     //System.out.println(strHql2);
		 bookList = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
		    public  List doInHibernate(Session session)  throws  HibernateException, SQLException   {
		          Query query = session.createQuery( strHql2);
		          /**/
		          if("all".equals(tempKind)){
			          for(int j = 0;j<keywordArr.size();j++)
				            query.setString("bookname"+j, "%"+keywordArr.get(j)+"%");
			          for(int i = 0;i<temList.size();i++)
			               query.setString("namebook"+i, "%"+temList.get(i)+"%");
				      for(int j = 0;j<keywordArr.size();j++)
					       query.setString("bookauthor"+j, "%"+keywordArr.get(j)+"%");
				      for(int j = 0;j<keywordArr.size();j++)
					       query.setString("bookpublisher"+j, "%"+keywordArr.get(j)+"%");
		          }else if("name".equals(tempKind)){
			          for(int j = 0;j<keywordArr.size();j++)
				            query.setString("bookname"+j, "%"+keywordArr.get(j)+"%");
			          for(int i = 0;i<temList.size();i++)
			               query.setString("namebook"+i, "%"+temList.get(i)+"%");
		          }else if("author".equals(tempKind)){
				      for(int j = 0;j<keywordArr.size();j++)
					       query.setString("bookauthor"+j, "%"+keywordArr.get(j)+"%");
		          }else if("publisher".equals(tempKind)){
				      for(int j = 0;j<keywordArr.size();j++)
					       query.setString("bookpublisher"+j, "%"+keywordArr.get(j)+"%");
		          }

		          query.setFirstResult(secondResult);
		          query.setMaxResults(secondEndResult);
		          return  query.list();
		     }
		  });	 
		 //System.out.println("size>>" + bookList.size());
//		 for(Iterator it = bookList.iterator();it.hasNext();){
//			 Book book = (Book)it.next();
//			 System.out.println(book.getBookFixPrice());
//		 } 
		 return bookList;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -