1、创建表:
CREATE TABLE
IF NOT EXISTS t_base_pinyin
(
pin_yin_
VARCHAR (255) CHARACTER
SET gbk NOT NULL,
code_
INT (11) NOT NULL,
PRIMARY KEY (code_
)
) ENGINE = INNODB DEFAULT CHARSET=utf8mb4;
2、插入数据
INSERT INTO t_base_pinyin (pin_yin_, code_)
VALUES
(“a”, 20319),
(“ai”, 20317),
(“an”, 20304),
(“ang”, 20295),
(“ao”, 20292),
(“ba”, 20283),
(“bai”, 20265),
(“ban”, 20257),
(“bang”, 20242),
(“bao”, 20230),
(“bei”, 20051),
(“ben”, 20036),
(“beng”, 20032),
(“bi”, 20026),
(“bian”, 20002),
(“biao”, 19990),
(“bie”, 19986),
(“bin”, 19982),
(“bing”, 19976),
(“bo”, 19805),
(“bu”, 19784),
(“ca”, 19775),
(“cai”, 19774),
(“can”, 19763),
(“cang”, 19756),
(“cao”, 19751),
(“ce”, 19746),
(“ceng”, 19741),
(“cha”, 19739),
(“chai”, 19728),
(“chan”, 19725),
(“chang”, 19715),
(“chao”, 19540),
(“che”, 19531),
(“chen”, 19525),
(“cheng”, 19515),
(“chi”, 19500),
(“chong”, 19484),
(“chou”, 19479),
(“chu”, 19467),
(“chuai”, 19289),
(“chuan”, 19288),
(“chuang”, 19281),
(“chui”, 19275),
(“chun”, 19270),
(“chuo”, 19263),
(“ci”, 19261),
(“cong”, 19249),
(“cou”, 19243),
(“cu”, 19242),
(“cuan”, 19238),
(“cui”, 19235),
(“cun”, 19227),
(“cuo”, 19224),
(“da”, 19218),
(“dai”, 19212),
(“dan”, 19038),
(“dang”, 19023),
(“dao”, 19018),
(“de”, 19006),
(“deng”, 19003),
(“di”, 18996),
(“dian”, 18977),
(“diao”, 18961),
(“die”, 18952),
(“ding”, 18783),
(“diu”, 18774),
(“dong”, 18773),
(“dou”, 18763),
(“du”, 18756),
(“duan”, 18741),
(“dui”, 18735),
(“dun”, 18731),
(“duo”, 18722),
(“e”, 18710),
(“en”, 18697),
(“er”, 18696),
(“fa”, 18526),
(“fan”, 18518),
(“fang”, 18501),
(“fei”, 18490),
(“fen”, 18478),
(“feng”, 18463),
(“fo”, 18448),
(“fou”, 18447),
(“fu”, 18446),
(“ga”, 18239),
(“gai”, 18237),
(“gan”, 18231),
(“gang”, 18220),
(“gao”, 18211),
(“ge”, 18201),
(“gei”, 18184),
(“gen”, 18183),
(“geng”, 18181),
(“gong”, 18012),
(“gou”, 17997),
(“gu”, 17988),
(“gua”, 17970),
(“guai”, 17964),
(“guan”, 17961),
(“guang”, 17950),
(“gui”, 17947),
(“gun”, 17931),
(“guo”, 17928),
(“ha”, 17922),
(“hai”, 17759),
(“han”, 17752),
(“hang”, 17733),
(“hao”, 17730),
(“he”, 17721),
(“hei”, 17703),
(“hen”, 17701),
(“heng”, 17697),
(“hong”, 17692),
(“hou”, 17683),
(“hu”, 17676),
(“hua”, 17496),
(“huai”, 17487),
(“huan”, 17482),
(“huang”, 17468),
(“hui”, 17454),
(“hun”, 17433),
(“huo”, 17427),
(“ji”, 17417),
(“jia”, 17202),
(“jian”, 17185),
(“jiang”, 16983),
(“jiao”, 16970),
(“jie”, 16942),
(“jin”, 16915),
(“jing”, 16733),
(“jiong”, 16708),
(“jiu”, 16706),
(“ju”, 16689),
(“juan”, 16664),
(“jue”, 16657),
(“jun”, 16647),
(“ka”, 16474),
(“kai”, 16470),
(“kan”, 16465),
(“kang”, 16459),
(“kao”, 16452),
(“ke”, 16448),
(“ken”, 16433),
(“keng”, 16429),
(“kong”, 16427),
(“kou”, 16423),
(“ku”, 16419),
(“kua”, 16412),
(“kuai”, 16407),
(“kuan”, 16403),
(“kuang”, 16401),
(“kui”, 16393),
(“kun”, 16220),
(“kuo”, 16216),
(“la”, 16212),
(“lai”, 16205),
(“lan”, 16202),
(“lang”, 16187),
(“lao”, 16180),
(“le”, 16171),
(“lei”, 16169),
(“leng”, 16158),
(“li”, 16155),
(“lia”, 15959),
(“lian”, 15958),
(“liang”, 15944),
(“liao”, 15933),
(“lie”, 15920),
(“lin”, 15915),
(“ling”, 15903),
(“liu”, 15889),
(“long”, 15878),
(“lou”, 15707),
(“lu”, 15701),
(“lv”, 15681),
(“luan”, 15667),
(“lue”, 15661),
(“lun”, 15659),
(“luo”, 15652),
(“ma”, 15640),
(“mai”, 15631),
(“man”, 15625),
(“mang”, 15454),
(“mao”, 15448),
(“me”, 15436),
(“mei”, 15435),
(“men”, 15419),
(“meng”, 15416),
(“mi”, 15408),
(“mian”, 15394),
(“miao”, 15385),
(“mie”, 15377),
(“min”, 15375),
(“ming”, 15369),
(“miu”, 15363),
(“mo”, 15362),
(“mou”, 15183),
(“mu”, 15180),
(“na”, 15165),
(“nai”, 15158),
(“nan”, 15153),
(“nang”, 15150),
(“nao”, 15149),
(“ne”, 15144),
(“nei”, 15143),
(“nen”, 15141),
(“neng”, 15140),
(“ni”, 15139),
(“nian”, 15128),
(“niang”, 15121),
(“niao”, 15119),
(“nie”, 15117),
(“nin”, 15110),
(“ning”, 15109),
(“niu”, 14941),
(“nong”, 14937),
(“nu”, 14933),
(“nv”, 14930),
(“nuan”, 14929),
(“nue”, 14928),
(“nuo”, 14926),
(“o”, 14922),
(“ou”, 14921),
(“pa”, 14914),
(“pai”, 14908),
(“pan”, 14902),
(“pang”, 14894),
(“pao”, 14889),
(“pei”, 14882),
(“pen”, 14873),
(“peng”, 14871),
(“pi”, 14857),
(“pian”, 14678),
(“piao”, 14674),
(“pie”, 14670),
(“pin”, 14668),
(“ping”, 14663),
(“po”, 14654),
(“pu”, 14645),
(“qi”, 14630),
(“qia”, 14594),
(“qian”, 14429),
(“qiang”, 14407),
(“qiao”, 14399),
(“qie”, 14384),
(“qin”, 14379),
(“qing”, 14368),
(“qiong”, 14355),
(“qiu”, 14353),
(“qu”, 14345),
(“quan”, 14170),
(“que”, 14159),
(“qun”, 14151),
(“ran”, 14149),
(“rang”, 14145),
(“rao”, 14140),
(“re”, 14137),
(“ren”, 14135),
(“reng”, 14125),
(“ri”, 14123),
(“rong”, 14122),
(“rou”, 14112),
(“ru”, 14109),
(“ruan”, 14099),
(“rui”, 14097),
(“run”, 14094),
(“ruo”, 14092),
(“sa”, 14090),
(“sai”, 14087),
(“san”, 14083),
(“sang”, 13917),
(“sao”, 13914),
(“se”, 13910),
(“sen”, 13907),
(“seng”, 13906),
(“sha”, 13905),
(“shai”, 13896),
(“shan”, 13894),
(“shang”, 13878),
(“shao”, 13870),
(“she”, 13859),
(“shen”, 13847),
(“sheng”, 13831),
(“shi”, 13658),
(“shou”, 13611),
(“shu”, 13601),
(“shua”, 13406),
(“shuai”, 13404),
(“shuan”, 13400),
(“shuang”, 13398),
(“shui”, 13395),
(“shun”, 13391),
(“shuo”, 13387),
(“si”, 13383),
(“song”, 13367),
(“sou”, 13359),
(“su”, 13356),
(“suan”, 13343),
(“sui”, 13340),
(“sun”, 13329),
(“suo”, 13326),
(“ta”, 13318),
(“tai”, 13147),
(“tan”, 13138),
(“tang”, 13120),
(“tao”, 13107),
(“te”, 13096),
(“teng”, 13095),
(“ti”, 13091),
(“tian”, 13076),
(“tiao”, 13068),
(“tie”, 13063),
(“ting”, 13060),
(“tong”, 12888),
(“tou”, 12875),
(“tu”, 12871),
(“tuan”, 12860),
(“tui”, 12858),
(“tun”, 12852),
(“tuo”, 12849),
(“wa”, 12838),
(“wai”, 12831),
(“wan”, 12829),
(“wang”, 12812),
(“wei”, 12802),
(“wen”, 12607),
(“weng”, 12597),
(“wo”, 12594),
(“wu”, 12585),
(“xi”, 12556),
(“xia”, 12359),
(“xian”, 12346),
(“xiang”, 12320),
(“xiao”, 12300),
(“xie”, 12120),
(“xin”, 12099),
(“xing”, 12089),
(“xiong”, 12074),
(“xiu”, 12067),
(“xu”, 12058),
(“xuan”, 12039),
(“xue”, 11867),
(“xun”, 11861),
(“ya”, 11847),
(“yan”, 11831),
(“yang”, 11798),
(“yao”, 11781),
(“ye”, 11604),
(“yi”, 11589),
(“yin”, 11536),
(“ying”, 11358),
(“yo”, 11340),
(“yong”, 11339),
(“you”, 11324),
(“yu”, 11303),
(“yuan”, 11097),
(“yue”, 11077),
(“yun”, 11067),
(“za”, 11055),
(“zai”, 11052),
(“zan”, 11045),
(“zang”, 11041),
(“zao”, 11038),
(“ze”, 11024),
(“zei”, 11020),
(“zen”, 11019),
(“zeng”, 11018),
(“zha”, 11014),
(“zhai”, 10838),
(“zhan”, 10832),
(“zhang”, 10815),
(“zhao”, 10800),
(“zhe”, 10790),
(“zhen”, 10780),
(“zheng”, 10764),
(“zhi”, 10587),
(“zhong”, 10544),
(“zhou”, 10533),
(“zhu”, 10519),
(“zhua”, 10331),
(“zhuai”, 10329),
(“zhuan”, 10328),
(“zhuang”, 10322),
(“zhui”, 10315),
(“zhun”, 10309),
(“zhuo”, 10307),
(“zi”, 10296),
(“zong”, 10281),
(“zou”, 10274),
(“zu”, 10270),
(“zuan”, 10262),
(“zui”, 10260),
(“zun”, 10256),
(“zuo”, 10254);
3、自定义函数
DROP FUNCTION IF EXISTS to_pinyin;
DELIMITER $
CREATE FUNCTION to_pinyin(NAME VARCHAR(255) CHARSET gbk)
RETURNS VARCHAR(255) CHARSET gbk
BEGIN
DECLARE mycode INT;
DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
DECLARE lcode INT;
DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
DECLARE rcode INT;
DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT ‘’;
DECLARE lp INT;
SET mycode = 0;
SET lp = 1;
SET NAME = HEX(NAME);
WHILE lp < LENGTH(NAME) DO
SET tmp_lcode = SUBSTRING(NAME, lp, 2);
SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED);
SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED);
IF lcode > 128 THEN
SET mycode =65536 - lcode * 256 - rcode ;
SELECT CONCAT(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
SET lp = lp + 4;
ELSE
SET mypy = CONCAT(mypy,CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)));
SET lp = lp + 2;
END IF;
END WHILE;
RETURN LOWER(mypy);
END;
$
DELIMITER ;
4、 通常在使用Spring整合hibernate的时候,会有这样一段配置
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=none
hibernate.format_sql=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.release_mode=auto
hibernate.connection.isolation=1
hibernate.connection.autocommit=false
hibernate.cache.use_query_cache=false
hibernate.cache.use_second_level_cache=false
hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
5、.重写方言类,注册函数
public class MyLocalDialect extends MySQL5InnoDBDialect {
public MyLocalDialect() {
super();
registerFunction("my_change_local",new SQLFunctionTemplate(StandardBasicTypes.STRING,"my_change_local(?1)"));
}
}
6.修改配置文件,将数据库方言指向自己定义的方言类
将 hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 改为 hibernate.dialect=xxx.xxx.MyLocalDialect
之后就可以在hql中使用自己定义的函数了