hibernate——初步认识

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案) 阅读详情

开始学习hibernate了,跟着网上的教学视频边看边学。现在有些迷茫,不知道学这些东西,以后能不能用得上,也不知道未来会发展成什么样子,也不知道我的基础算是打好了没有,总觉得学这些框架,有点浮沙筑高台的感觉,心里很不踏实。知道的都是些表面的东西,框架底层是什么样的,看看那些源代码,想看懂很有难度啊。另外,虽说设计很有魅力,但是基石打不牢,设计也往往是空中楼阁。希望,我在学习的时候和之余,能够多多思考,多问几个为什么,深入到底层,虽说看不懂,但是看看心里总会踏实一些。

以我目前对hibernate的理解,就是它是对jdbc进行了封装,使Java对象和数据库的关系模型进行了映射,可以使程序员用对象编程的思想来操纵数据库。这样做的好处,等待以后体会吧。。。。。

hibernate框架的搭建就不说了,下载下来代码包,添加到lib目录就可以了,这里主要是举一个小例子,简单的看一下,hibernate的工作流程。

本例是建立了一个User类,将User类和数据库中的一个表进行了映射。 对要和数据库的表进行映射的Java类,是有一定的要求的:

 (1)一定要有一个无参数的构造方法
 (2)建议有一个id属性,这个id属性映射到表中是用来做主键的,会使效率高很多
 (3)这个类最好不要是final的,因为对懒加载有影响

User类:

package com.suo.domain;

import java.util.Date;

public class User {
	
	private int id;
	private String name;
	private Date birthday;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}


其次,就是配置映射文件,这个文件很重要,它就是将User类和数据库表关联起来。

1. 首先要指定要映射的类所在的包。

2. 在class标签中,指定要映射的是哪个类,并且可以用table属性指定,要和数据库中的哪个表进行映射,默认的是和类名相同的表。

3. id标签是专门用来映射主键的,它和其他的非主键属性形式不一样,并且在id标签内部,用generator标签来指定用什么组件来生成主键。

4. property标签是用来指定其他的非主键属性

5. 在id、property标签中还有一个属性是column,可以用来指定对象中的属性和表中的哪个列进行映射,默认的是和属性名相同的列。

6. 如果对象中的某个属性不需要存储到数据库中,那么在映射文件中,就不需要配置这个属性。

User.hbm.xml:

<hibernate-mapping package="com.suo.domain">
	
	<class name="User">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<property name="birthday"/>
		
	</class>
	
</hibernate-mapping>

然后就是对数据库的配置文件了,这里用的数据库是Mysql,对数据库进行配置有两种方式,一种是在hibernate.properties中进行配置,一种是在hibernate.cfg.xml文件中进行配置,由于后者可视性好,所以一般在xml文件中进行配置,如下:

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory name="foo">
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///test</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 因为hibernate具有可移植性,所以此处需要指定它的方言 -->
		
		<property name="hibernate.hbm2ddl.auto">create</property>
		<!-- 自动创建对应的表 ,create这种模式是每次重新启动程序的时候,都会把原先的表删除掉-->
		
		<mapping resource="com/suo/domain/User.hbm.xml"/>
		<!-- 指明映射文件在哪里 -->
	</session-factory>
</hibernate-configuration>


接下来,就是应用了,由于读取配置文件和映射文件很耗时,所以将其抽象出来,单独组成一个类。

HibernateUtil.java:

package com.suo.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public final class HibernateUtil {
	
	private static SessionFactory sessionFactory;
	
	/**
	 * 私有的构造方法,这样就可以防止实例化这个类
	 */
	private HibernateUtil(){}
	
	/**
	 * 因为读取配置文件和映射文件很耗时间,所以这段代码块定义成静态的,那么只加载一次就可以了
	 */
	static{
		Configuration config=new Configuration();
		config.configure();//读取配置文件,默认的是读取hibernate.cfg.xml,若文件名不是这个,也可以以参数形式指定
		sessionFactory=config.buildSessionFactory();
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	
	public static Session getSession(){
		return sessionFactory.openSession();
	}
}

在Main中进行测试:

package com.suo.test;

import java.util.Date;

import org.hibernate.HibernateException;
import org.hibernate.Transaction;
import org.hibernate.Session;

import com.suo.domain.User;
import com.suo.hibernate.HibernateUtil;

public class Test {

	public static void main(String[] args) {
		
		User user=new User();
		
		user.setBirthday(new Date());
		user.setName("suo");
		
		addUser(user);
		
		System.out.println("end");
	}
	
	public static void addUser(User user){
		Session session=null;
		Transaction transaction=null;
		
		try{
			session=HibernateUtil.getSession();//获得一个连接
			transaction=session.beginTransaction();//开启一个事务
			
			session.save(user);
			
			transaction.commit();/*设置为自动提交,因为hibernate默认的设置为不自动提交,
								        这时候使用的数据库引擎为InnoDB,支持事务*/
			
		}catch(HibernateException e){
			if(transaction!=null){
				transaction.rollback();
			}
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	
	public static User getUser(int id){
		Session session=null;
		try{
			session=HibernateUtil.getSession();
			
			/**
			 * 这里要传递两个参数,第一个是指定要到哪个表中查询(因为User.class这个实例包含了这个类的很多信息),
			 * 第二是这个表的主键。这两个参数即可唯一确定一个记录,一个对象。
			 */
			User user=(User)session.get(User.class, id);
			
			/**
			 * load是懒加载,这里和get方法不同,在这里它不会立即访问数据库,而是生成一个User的子类的实例,
			 * 并返回,所以即使在数据库中该主键对应的记录为空,这里也会返回一个User的子类的实例,而不是空。
			 */
//			User user=(User)session.load(User.class, id);
//			System.out.println(user.getName()+"\n"+user.getBirthday());
//			System.out.println(user.getClass().getName());//可以查看user的所属的类型
			
			return user;
		}catch(HibernateException e){
			e.printStackTrace();
			return null;
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
}


【25届数字IC秋招总结】面试经验10——紫光同芯 25届数字ic面试记录——紫光同芯 阅读详情

相关推荐

Python 上位机开发

首先,什么是上位机?上位机通常是指可以与下位机(如单片机、传感器等硬件设备)进行通信和交互,实现数据采集、控制指令发送以及数据处理和展示的计算机程序。 Python 作为一种高级编程语言,在开发上位机方面具有诸多优势。它拥有丰富的第三方库,使得开发过程变得相对简单和高效。

weixin_46807151的博客 4303

hibernate 初步

hibernate初步自学体会

lxy_12345611的博客 258

从高德、百度地图下载POI数据?用这个工具5分钟搞定GCJ02/BD09到WGS84的坐标纠偏

本文详细解析了高德、百度地图POI数据坐标偏移问题,并提供了从GCJ02/BD09到WGS84的高效转换方案。通过开源工具如coordtransform和ArcGIS等专业软件,实现毫米级精度的坐标纠偏,适用于商业选址、GIS分析等场景,显著提升数据准确性和工作效率。

weixin_26789847的博客 450

Hibernate的初步总结

ORM思想下的Hibernate,轻量级,没有可侵入性的框架!

王鹏 坚持学习,坚持进步,优秀是一种习惯 420

GNSS-RTK/INS紧组合里,那个‘杆臂改正’到底怎么算?一个公式讲清INS与天线位置的关系

本文深入解析GNSS-RTK/INS紧组合导航系统中的杆臂改正(Lever Arm Correction)原理与实现方法。详细介绍了杆臂效应的物理本质、数学建模及误差扰动分析,揭示了IMU与GNSS天线位置关系的核心公式,并提供了工程实现中的常见误区与验证方法。通过Python代码示例和紧组合量测模型处理流程,帮助开发者准确理解并应用这一关键技术。

weixin_33137081的博客 357

Openbmc系列之自动化测试框架1

Openbmc作为当下BMC固件领域最流行的开源软件,具备从需求计划、开发、调试、测试、版本管理等完整的体系。在测试领域,Openbmc基于python的robotframework框架,实现Openbmc的自动化测试,为高效发布Openbmc版本提供有力支持。本文作为测试系列文档一,介绍Openbmc自动化测试虚拟Openbmc的环境搭建。

qq_20341747的博客 2110

Hibernate框架初步认识

Hibernate框架原理在Hibernate 中,常用的组件有PO,框架API,Hibernate 配置文件,Hibernate 映射文件等 对应关系如图: 对于一个数据库操作,执行过程如下: 1.框架API通过读取Hibernate 配置文件,连接到数据库 2.当对PO进行操作时,框架API通过Hibernate 映射文件来决定才做的表和列 3.框架API执行SQL语句Hibern

Lystery 373

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2666

Hibernate初步部署

下载全套文件: hibernate-release-4.1.7.Final.zip 目录结构 Documentation文件夹下是开发帮助文档 Lib文件夹是开发使用的库,其中该文件夹下面的required目录是开发时必须导入的JAR文件; Project文件夹是项目源码文件 JDBC与Hibernate的比较:   Hibernate的初步配置部署: 1.

hanhan313的专栏 1832

电子电器架构 --- OEM企标中规定ECU启动时间的目的

电子电器架构 --- OEM企标中规定ECU启动时间的目的

Soly_kun的博客 223

NVIDIA Jetson之远程控制软件NoMachine安装使用

参考:https://www.bilibili.com/video/BV1cg4y1i776?t=12 0 背景

ZONGXP的博客 1万+

初步使用Hibernate

1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置 Hibernate.cfg.xml 2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义 HibernateUtil 类 , 里面最主要的就是一个 sessionFactory 3.&nbsp;&nbsp;&nbsp;&am

189

【报错解决】OpenClaw 报错 `openclaw: command not found`:全局命令未加入系统 PATH 的深度排查与修复指南

在国产AI工具链开发中,OpenClaw作为关键命令行工具常出现command not found报错。本文深度分析该问题的根源——Linux环境变量PATH未包含用户级安装目录(~/.local/bin)。通过四种解决方案(临时PATH修改、永久配置、软链接、虚拟环境处理)和排错Checklist,揭示"命令存在却找不到"的本质是路径配置问题,特别适用于Docker/国产Linux/非root环境。文中强调理解Linux工具链机制对国产AI开发的重要性,并指出这是开发者掌握环境

博客 5383

Hibernate初步介绍与学习

hibernate前言初步介绍1、学习的优势2、项目搭建总结 前言 今天为大家分享的是一个SSH2的一个持久层框架, 也就是hibernate框架,也称ORM(对象关系映射框架! 初步介绍 1、学习的优势 跨数据库的无缝移植(Sqlserver、Oracle、Mysql) 数据持久化 ORM(Object Relational Mapping):对象关系映射。 对象与关系型数据库之间的映射管理框架 2、项目搭建 总结 ...

月亮投递员的博客 683

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Hibernate的初步体验。

记得有一次,一个女孩子给我打电话过来。 她是某个公司的人力资源部的,当时我乱投简历,所以就接到了这么一个电话。 于是,聊了一会后。 她问我:“你了解三大框架么?” 我略带怒意的说:“三大框架,你得告诉我什么框架,我就知道,你说个三大框架,我怎么知道是什么框架?” 她好像感到很不好意思的说:“恩...” 工作当然没有着落 不过之后我知道了,所谓的三大框架,就是SSH。 而我这

fortheother的专栏 683

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Hibernate初步学习

一、[color=green]入门配置[/color] 1.步骤: a.加载hibernate类包,数据库链接包 b.配置hibernate.cfg.xml文件 c.写pojo类 d.创建相应的pojo类**.hbm.xml文件 e.将创建的**.hbm.xml文...

qingBYqing的专栏 181

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Hibernate初步

Hibernate 中对象有三种状态 Transient(瞬时), Persistent(持久)和 Detached(托管)状态。 在持久层的对象称为 PO (Persistent Object),瞬时对象和托管对象称为VO(Value Object) 瞬时状态:  new一个对象,如果没有变量对其进行引用,它将被JVM回收;瞬时对象在内存中是孤立存在的,它的意义仅是携带信息的载体,和数据库

meinica的专栏 427

Hibernate 初步

hibernate-release-4.1.6:  http://downloads.sourceforge.net/project/hibernate/hibernate4/4.1.6.Final/hibernate-release-4.1.6.Final.zip?r=http%3A//sourceforge.net%2Fprojects%2Fhibernate%2Ffiles%2Fhiber

XF的专栏 834

[Hibernate] 初步认识

对Hibernate的初步认识。

geodoer 383

Hibernate HQL 初步实例

项目结构: Hibernate 配置文件  hibernate.cfg.xml mysqlTest jdbc:mysql://10.2.11.6:3306/yyj root 123456 com.mysql.jdbc.Driver org.hibernate.dialect.MySQLDialect true true

一颗开花的树 435

hibernate初步认识

坚持每天写博文,积累下开发中的点点滴滴 JDBC的本质:处理对象和关系模型之间的转换 1.优点: 最底层,性能最高 开发者控制程度最高 2.缺点: 使用复杂(重复代码太多) 需要注意很多细节(如类型需要对应) 移植数据库很麻烦 性能优化需要自己处理(如缓存) hibernate的本质:处理对象和关系模型之间的转换,封装的JDBC 1.优点: 开发者操作简便 数据缓存等

张晓鉴Allen的博客 246

Hibernate的初步认知

1.hibernate的初始化, 使用静态代码进行初始化 static{ //根据默认位置的hibernate配置文件的配置信息,创建一个Configuration实例 (1)创建一个Configuration类的实例,Configuration类的构造方法把默认文件路径下的hibernate.properties配置文件中的配置信息读入到内存: ...

qq_23834457的博客 134

Hibernate的初步认识

这是学习java的第四个月,开始了框架的学习,先看看关于hibernate的一些基础知识吧!!!!!!! Hibernate的简介 1、     是优秀的持久化解决方案。 2、     实现持久化的两种方式: a) 序列化:将对象以流的形式保存在硬盘中 b) 数据库:将对象转换成数据库中的一条数据 3、     对象映射关系:ORM(ObjectRelationship Ma

MCJ_0214的博客 319

hibernate中缓存的初步认识

为什么实用缓存

jvm 1095

Hibernate的初步

1.简介 在java开发领域,基于数据库应用的设计与实现一直都是面向关系的,Hibernate对象/关系映射ORM框架的出现为java面向对象开发提供了易于使用的数据持久化解决方案。   ORM介绍:   (a).ORM(Object Relation Mapping)中文翻译成对象关系映射   (b).ORM是一种为解决“面向对象”与“关系数据库”存在不匹配的现象而出现的一种技术 ...

weixin_30552811的博客 76

hibernate 初步

pom节点: dependency> groupId>org.hibernategroupId> artifactId>hibernate-coreartifactId> version>5.2.10.Finalversion> dependency> dependency> groupId>javax.transactiongroupId> art

qq_36074163的博客 373
上一篇: struts2文件下载
下一篇: hibernate——和数据库关联的对象的三种状态
hackerain
博客等级 码龄16年 753粉丝 220原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值