暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何通过配置hibernate方言包+GBase8s jdbc实现clob、blob、text、byte大对象数据类型操作

wj2021 2021-11-25
986

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类型数据的插入和查询。

 

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论