达梦数据库应用开发_Hibernate框架介绍
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等
达梦数据库应用开发专栏连接