hibernate中文排序的解决方法


我的第一篇博客,文笔好像不太好 请见谅! 

方法一、描写叙述:给Hibernate的MySQL方言包注冊一个排序方法,该方法中实现了MySQL中文排序。

代码:

 

public class MySQLExtendDialect extends MySQLDialect {  
  
    public MySQLExtendDialect(){  
        super();  
        registerFunction("convert_gbk",   
                 new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)") );  
    }  
      
} 

该方法的弊端是须要改不同数据的方言包来实现不改代码的跨库。(须要改order by field 为 order by convert_gbk(field))。

 

  方法二、描写叙述:单独改动Hibernate的MySQL方言包,改动order by方法,使该方法默认使用convert方法来实现中文排序。

代码:

 

 

public class MySQLGBKDialect extends MySQLDialect
{

    public MySQLGBKDialect()
    {
    }

    public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls)
    {
        expression = (new StringBuilder("convert(")).append(expression).append(" using 'gbk')").toString();
        return super.renderOrderByElement(expression, collation, order, nulls);
    }
}

renderOrderByElement该方法为复写父类中的方法,长处是不用改其它数据方言包,不用改代码,缺点是全部的排序方法将都运行convert方法。

方法三、描写叙述:首选查出该表的全部数据放入到list中,然后可以使用集合的辅助类collections.sort()进行排序。

代码:

public List<Object> sortByName(){

  List<Object>    ObjectList=dao.findAll();
            Collections.sort(ObjectList,new Comparator<Object>(){
                public int compare(Object o1, Object o2) {
                    String b1 = (String)o1.getName();  //获取实体的名称
                    String b2 = (String)o2.getName();
            
                    Collator cmp = Collator.getInstance(java.util.Locale.CHINA);    //中文首字母排序规则
                    if (cmp.compare(b1, b2)>0){    
                        return 1;   
                    }else if (cmp.compare(b1, b2)<0){    
                        return -1;   
                    }
                    return 0;
                }
            });
            
            return ObjectList;

}

以上是正序,倒序就把上面大于换成小于,小于换大于;或者-1 变1 ,1变-1 ;

另外如要实现点击 列表的表头实现正序和倒序,可以传递一个数字给服务器,每点击一次表头让这个数字自增1,后台可以根据这个数字奇偶性来进行正序和倒序。

  第一篇博客ctrl+v写完了 ,有点激动!!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM