h ibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架 。 hibernate可以自动生成SQL语句,自动执行,可以随心所欲的使用对象编程思维来操纵数据库。
不同数据库语法细节上存在差异,hibernate 可根据方言自动应付底层数据库访问所存在的细节差异,将HQL有针对的转化为某一数据库所支持的SQL语句 。
GBase8s Hibernate方言包,针对GBase8s数据库定制的sql解析包,包括数据类型和函数以及语法的映射, 本文通过实例介绍如何通过 hibernate方言包 实现连接GBase8s数据库,实现 大对象 数据 类型(智能大对象clob、blob,简单大对象text、byte)的 添加 与查询 过程。
1、首先,工程中引入 GBase8s hibernate方言包、hibernate原生包 文件,以及GBase8s驱动程序。

1 )配置 hibernate.cfg.xml 文件
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" >
< hibernate-configuration >
< session-factory >
<!-- 配置数据库连接的基本信息 : -->
< property name = "hibernate.connection.driver_class" >
com.gbasedbt.jdbc.Driver
</ property >
< property name = "hibernate.connection.url" > jdbc:gbasedbt-sqli://172.16.33.240:5555/test:GBASEDBTSERVER=ol_gbasedbt1210_2;
</ property >
< property name = "hibernate.connection.username" > gbasedbt </ property >
< property name = "hibernate.connection.password" > GBase8s </ property >
<!-- 配置Hibernate 方言 , 此处为GBase8s 方言类 -->
< property name = "hibernate.dialect" >
gbase.hibernate.dialect.GBaseDialect
</ property >
<!-- 显示 SQL -->
< property name = "show_sql" > true </ property >
<!-- 格式化 SQL -->
< property name = "hibernate.format_sql" > true </ property >
<!-- 关闭事物自动提交 -->
< property name = "hibernate.connection.autocommit" > false </ property >
<!-- hbm : 映射 to DDL -->
<!-- update :如果数据库中没有表,创建一个新的表,如果有,直接使用这个表,并可以更新表的结构。 -->
< property name = "hibernate.hbm2ddl.auto" > update </ property >
<!-- 对象映射关系类 -->
< mapping class = "com.gbase.Hibernate.User" />
</ session-factory >
</ hibernate-configuration >
hibernate.cfg.xml 文件 主要参数说明
1) hibernate.connection.driver_class 属性,配置为GBase8s 驱动类名称定义为
com.gbasedbt.jdbc.Driver
2) hibernate.connection.url 属性,为GBase8s 数据库 url
3) hibernate.connection.username 属性,为GBase8s 数据库用户名
4) hibernate.connection.password 属性,为GBase8s 数据库密码
5) hibernate.dialect 属性,为GBase8s 数据库方言,定义为
gbase.hibernate.dialect.GBaseDialect
6) hibernate.connection.url 属性,为GBase8s 数据库 url
7) hibernate 对象- 关系 类映射类 , 配置为 class = "com.gbase.Hibernate.User"
3、 配置实体类
hibernate 对象- 关系 类映射类 com.gbase.Hibernate.User , 通过标签方式映射的数据表和java 类之间映射关系。
// 表明映射为 user 表
@Entity
@Table (name = "user" )
public class User {
@Id
@GeneratedValue
private int userId ;
@Column (name = "userName" , columnDefinition = "varchar" )
private String userName ;
@Column (name = "password" , columnDefinition = "varchar" )
private String password ;
@Column (name = "boolCol" , columnDefinition = "boolean" )
private boolean boolCol ;
// 表明 blobCol 数据库字段映射为 blob
@Lob
@Column (name = "blobCol" , columnDefinition = "blob" )
private java.sql.Blob blobCol ;
// 表明 clobCol 数据库字段映射为 clob
@Lob
@Column (name = "clobCol" , columnDefinition = "clob" )
private java.sql.Clob clobCol ;
// 表明 byteCol 数据库字段映射为 byte
@Column (name = "byteCol" , columnDefinition = "byte" )
private byte [] byteCol ;
// 表明 textCol 数据库字段映射为 text
@Column (name = "textCol" , columnDefinition = "text" )
private String textCol ;
public boolean getBoolCol() {
return boolCol ;
}
public void setBoolCol( boolean is2 ) {
boolCol = is2 ;
}
public int getUserId() {
return userId ;
}
public void setUserId( int userId ) {
this . userId = userId ;
}
public String getUserName() {
return userName ;
}
public void setUserName(String userName ) {
this . userName = userName ;
}
public String getPassword() {
return password ;
}
public void setPassword(String password ) {
this . password = password ;
}
public byte [] getByteCol() {
return byteCol ;
}
public void setByteCol( byte [] byteCol ) {
this . byteCol = byteCol ;
}
public String getTextCol() {
return textCol ;
}
public void setTextCol(String textCol ) {
this . textCol = textCol ;
}
public java.sql.Blob getBlobCol() {
return blobCol ;
}
public void setBlobCol(java.sql.Blob blobCol ) {
this . blobCol = blobCol ;
}
public java.sql.Clob getClobCol() {
return clobCol ;
}
public void setClobCol (java.sql.Clob clobCol ) {
this . clobCol = clobCol ;
}
public User() {
super ();
}
}
4、执行用例
1 )插入 数据
public void insertUser(){
// 获得配置对象
Configuration configure = new Configuration().configure();
// 获得会话工厂
SessionFactory sessionFactory = configure .buildSessionFactory();
// 获取会话
Session session = sessionFactory .openSession();
// 开始事物
Transaction transaction = session .beginTransaction();
// 创建对象
User user = new User();
user .setUserName( "zhangsan" );
user .setPassword( "123456" );
user .setBoolCol( true );
// 创建 java.sql.Blob 类型数据
FileInputStream inputStream = new FileInputStream( "C:\\1.txt" );
byte [] content = new byte [9];
inputStream .read( content );
java.sql.Blob blobContent = session .getLobHelper().createBlob( content );
// 创建 java.sql.Clob 类型数据
java.sql.Clob clobContent = session .getLobHelper().createClob( "address001" );
// 设置 blob 字段值
user .setBlobCol( blobContent );
// 设置 clob 字段值
user .setClobCol( clobContent );
// 设置 byte 字段值
user .setByteCol( "b@163.com" .getBytes());
// 设置 text 字段值
user .setTextCol( "address002" );
// 执行操作 . 返回该对象在数据库中生成的 id
int id = (Integer) session .save( user );
System. out .println( id );
transaction .commit();
}
2 )查询数据
public void select User s (){
// 获得配置对象
Configuration configure = new Configuration().configure();
// 获得会话工厂
SessionFactory sessionFactory = configure .buildSessionFactory();
// 获取会话
Session session = sessionFactory .openSession();
// 开始事物
Transaction transaction = session .beginTransaction();
String hql = "from User" ; // 准备 hql 语句
Query query = session .createQuery( hql ); // 创建 Query 对 象
transaction .commit();
List<User> list = query.list();
for (User object : list ){
boolean userBl = object .getBoolCol();
System. out .println( object .getTextCol()); // 获取 text 类型数据值
System. out .println( object .getClobCol().getSubString(1, 10)); // 获取 clob 类型数据值
// 获取 byte 类型数据值
byte [] byteCol = object .getByteCol();
String byteCols = new String( byteCol );
System. out .println( byteCols );
// 获取 blob 类型数据值
String blobs = new String( object .getBlobCol().getBytes(1, 9));
System. out .println( blobs );
}
}
3) 执行结果


通过以上步骤实现通过hibernate方言包,实现数据表自动创建、blob、clob、text与byte类型数据的插入和查询。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69993860/viewspace-2844003/ ,如需转载,请注明出处,否则将追究法律责任。