1. 程式人生 > >ssh:hql動態查詢+多條件自由拼接+模糊查詢

ssh:hql動態查詢+多條件自由拼接+模糊查詢

  @Override
    public List<Book> getByInfo(String name, String author, String publisher) {
       
       
        Session session=sessionFactory.getCurrentSession();

        StringBuffer hql= new StringBuffer();

             hql.append(  "from Book b where 1=1 ");
      

        if (name.length()!=0) {
            
            hql.append( "and b.name like '%"+name+ "%'");
        }
 
        if (author.length()!=0)
            hql.append("and b.author like '%" + author + "%'");

        if (publisher.length()!=0)
            hql.append("and b.publisher like '%"+publisher+"%'") ;
      

        Query query=session.createQuery(hql.toString());
     
       list=query.list();

        return list;
    }

% :表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。

另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'

若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%貓%'
雖然能搜尋出“三腳貓”,但不能搜尋出符合條件的“張貓三”。