Hibernate操作数据字典

合集下载

Hibernate

Hibernate

3.Hibernate映射类型
在hbm.xml中指定的type属性值.Java属性值<--映射类型-->表字段值映射类型负责属性值和字段值之间相互转化。type可以指定两种格式:
1)Java类型 例如:ng.String
*2)Hibernate类型
字符串:string
i.清除DAO中关闭session的代码
j.测试Struts2+Hibernate程序
--根据数据表编写POJO
--定义POJO和表的映射文件 [POJO类名].hbm.xml (在hibernate.cfg.xml中采用<mapping>元素定义)
--采用Hibernate API操作
//1.按主键做条件查询
session.load(查询类型,主键值);
session.get(查询类型,主键值);
//2.添加,根据hbm.xml定义
//自动生成主键值
session.save(obj);
//3.更新,按id当条件将obj属性
//更新到数据库
session.update(obj);
//4.删除,按id当条件删除
session.delete(obj);
**4.主键生成方式
Hibernate框架提供了一些内置的主键值生成方法。使用时通过hbm.xml文件<id>元素的<generator>指定。
*1)sequence
采用指定序列生成主键值。适用Oracle数据库。
<generator class="sequence"><param name="sequence">序列名</param></generator>

hibernate的基本用法

hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。

它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。

本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。

一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。

然后将解压后的文件夹添加到Java项目的构建路径中。

2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。

这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。

3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。

除此之外,还需要指定数据库的用户名和密码等信息。

4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。

我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。

这个映射文件描述了实体类与数据库表之间的对应关系。

二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。

这个类的字段通常与数据库表的列对应。

同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。

2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。

如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。

3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。

hibernate配置

hibernate配置
属性可以是update、create和drop-create三个值。
目录
1 Hibernate概述 2 第一个Hibernate程序 3 Hibernate的配置文件 4 深入理解持久化对象 5 Hibernate的映射文件 6持久化对象 如果PO 实例与Session实例关联起来,且该实例关联到数据库的记录
脱管对象 如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原 因,PO实例脱离了Session 的管理
Hibernate全面解决方案架构解释
事务(Transaction) 代表一次原子操作,它具有数据库事务的概念 但它通过抽象,将应用程序从底层的具体的JDBC、JTA和CORBA 事务中隔离开。 一个Session 之内可能包含多个Transaction对象。 所有的持久化操作都应该在事务管理下进行,即使是只读操作。
管态,对该对象操作无须锁定数据库,不会造成性能的下降。
持久化对象的状态迁移
持久化实体: 1、Serializable save(object obj) 将对象变为持久化状态 2、void persist(object obj) 将对象转化为持久化状态 3、Serializable save(object obj,object pk) 将obj对象转化为持久化状态,该对象保存到数据库,指定主键值 4、void persist(object obj,object pk) 也加了一个设定主键
Hibernate工作原理
Configuration cfg = new Configuration().configure();
开始
启动hibernate
构建Configuration 实例,初始 化该实例中的所有变量

hibernate sql写法

hibernate sql写法

hibernate sql写法Hibernate是一个开源的、高效的、强大的Java持久化框架,它提供了面向对象的方式来操作关系型数据库。

使用Hibernate,开发者可以以一种简单、灵活的方式进行数据库操作,而无需编写大量的SQL 语句。

在Hibernate中,我们可以通过编写映射文件或注解来定义实体类与数据库表之间的映射关系,通过Session对象来执行对数据库的操作。

在Hibernate中,SQL语句可以通过多种方式来编写。

下面将针对Hibernate中的SQL编写进行详细介绍。

1. HQL(Hibernate Query Language)Hibernate Query Language(HQL)是一种面向对象的查询语言,它类似于SQL语句,但是使用的是实体类和属性名,而不是表名和列名。

HQL可以实现对实体对象的查询、更新和删除等操作。

以下是HQL的一些常用语法:-查询所有的实体对象:FROM实体类名-条件查询:FROM实体类名WHERE条件-投影查询:SELECT属性列表FROM实体类名-排序查询:FROM实体类名ORDER BY属性ASC/DESC-分页查询:FROM实体类名LIMIT开始位置,查询数量HQL的编写与SQL类似,但是可以直接使用实体类和属性名,从而更加面向对象。

例如,以下HQL语句可以查询出所有年龄大于18岁的用户:FROM User WHERE age > 182.原生SQL查询除了HQL,Hibernate还支持原生的SQL查询。

原生SQL查询可以直接编写传统的SQL语句,但是需要使用Session对象的createNativeQuery方法来执行。

以下是原生SQL查询的一些常用语法:-执行查询:session.createNativeQuery("SELECT * FROM表名").getResultList()-执行更新或删除:session.createNativeQuery("UPDATE/DELETE FROM表名WHERE条件").executeUpdate()-参数绑定:Query.setParameter(参数名,参数值)原生SQL查询可以更灵活地操作数据库,但是需要注意SQL语句的安全性和兼容性问题。

Hibernate操作数据库的方法

Hibernate操作数据库的方法
//开始事务
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
//取得SessionFactory实例
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//打开一个Session实例
Session session = sessionFactory.openSession();
//开始事务
sessionFactory = new Configuration().configure(file)
.buildSessionFactory();
} catch (Throwable ex) {
//创建SessionFactory失败信息
System.err.println("Initial SessionFactory creation failed." + ex);
//开始事务
Transaction tx = session.beginTransaction();
//创建UserTable类实例
UserTable userTable=new UserTable();
//设置userName属性
userTable.setUserName("张三");
//设置password属性
userTable.setPassword("123456");

Hibernate基础知识详解

Hibernate基础知识详解

Hibernate基础知识详解<hibernate-mapping><class name="*.*.*" table="t_customer" catalog="***"><id name="id" column="c_id"><generator class="identity"/></id><property name="name" column="c_name" length="20"/><set name="orders" inverse="false" cascade="save-update"><key column="c_customer_id"/></set></class></hibernate-mapping>(1)统⼀声明包名,这样在<class>中就不需要写类的全名。

(2)关于<class>标签配置name 属性:类的全名称table 表的名称,可以省略,这时表的名称就与类名⼀致catalog 属性:数据库名称可以省略.如果省略,参考核⼼配置⽂件中 url 路径中的库名称(3)关于<id>标签,<id>是⽤于建⽴类中的属性与表中的主键映射。

name 类中的属性名称column 表中的主键名称 column 它也可以省略,这时列名就与类中属性名称⼀致length 字段长度type 属性指定类型<generator>它主要是描述主键⽣成策略。

hibernate.order_inserts参数

hibernate.order_inserts参数
Hibernate是一个Java持久层框架,用于将对象转换为关系数据库中的表格。

在Hibernate中,是一个配置参数,用于控制批量插入数据的顺序。

当使用Hibernate进行批量插入数据时,通常会使用()方法执行SQL语句或使用Hibernate的实体管理器(EntityManager)进行插入操作。

在默认情况下,Hibernate会按照实体管理器中的添加顺序依次执行插入操作。

但是,在某些情况下,我们可能需要控制批量插入的顺序,以确保数据的一致性和性能。

参数可以设置为以下两个值之一:
1、true:表示Hibernate将按照实体管理器中的添加顺序依次执行插入操作。

这是默认的插入策略,适用于大多数情况。

2、false:表示Hibernate将使用数据库的插入顺序来执行批量插入操作。

这意味着Hibernate将根据数据库的规则和性能来决定插入操作的顺序,可能不会按照实体管理器中的添加顺序依次执行插入操作。

需要注意的是,参数只适用于批量插入操作,对于单个实体的插入操作不受此参数的影响。

此外,在使用该参数时,还需要考虑数据的一致性和性能问题,以确保数据的正确性和可靠性。

Hibernate

有两种手动干预内部缓存的方法:
a. Session.evict
将某个特定对象从内部缓存中清楚
b. Session.clear
清空内部缓存
当批量插入数据时,会引发内存溢出,这就是由于内部缓存造成的。例如:
For(int i=0; i<1000000; i++){
For(int j=0; j<1000000; j++){
session.iterate(…)方法和session.find(…)方法的区别:session.find(…)方法并不读取ClassCache,它通过查询语句直接查询出结果数据,并将结果数据put进classCache;session.iterate(…)方法返回id序列,根据id读取ClassCache,如果没有命中在去DB中查询出对应数据。
User user = new User();
user.setUserName(“gaosong”);
user.setPassword(“123”);
session.save(user);
}
}
在每次循环时,都会有一个新的对象被纳入内部缓存中,所以大批量的插入数据会导致内存溢出。解决办法有两种:a 定量清除内部缓存 b 使用JDBC进行批量导入,绕过缓存机制。
user.setLoginName("jonny");
mit();
session2 .close();
这种方式,关联前后是否做修改很重要,关联前做的修改不会被更新到数据库,
比如关联前你修改了password,关联后修改了loginname,事务提交时执行的update语句只会把loginname更新到数据库

hibernate save 原理

hibernate save 原理
Hibernate的save()方法原理主要涉及以下步骤:
1.持久化状态管理:
●当调用session.save(entity)时,Hibernate会根据实体
对象的状态来决定如何操作数据库。

●如果实体对象是新创建的(瞬时态,即没有主键ID或ID
值为null),Hibernate会在底层执行SQL INSERT语句
将实体数据保存到数据库,并且数据库会自动生成(如果
配置了自动增长或其他策略)或者使用指定方式生成主键
ID。

随后,Hibernate会将这个ID更新回实体对象中,使
其转换为持久态。

2.持久态更新处理:
●如果实体对象已经是持久态(已经在当前Session缓存中
并且有主键ID),Hibernate会检查该实体是否发生了变
化(脏检查)。

▪若实体无任何属性更改,则不进行任何数据库操
作。

▪若实体有属性发生改变,Hibernate会跟踪这些更改并在适当时候执行SQL UPDATE语句以同步数
据库中的记录。

3.版本控制与并发管理:
●在支持版本控制的情况下,Hibernate还会在执行UPDATE
时包含版本字段,确保并发访问时的数据一致性。

4.事务管理:所有的数据库操作都发生在当前激活的事务内,
确保数据的一致性和完整性。

hibernate的flush方法

hibernate的flush方法Hibernate是一个开源的对象关系映射工具,提供了数据库操作的抽象层,使开发者可以使用面向对象的方式进行数据库操作。

Hibernate的flush方法是用于将Hibernate会话中的变化同步到数据库的操作。

在Hibernate中,会话(Session)是表示开发者与数据库之间的一次连接。

开发者可以通过向会话中添加、修改和删除对象来操作数据库。

而flush方法则是将这些变化同步到数据库。

在什么情况下需要使用flush方法呢?1. 当开发者需要保证数据的完整性时,可以使用flush方法。

当开发者添加、修改或删除了对象之后,调用flush方法会立即将这些变化同步到数据库。

2. 当开发者需要检查数据是否已经被持久化时,可以使用flush方法。

在调用flush方法之后,数据将被立即同步到数据库,可以通过查询数据库来验证数据是否已经被保存。

3. 当开发者需要在事务之外使用最新的数据时,可以使用flush方法。

在Hibernate中,默认情况下,事务提交之前,所有的数据变化只是在会话缓存中进行维护,而不会立即同步到数据库。

但是,如果开发者需要在事务之外查询到最新的数据,可以在查询之前调用flush方法,确保数据已经更新到数据库中。

4. 当开发者需要将数据库操作的异常抛出时,可以使用flush方法。

在执行数据库操作过程中,如果发生了异常,Hibernate会自动回滚事务,但不会抛出异常。

如果开发者希望在发生异常时得到通知,可以在执行数据库操作之前调用flush方法,如果操作失败,会抛出异常。

实际上,flush方法执行的操作如下:1.将会话中的持久化对象的状态同步到数据库。

持久化对象的状态包括新增、修改和删除。

2.将会话中的变化同步到数据库的操作也会级联到关联对象。

如果一些持久化对象发生了变化,与之关联的其他对象也会受到影响。

3. 执行flush操作不会结束当前事务,会话仍然处于打开状态,可以继续进行操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sjzdfl sjzdfl =newSjzdfl();
sjzdfl.setSjzdflmc("测试数据字典分类");
Transaction transacation = HibernateSessionFactory.getSession().beginTransaction();
sjzdflDAO.save(sjzdfl);
Sjzdfl sjzdfl = (Sjzdfl) sjzdflDAO.findBySjzdflmc("企业类型-分类").get(0);
System.out.println(sjzdfl.getSjzdflId());
System.out.println(sjzdfl.getSjzdflmc());
mit();
}
6.更新数据字典分类。
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
//首先进行查询
Sjzdfl sjzdfl = sjzdflDAO.findById(1);
}
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
Sjzdfl sjzdfl = (Sjzdfl) sjzdflDAO.findByProperty("sjzdflmc","企业性质-类型").get(0);
sjzdfl.setSjzdflmc("测试修改");
Transaction transacation = HibernateSessionFactory.getSession().beginTransaction();
sjzdflDAO.attachDirty(sjzdfl);
mit();
import java.util.Set;
import com.ibeifeng.dao.SjzdflDAO;
import com.ibeifeng.po.Sjzdfl;
import com.ibeifeng.po.Sjzdxx;
public class Test1 {
public static void main(String[] args) {
transaction = HibernateSessionFactory.getSession().beginTransaction();
sjzdflDAO.delete(sjzdfl);
mit();
}
KEY `sjzdflId` (`sjzdflId`),
CONSTRAINT `sjzdxx_ibfk_1` FOREIGN KEY (`sjzdflId`) REFERENCES `sjzdfl` (`sjzdflId`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=gb2312;
System.out.println(sjzdfl.getSjzdflId());
System.out.println(sjzdfl.getSjzdflmc());
}
5.添加数据字典分类。
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
1.查询所有的数据字典分类
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
List<Sjzdfl> all = sjzdflDAO.findAll();
for(Sjzdfl sjzdfl : all){
System.out.println(sjzdfl.getSjzdflId());
System.out.println(sjzdfl.getSjzdflmc());
}
4.按数据字典分类名称进行查询。
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
sjzdflDAO.delete(sjzdfl);
mit();
}
发现这样不行,因为有其他表的数据引用了该ID。
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
//首先进行查询
System.out.println(sjzdfl.getSjzdflmc());
}
或者
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
Sjzdfl sjzdfl = (Sjzdfl) sjzdflDAO.findByProperty("sjzdflId", 2).get(0);
CREATE TABLE `sjzdxx` (
`sjzzId` int(11) NOT NULL auto_increment,
`sjzdflId` int(11) default NULL,
`sjzzxxmc` varchar(255) default NULL,
PRIMARY KEY (`sjzzId`),
Sjzdfl sjzdfl = sjzdflDAO.findById(2);
//查询在数据字典信息表中引用该ID的数据
SjzdxxDAO sjzdxxD<Sjzdxx> sjzdxxs = sjzdxxDAO.findByProperty("sjzdfl", sjzdfl);
}
7.删除数据字典分类
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
//首先进行查询
Sjzdfl sjzdfl = sjzdflDAO.findById(1);
Transaction transacation = HibernateSessionFactory.getSession().beginTransaction();
Set<Sjzdxx> allxx = sjzdfl.getSjzdxxes();
for(Sjzdxx sjzdxx: allxx){
System.out.print(sjzdxx.getSjzzxxmc());
}
System.out.println();
System.out.println("-------------");
Transaction transaction = HibernateSessionFactory.getSession().beginTransaction();
for(Sjzdxx sjzdxx: sjzdxxs){
sjzdxxDAO.delete(sjzdxx);
}
mit();
System.out.println(sjzdfl.getSjzdflId());
System.out.println(sjzdfl.getSjzdflmc());
}
}
2.查询所有的数据字典分类,同时查看该分类下的所有信息
package com.ibeifeng.test;
import java.util.List;
}
}
}
3.按ID进行查询数据字典分类
publicstaticvoidmain(String[] args) {
SjzdflDAO sjzdflDAO =newSjzdflDAO();
Sjzdfl sjzdfl = sjzdflDAO.findById(1);
System.out.println(sjzdfl.getSjzdflId());
CREATE TABLE `sjzdfl` (
`sjzdflId` int(11) NOT NULL auto_increment,
`sjzdflmc` varchar(255) default NULL,
PRIMARY KEY (`sjzdflId`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=gb2312;
SjzdflDAO sjzdflDAO = new SjzdflDAO();
List<Sjzdfl> all = sjzdflDAO.findAll();
for(Sjzdfl sjzdfl : all){
System.out.println(sjzdfl.getSjzdflId());
System.out.println(sjzdfl.getSjzdflmc());
相关文档
最新文档