zoukankan      html  css  js  c++  java
  • 【web开发】spring+hibernate4支持中文排序

    mysql在utf8编码格式下的中文排序会出现问题,因为现在用的是hql查询,不支持原生sql函数convert。有效的一种解决方法如下:

    (1)新建一个类,派生自MySQL5Dialect

    public class MyISAMDialect extends MySQL5Dialect {
    	
       public MyISAMDialect(){
    	super();
    	registerFunction("convert_mine", new SQLFunctionTemplate(StandardBasicTypes.STRING, "convert(?1 using gbk)"));
       }
        @Override
        public String getTableTypeString() {
            return "engine=MyISAM";
        }
    }

    其中需要注意的是,在hibernate4版本中,使用StandardBasicTypes.STRING(来自包org.hibernate.type.StandardBasicTypes;)而不是Hibernate.STRING.


    (2)在配置文件中引用或改为此类:

    <bean id="sessionFactory"
    		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<property name="hibernateProperties">
    			<props>  //...
    				// ...
    				<prop key="hibernate.dialect">com.miniwork.mymanager.util.MyISAMDialect</prop> //...
    			</props>
    		</property>
    		//...
    	   </property>
    	</bean>


    原来的hibernate.dialect可能是设置为org.hibernate.dialect.MySQLDialect,即自定义类MyISAMDialect的超类。

    (3)在使用hql查询语句时,在可能出现中文的列中例如name,可以这样使用:

    from xxx order by convert_mine(name);


    至此便可以完成中文的正确排序。

  • 相关阅读:
    好文章记录
    求职经历
    C正确初始化方式
    linux 常用命令
    MYSQL查找从小到大排列第90%个位置的数据
    最好的单例模式
    <%= %>和${}使用差异
    后台和jsp乱码处理
    浏览器下载文件
    文件下载
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2979658.html
Copyright © 2011-2022 走看看