通過配置hibernate方言包+GBase8s jdbc實現clob、blob、text、byte大物件資料型別操作

wj_2021發表於2021-11-25

     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驅動程式。

 

2、 配置檔案

1 )配置 hibernate.cfg.xml 檔案

<? xml   version = "1.0"   encoding = "UTF-8" ?>

<! DOCTYPE   hibernate-configuration   PUBLIC

     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

     " >

 

< 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部落格 ” ,連結:http://blog.itpub.net/69993860/viewspace-2844003/,如需轉載,請註明出處,否則將追究法律責任。

相關文章