Hibernate之方言篇
Hibernate使用方言(dialect)来实现数据库的操作的跨平台性。1、如何使用
使用者必须在hibernate的配置文件比如hibernate.cfg.xml里对所使用的hibernate方言加以设置。
org.hibernate.dialect.Oracle9Dialect
2、hibernate支持的方言:
RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL org.hibernate.dialect.PostgreSQLDialect MySQL org.hibernate.dialect.MySQLDialect MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect Oracle (any version) org.hibernate.dialect.OracleDialect Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect Sybase org.hibernate.dialect.SybaseDialect Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect Microsoft SQL Server org.hibernate.dialect.SQLServerDialect SAP DB org.hibernate.dialect.SAPDBDialect Informix org.hibernate.dialect.InformixDialect HypersonicSQL org.hibernate.dialect.HSQLDialect Ingres org.hibernate.dialect.IngresDialect Progress org.hibernate.dialect.ProgressDialect Mckoi SQL org.hibernate.dialect.MckoiDialect Interbase org.hibernate.dialect.InterbaseDialect Pointbase org.hibernate.dialect.PointbaseDialect FrontBase org.hibernate.dialect.FrontbaseDialect Firebird org.hibernate.dialect.FirebirdDialect
3、自定义方言
实际使用时,hibernate自带的方言会不满足实际应用要求,这时我们就要自定义方言了。
注意了,不要重新造轮子,自定义的方言继承于原生方言,这样可以保证原生方言提供的东西还能继续使用。例如
public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect
来一段代码示例:
public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect {public MySQL5Dialect(){super();//时间秒数比较函数,返回值为秒数,如果?1 > ?2,返回值为正数,反之为负数registerFunction("timediffsecond",new SQLFunctionTemplate(Hibernate.INTEGER,"time_to_sec(timediff(?1,?2))"));/** * 字符串定位函数,即子字符串是否在查询字符串中。 * 返回值为0:子字符串不在查询字符串中; * 返回值大于0:子字符串在查询字符串中. * 示例:locate(('bar', 'foobarbar'). */registerFunction("locate",new StandardSQLFunction("locate",Hibernate.INTEGER));}}
页:
[1]