达梦数据库应用开发_Hibernate框架介绍_yxy

1 Hibernate框架是什么?

Hibernate框架核心概念为:
对象关系映射ORM (Object Relational Mapping,简称 ORM)

解释:
Java 程序使用对象来表示数据和操作数据,而数据库则使用表、行和列来存储数据。
ORM是一种技术,它可以将对象模型和关系模型进行映射,使得开发人员可以使用面向对象的方式来操作数据库,而无需编写大量的 SQL 语句。

Hibernate 就是实现了这种对象关系映射的框架。

2 Hibernate框架基本使用

2.1 依赖包导入

jar包文件下载地址
JAVA_Hibernate_lib.zip
在这里插入图片描述

2.2 开发示例_基础操作

1.初始化数据库表

CREATE TABLE "SYSDBA"."JAVA_HIBERNATE_TEST"
(
"ID" INT,
"NAME" VARCHAR(50) NOT NULL)

2.编写Hibernate 的主配置文件
hibernate.cfg.xml
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>

   <!-- 这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL -->
   <property name="hibernate.dialect">org.hibernate.dialect.DmDialect</property>

   <!-- JDBC 驱动程序类 -->
   <property name="hibernate.connection.driver_class">dm.jdbc.driver.DmDriver</property>

   <!-- Assume test is the database name -->
   <!-- 数据库实例的 JDBC URL -->
   <property name="hibernate.connection.url">jdbc:dm://localhost:5236</property>

   <!-- 数据库用户名 -->
   <property name="hibernate.connection.username">SYSDBA</property>

   <!-- 数据库密码 -->
   <property name="hibernate.connection.password">SYSDBA</property>

   <!-- 是否显示 SQL -->
   <property name="hibernate.show_sql">true</property>

   <!-- 是否将 SQL 格式化 -->
   <property name="hibernate.format_sql">true</property>

   <!-- 是否自动在数据库中生成表 -->
   <property name="hibernate.hbm2ddl.auto">update</property>

   <!-- 事物自动提交 -->
   <property name="hibernate.connection.autocommit">true</property>

   <!-- 针对大字段处理 -->
   <property name="hibernate.connection.SetBigStringTryClob">true</property>

   <!-- List of XML mapping files -->
   <!-- 下面是映射的类,注意相对路径一定正确 -->
   <mapping resource="dm_02/Java_Hibernate_Test.xml"/>
   
   </session-factory>
</hibernate-configuration>

3.创建跟数据库表对应的实体类

package dm_02;


public class Java_Hibernate_Test {
	private int Java_Hibernate_Test_Id;
    private String name;
    
    public int getJava_Hibernate_Test_Id() {
        return Java_Hibernate_Test_Id;
    }
    
    public void setJava_Hibernate_Test_Id(int Java_Hibernate_Test_Id) {
        this.Java_Hibernate_Test_Id = Java_Hibernate_Test_Id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Java_Hibernate_Test [Java_Hibernate_Test_Id=" + Java_Hibernate_Test_Id + ", name=" + name + "]";
    }
    public Java_Hibernate_Test(int Java_Hibernate_Test_Id, String name) {
        super();
        this.Java_Hibernate_Test_Id = Java_Hibernate_Test_Id;
        this.name = name;
    }
    public Java_Hibernate_Test() {
        super();
    }
    
}

4.配置实体类与数据库映射的配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
<hibernate-mapping>
    <class name="dm_02.Java_Hibernate_Test" table="SYSDBA.Java_Hibernate_Test">
        <id name="Java_Hibernate_Test_Id" type="java.lang.Integer">
            <column name="ID" /> 
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="50" not-null="true" />
        </property>
    </class>
    
</hibernate-mapping>

5.创建测试类,开始测试

package dm_02;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import java.util.List;


public class Test {
	SessionFactory sf = null;
    Session session = null;
    
    public void before() {
        //(1)读取并解析hibernate.cfg.xml配置文件
        Configuration config = new Configuration().configure();
        
        //(2)由hibernate.cfg.xml中的<mapping resource="xxx.xml"/>读取并解析映射信息*/
        //(3)创建会话SessionFactory对象
        sf = config.buildSessionFactory();
        
        //(4)加载Session对象
        session = sf.openSession();
    }
    //测试插入
    public void testInsert() {
    	
    	Java_Hibernate_Test Java_Hibernate_Test01 = new Java_Hibernate_Test(1, "yxy01");
        session.save(Java_Hibernate_Test01);
    }
    //测试修改
    public void testUpdate() {
    	Java_Hibernate_Test Java_Hibernate_Test02 = null; 
    	Java_Hibernate_Test02 = (Java_Hibernate_Test)session.get(Java_Hibernate_Test.class,1);
        //System.out.println(Java_Hibernate_Test02);
        Java_Hibernate_Test02.setName("yxy02");
        //System.out.println(Java_Hibernate_Test02);
        session.update(Java_Hibernate_Test02);
    }
    //测试全查
    public void testSelectAll() {
        String hql = "from Java_Hibernate_Test";
        Query query = session.createQuery(hql);
        List<Java_Hibernate_Test> list = query.list();
        for(Java_Hibernate_Test Java_Hibernate_Test03:list) {
            System.out.println(Java_Hibernate_Test03);
        }
    }
    //测试删除
    public  void testDelete(){
    	Java_Hibernate_Test Java_Hibernate_Test04 = null; 
    	Java_Hibernate_Test04 = (Java_Hibernate_Test)session.get(Java_Hibernate_Test.class,1);
        if(Java_Hibernate_Test04!=null) {
            session.delete(Java_Hibernate_Test04);
        }
    }
    public void after() {
        if (session != null) { 
            session.flush();
            session.clear();
            //关闭session对象
            session.close();
            /*
                *关闭session工厂,清空资源.由于sessionFactory对象持有整个持久化操作的资源,
                *关闭之后,下次在使用又需要创建,太耗内存,通过监听器application servletContext对象,
                *当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁,
                *当停止进程时,再清理sessionFactory资源
                */
            //关闭sessionFactory对象
            sf.close();
        }
    }
    public static void main(String[] args) {
    	Test test = new Test();
        test.before(); 
        test.testInsert();
        test.testUpdate();
        test.testSelectAll();
        test.testDelete();
        test.after();
    }
}

6.打印出结果为

Hibernate: 
    select
        java_hiber0_.ID as ID0_,
        java_hiber0_.NAME as NAME0_ 
    from
        SYSDBA.Java_Hibernate_Test java_hiber0_
Java_Hibernate_Test [Java_Hibernate_Test_Id=5, name=yxy5]
Java_Hibernate_Test [Java_Hibernate_Test_Id=6, name=yxy6]
Java_Hibernate_Test [Java_Hibernate_Test_Id=7, name=yxy7]
Hibernate: 
    insert 
    into
        SYSDBA.Java_Hibernate_Test
        (NAME, ID) 
    values
        (?, ?)
Hibernate: 
    delete 
    from
        SYSDBA.Java_Hibernate_Test 
    where
        ID=?

2.2 开发示例_大字段操作

1.创建大字段表

CREATE TABLE JAVA_HIBERNATE_BIG_DATA
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"PHOTO" IMAGE,
"DESCRIBE" BLOB,
"TXT" CLOB,
NOT CLUSTER PRIMARY KEY("ID"));

2.准备大文件
在这里插入图片描述
3.准备大文件测试的实体类

package dm_02;

public class Java_Hibernate_BigData {
	    private Long id;
	    private byte[] photo; 
	    private byte[] describe;
	    private String txt; 
	    public Long getId() {
	        return id;
	    }
	    public void setId(Long id) {
	        this.id = id;
	    }
	    public byte[] getPhoto() {
	        return photo;
	    }
	    public void setPhoto(byte[] photo) {
	        this.photo = photo;
	    }
	    public byte[] getDescribe() {
	        return describe;
	    }
	    public void setDescribe(byte[] describe) {
	        this.describe = describe;
	    }
	    public String getTxt() {
	        return txt;
	    }
	    public void setTxt(String txt) {
	        this.txt = txt;
	    }
	    @Override
	    public String toString() {
	        return "JAVA_HIBERNATE_BIG_DATA [id=" + id + ", txt=" + txt + "]";
	    }
	    public Java_Hibernate_BigData(Long id, byte[] photo, byte[] describe, String txt) {
	        super();
	        this.id = id;
	        this.photo = photo;
	        this.describe = describe;
	        this.txt = txt;
	    }
	    public Java_Hibernate_BigData() {
	        super();
	    }
}

4.配置实体类与数据库映射的配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        
<hibernate-mapping>
      <class name="dm_02.Java_Hibernate_BigData" table="SYSDBA.JAVA_HIBERNATE_BIG_DATA">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="photo" type="byte[]">
            <column name="PHOTO" />
        </property>
        <property name="describe" type="byte[]">
            <column name="DESCRIBE" />
        </property>
        <property name="txt" type="java.lang.String">
            <column name="TXT" />
        </property>
    </class>
    
</hibernate-mapping>

5.Hibernate 的主配置文件中加入新配置
hibernate.cfg.xml文件
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>

   <!-- 这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL -->
   <property name="hibernate.dialect">org.hibernate.dialect.DmDialect</property>

   <!-- JDBC 驱动程序类 -->
   <property name="hibernate.connection.driver_class">dm.jdbc.driver.DmDriver</property>

   <!-- Assume test is the database name -->
   <!-- 数据库实例的 JDBC URL -->
   <property name="hibernate.connection.url">jdbc:dm://172.54.161.204:5230</property>

   <!-- 数据库用户名 -->
   <property name="hibernate.connection.username">SYSDBA</property>

   <!-- 数据库密码 -->
   <property name="hibernate.connection.password">SYSDBA</property>

   <!-- 是否显示 SQL -->
   <property name="hibernate.show_sql">true</property>

   <!-- 是否将 SQL 格式化 -->
   <property name="hibernate.format_sql">true</property>

   <!-- 是否自动在数据库中生成表 -->
   <property name="hibernate.hbm2ddl.auto">update</property>

   <!-- 事物自动提交 -->
   <property name="hibernate.connection.autocommit">true</property>

   <!-- 针对大字段处理 -->
   <property name="hibernate.connection.SetBigStringTryClob">true</property>

   <!-- List of XML mapping files -->
   <!-- 下面是映射的类 -->
   
   <mapping resource="dm_02/Java_Hibernate_Test.xml"/>
   <mapping resource="dm_02/Java_Hibernate_BigData.xml"/>
   

   </session-factory>
</hibernate-configuration>

6.创建大文件测试类开始测试

package dm_02;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestBigData {
    SessionFactory sf = null;
    Session session = null;
    @Before
    public void before() {
        //(1)读取并解析 hibernate.cfg.xml 配置文件
        Configuration config = new Configuration().configure();
        //(2)由 hibernate.cfg.xml 中的<mapping resource="xml"/>读取并解析映射信息*/
        //(3)创建会话 SessionFactory 对象
        sf = config.buildSessionFactory();
        //(4)加载 Session 对象
        session = sf.openSession();
    }
    //测试插入大字段表
    @Test
    public void testInsert() {
        try {
        String filePath = "D:\\DM\\java20250217\\photo_test.jpg";
        File file = new File(filePath);
        String filePath2 = "D:\\DM\\java20250217\\clob_test.txt";
        File file2 = new File(filePath2);
        InputStream in;
        in = new BufferedInputStream(new FileInputStream(file));
        byte[] bytes1 = new byte[102400];
        byte[] bytes2 = new byte[102400];
        in.read(bytes1);
        InputStream in2 = new BufferedInputStream(new FileInputStream(file));
        in2.read(bytes2);
        BufferedReader reader = new BufferedReader(new InputStreamReader
                (new FileInputStream(file2),"UTF-8"));
        StringBuffer stringBuffer = new StringBuffer("");
        String str = null;
        while((str = reader.readLine())!=null) {
            stringBuffer.append(str);
            stringBuffer.append("\n");
        }
        Java_Hibernate_BigData Java_Hibernate_BigData01 = new Java_Hibernate_BigData(null,bytes1,bytes2,stringBuffer.toString());
        session.save(Java_Hibernate_BigData01);
        in.close();
        in2.close();
        reader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //测试查询大字段表
    @Test
    public void testSelect() {
        String hql = "from Java_Hibernate_BigData";
        Query query = session.createQuery(hql);
        List<Java_Hibernate_BigData> list = query.list();
        try {
            for(Java_Hibernate_BigData big:list) {
                //打印出 id
                System.out.println("id = "+big.getId());
                //将 photo 列信息 输出到指定路径
                FileOutputStream fos = new FileOutputStream("D:\\DM\\java20250217\\"+big.getId()+"_photo_test.jpg");
                fos.write(big.getPhoto());
                //将 describe 列信息 输出到指定路径
                FileOutputStream fos2 = new FileOutputStream("D:\\DM\\java20250217\\"+big.getId()+"_Blob_photo_test.jpg");
                fos2.write(big.getDescribe());
                //将 photo 列信息 输出到控制台
                System.out.println("txt="+big.getTxt());
                fos.close();
                fos2.close();
        }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @After
    public void after() {
        if (session != null) { 
            session.flush();
            session.clear();
            //关闭 session 对象
            session.close();
            // 关闭 sessionFactory 对象
            sf.close();
        }
    }
    public static void main(String[] args) {
        TestBigData test = new TestBigData();
        test.before();
        test.testInsert();
        test.testSelect();
        test.after();
    }
}

7.输出结果为

Hibernate: 
    insert 
    into
        SYSDBA.JAVA_HIBERNATE_BIG_DATA
        (PHOTO, DESCRIBE, TXT) 
    values
        (?, ?, ?)
Hibernate: 
    select
        java_hiber0_.ID as ID1_,
        java_hiber0_.PHOTO as PHOTO1_,
        java_hiber0_.DESCRIBE as DESCRIBE1_,
        java_hiber0_.TXT as TXT1_ 
    from
        SYSDBA.JAVA_HIBERNATE_BIG_DATA java_hiber0_
id = 2
txt=clob_test.txt文本
......

在这里插入图片描述
下一篇
达梦数据库应用开发_iBatis框架介绍_yxy


更多其他数据库相关专栏:

1.数据库优化
数据库优化基本思路、索引详解、执行计划、统计信息、CBO原理、单表优化、多表优化、分布式优化、子查询等
数据库优化(sql优化)专栏连接

2.达梦分布式数据库:
部署详细步骤(DEM)、备份还原实战、核心特性理解、使用心得、表分区方式详细介绍、表分区最佳实践、DPC架构详解等
达梦分布式DPC专栏连接

3.应用开发类
jdbc、hibernate、ibatis、mybatis、MyBatis-Plus、Spring、中间件mycat、Sharding-JDBC等
达梦数据库应用开发专栏连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值