📄 bookloaddaoimpl.java
字号:
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 + -