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

2、配置文件
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 selectUsers(){
// 获得配置对象
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类型数据的插入和查询。




