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

📄 bookloaddaoimpl.java

📁 本系统实现了从五个网站上搜索的图书进行整合后
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
			            public  List doInHibernate(Session session){
			                Query query = session.createQuery( strHql2);
			                query.setString("bookauthor", keyword+"%");
			                query.setString("authorbook", keyword);
			                query.setFirstResult(secondResult);
			                query.setMaxResults(secondEndResult);
			                return  query.list();
			            }
			       });	    
//			       for(int i = 0;i<result2.size();i++){
//			           System.out.println("result2>>"+result2.get(i).getBookAuthor());  
//			       }       
		         }

		        	/*查询出向后匹配的记录*/
		           if((result1.size()+result2.size())<10){
		        	   /*完全匹配和向前匹配的记录总数*/
			    	   long secondNum = 0;
			           String secondHql = "select count(*) from Book as book where book.bookAuthor like ?";
			           List secondList = this.getHibernateTemplate().find(secondHql, bookAuthor+"%");
			           if(null != secondList)
			           secondNum =  (Long)secondList.get(0);
			           /*处理分页*/
		        	   final int thirdResult = (int) ((currPage-1)*10 - secondNum);
		        	   final int thirdEndResult = 10 - result1.size() - result2.size();
		        	   /*查询hql*/
		        	   //final String strHql3 = "from Book as book where book.bookName like :bookname and book.bookName != :namebook and book.bookName not like :namelikebook";
		        	   final String strHql3 = "from Book as book where book.bookAuthor like :bookauthor and book.bookAuthor not like :authorlikebook";
			            result3 = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
			                public  List doInHibernate(Session session){
			                   Query query = session.createQuery( strHql3);
			                   query.setString("bookauthor", "%"+keyword+"%");
			                   //query.setString("namebook", keyword);
			                   query.setString("authorlikebook", keyword+"%");
			                   query.setFirstResult(thirdResult);
			                   query.setMaxResults(thirdEndResult);
			                   return  query.list();
			               }
			           } );	    
//			            for(int i = 0;i<result3.size();i++){
//			            	System.out.println("result3>>"+result3.get(i).getBookAuthor());  
//			            } 
		           }
		}
	    if(result1.size()>0)result.addAll(result1);
	    if(result2.size()>0)result.addAll(result2);
	    if(result3.size()>0)result.addAll(result3);
	    return result;
	}
	/**
	* Function:  loadBookByPublisher
	* Description: 从数据库中获得按出版社方式检索的所有记录
	* Calls:  no
	* Called By:  this.loadBook()
	* @param publisher as String,currPage as int
	* @return ArrayList<Book>
	* @throws no
	*/
	private ArrayList<Book> loadBookByPublisher(String publisher,int currPage){
		
		ArrayList<Book> result = new ArrayList<Book>();
        ArrayList<Book> result1 = new ArrayList<Book>();
        ArrayList<Book> result2 = new ArrayList<Book>();
        ArrayList<Book> result3 = new ArrayList<Book>();
		final List<String> keywordArr = new ArrayList<String>();
		/*按" "和"+"进行分词处理,分成单独的一条条记录*/
		StringTokenizer st = new StringTokenizer(publisher, " ");
		
		while (st.hasMoreElements()) {

			keywordArr.add(st.nextToken());
		}
		/*如果输入的关键字不是一个时的查询方式*/
		if(keywordArr.size()>1){

            /*多个关键字同时存在时*/
			String tem1 = "from Book as book where";	
			 
		     for(int i = 0;i<keywordArr.size();i++){
		        	
		        tem1 += " book.bookPublisher like :bookpublisher"+i+ " and"; 
            }
		    final String strHql1 = tem1.substring(0, tem1.length()-3);
		    /*处理分页*/
		    final int firstResult = (currPage-1)*10;
		    final int firstEndResult = 10;
	        result1 = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
	              public  List doInHibernate(Session session){
	                 Query query = session.createQuery( strHql1);
	                 for(int j = 0;j<keywordArr.size();j++)
	                     query.setString("bookpublisher"+j, "%"+keywordArr.get(j)+"%");
	                 query.setFirstResult(firstResult);
	                 query.setMaxResults(firstEndResult);
	                 return  query.list();
	             }
	        } );
//            System.out.println("result1:"+result1.size());
//	        for(int i = 0;i<result1.size();i++){
//	            System.out.println("result1>>"+result1.get(i).getBookPublisher());  
//	        }
	       
	        /*多个关键字同时匹配不够十条时,进行不同时匹配查询*/
	        if(result1.size()<10){
	        	
	        	 /*完全匹配的记录总数*/
		    	long firstNum = 0;
				String firstHql = "select count(*) from Book as book where";	
					 
				for(int i = 0;i<keywordArr.size();i++){
				        	
					 firstHql += " book.bookPublisher like ? and"; 
                }
				firstHql =firstHql.substring(0, firstHql.length()-3);
				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)
		        firstNum =  (Long)firstList.get(0);
		        //System.out.println("firstNum:"+firstNum);
				String tem2 = "from Book as tushu where (";	
				 
			    for(int i = 0;i<keywordArr.size();i++){
			        	
			        tem2 += " tushu.bookPublisher like :publisherbook"+i+ " or"; 
                }
			    final String strHq2 = tem2.substring(0, tem2.length()-2) + ")and not exists ("+strHql1+"and tushu.id=book.id)";
			    /*处理分页*/
			    final int secondResult = (int) ((currPage-1)*10 - firstNum);
			    final int secondEndResult = 10-result1.size();
		        result2 = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
		              public  List doInHibernate(Session session){
		                 Query query = session.createQuery( strHq2);
		                 for(int j = 0;j<keywordArr.size();j++)
		                     query.setString("publisherbook"+j, "%"+keywordArr.get(j)+"%");
		                 for(int k = 0;k<keywordArr.size();k++)
			                 query.setString("bookpublisher"+k, "%"+keywordArr.get(k)+"%");
		                 query.setFirstResult(secondResult);
		                 query.setMaxResults(secondEndResult);
		                 return  query.list();
		             }
		       });
//	            System.out.println("result2:"+result2.size());
//		        for(int i = 0;i<result2.size();i++){
//		            System.out.println("result2>"+result2.get(i).getBookPublisher());  
//		        } 				        
	       }  
		}else{
			 /*查询出完全匹配的记录*/
            final String strHql1 = "from Book as book where book.bookPublisher = :bookpublisher";
            /*处理分页*/
            final int firstResult = (currPage-1)*10;
            final String keyword = keywordArr.get(0);	 
            result1 = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
                public  List doInHibernate(Session session){
                   Query query = session.createQuery( strHql1);
                   query.setString("bookpublisher", keyword);
                   //Query query = session.createCriteria(strHql, "%"+keyword+"%");
                   query.setFirstResult(firstResult);
                   query.setMaxResults(10);
                   return  query.list();
               }
           } );
//	            for(int i = 0;i<result1.size();i++){
//	            	System.out.println("result1>>"+result1.get(i).getBookPublisher());  
//	            }
			       /*查询向前匹配的记录*/ 		        	
		        if(result1.size()<10){
		        	   
		          /*完全匹配的记录总数*/
			      long firstNum = 0;
			      String firstHql = "select count(*) from Book as book where book.bookPublisher = ?";
			      List firstList = this.getHibernateTemplate().find(firstHql, publisher);
			      if(null != firstList)
			      firstNum =  (Long)firstList.get(0);
			      /*处理分页*/
		          final int secondResult = (int) ((currPage-1)*10 - firstNum);
		          final int secondEndResult = 10 - result1.size();
		          /*向前匹配的hql*/
		          final String strHql2 = "from Book as book where book.bookPublisher like :bookpublisher and book.bookPublisher != :publisherbook"; 
			      result2 = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
			            public  List doInHibernate(Session session){
			                Query query = session.createQuery( strHql2);
			                query.setString("bookpublisher", keyword+"%");
			                query.setString("publisherbook", keyword);
			                query.setFirstResult(secondResult);
			                query.setMaxResults(secondEndResult);
			                return  query.list();
			            }
			       });	    
//			       for(int i = 0;i<result2.size();i++){
//			           System.out.println("result2>>"+result2.get(i).getBookPublisher());  
//			       }       
		         }

		        	/*查询出向后匹配的记录*/
		           if((result1.size()+result2.size())<10){
		        	   /*完全匹配和向前匹配的记录总数*/
			    	   long secondNum = 0;
			           String secondHql = "select count(*) from Book as book where book.bookPublisher like ?";
			           List secondList = this.getHibernateTemplate().find(secondHql, publisher+"%");
			           if(null != secondList)
			           secondNum =  (Long)secondList.get(0);
			           /*处理分页*/
		        	   final int thirdResult = (int) ((currPage-1)*10 - secondNum);
		        	   final int thirdEndResult = 10 - result1.size() - result2.size();
		        	   /*查询hql*/
		        	   //final String strHql3 = "from Book as book where book.bookName like :bookname and book.bookName != :namebook and book.bookName not like :namelikebook";
		        	   final String strHql3 = "from Book as book where book.bookPublisher like :bookpublisher and book.bookPublisher not like :publisherlikebook";
			            result3 = (ArrayList<Book>) this .getHibernateTemplate().executeFind( new  HibernateCallback()  {
			                public  List doInHibernate(Session session){
			                   Query query = session.createQuery( strHql3);
			                   query.setString("bookpublisher", "%"+keyword+"%");
			                   //query.setString("namebook", keyword);
			                   query.setString("publisherlikebook", keyword+"%");
			                   query.setFirstResult(thirdResult);
			                   query.setMaxResults(thirdEndResult);
			                   return  query.list();
			               }
			           } );	    
//			            for(int i = 0;i<result3.size();i++){
//			            	System.out.println("result3>>"+result3.get(i).getBookPublisher());  
//			            } 
		           }
		}
	    if(result1.size()>0)result.addAll(result1);
	    if(result2.size()>0)result.addAll(result2);
	    if(result3.size()>0)result.addAll(result3);
	    return result;
	}
	/**
	* Function:  loadBookNumByName
	* Description: 从数据库中获得按图书名称匹配的记录总数
	* Calls:  no
	* Called By:  this.loadBookNum()
	* @param bookName as String
	* @return long
	* @throws no
	*/
	private long loadBookNumByName(String bookName){
		
		long num = 0;
		long firstNum = 0;
		long secondNum = 0;
		List<String> keywordArr = new ArrayList<String>();
		/*按" "进行分词处理,分成单独的一条条记录*/
		StringTokenizer st = new StringTokenizer(bookName, " ");
		
		while (st.hasMoreElements()) {

			keywordArr.add(st.nextToken());
		}
		if(keywordArr.size()==1){
			/*完全匹配,向前匹配,向后匹配的记录总数*/
	    	String temHql = "select count(*) from Book as book where book.bookName like ?";
	    	List firstList = this.getHibernateTemplate().find(temHql, "%"+bookName+"%");
	    	if(firstList.size()>0)
	    	firstNum =  (Long)firstList.get(0);
	    	/*中文分词之后的记录总数*/
	    	if(bookName.length()>2){
			    ArrayList<String> temList = new ArrayList<String>();
			    	/*进行分词,并把分词之后的每个词放到一个链表中*/				        	
			        try {        
			           TokenStream ts = this.writerAnalyzer.tokenStream("", new StringReader(bookName));
			           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");	
			        }
		        /*如果分出的词个数大于零,则对每个词进行模糊匹配*/
				if(temList.size()>0){
			        /*处理查询hql语句*/
			        String temStr = "select count(*) from Book as book where (";			        
			        for(int i = 0;i<temList.size();i++){
			        	
			        	   temStr += " book.bookName like ? or"; 
			
			        }
			        String strHql = temStr.substring(0, temStr.length()-2) + ") and book.bookName not like ?";
			        /*查询参数*/
			        String args [] = new String[temList.size()+1];
			        int i = 0;
			        for( ;i<temList.size();i++) args[i] = "%"+temList.get(i)+"%";
			        args[i] = "%"+bookName+"%";
			        List secondList = this.getHibernateTemplate().find(strHql, args);
			        if(secondList.size()>0)
			        	secondNum = (Long)secondList.get(0);		        
				}
	    	}
	    	num = firstNum + secondNum;
	    	//System.out.println("firstNum:"+firstNum+"secondNum:"+secondNum);
		}else{
			/*多个关键字同时存在和不同时存在时的记录数*/
			String firstHql = "select count(*) from Book as book where";	
				 
			for(int i = 0;i<keywordArr.size();i++){
			        	
				firstHql += " book.bookName 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)
	        firstNum =  (Long)firstList.get(0); 
	        /*对每个关键字进行分词处理*/
	        ArrayList<String> temList = new ArrayList<String>();    
		    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");	
			        }
		       }
		    }
		    /*如果分词之后,个数大于零,则查询对于每个分词的模糊匹配记录数*/
		    if(temList.size()>0){		    	
		    	 /*处理查询hql语句*/
		    	String temp3 = "";								 
			    for(int i = 0;i<keywordArr.size();i++){
			        	

⌨️ 快捷键说明

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