Hibernate ORM框架学习日记基础篇-1
一、简介
Hibernate是轻量级Java EE应用的持久层解决方案,不仅管理Java类库到数据库表的映射,还提供数据查询和获取数据的
方法,它完成对象模型和基于SQL的关系模型的映射关系,使得开发者可以完全采用面向对象的方法来开发应用程序。
ORM全称为Object/Relation Mapping,即对象/关系数据库映射,完成面向对象到关系数据库的映射,将关系数据库包装成
面向对象的模型
二、hibernate 及相关下载
在Eclipse中新建一个项目,然后准备好需要的jar包,数据库使用的是mysql
a.官网下载hibernate orm jar包,解压之后将lib中的required所有jar包导入项目
b.由于使用mysql数据库连接,所以要将mysql的数据库连接的jar导入项目,即mysql-connector-java-5.1.42-bin.jar
c.这里使用c3p0数据源进行数据库的连接管理,所以需要将下载的hibernate jar包中的lib文件夹下的optional文件夹下的
c3p0文件夹下的所有jar包导入项目
d.测试类需要用到JUnit,需要在项目中导入JUnit4的jar包
三、开始使用hibernate
1.创建持久化对象
持久化对象(PO)是hibernate中重要的媒介,以面向对象的方式完成对数据库的增删改的操作,在我们对持久化进行创建、修改
删除的操作时,不需要去再去操作数据库,hibernate会负责把这种操作转换为对数据库表的操作。
持久化对象(PO)= java的普通传统对象POJO+持久化的注解
import java.util.Date;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType;@Entity @Table(name="user_info") public class User {private Integer userId;private String userName;private String telNumber;private Date registerDate;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getTelNumber() {return telNumber;}public void setTelNumber(String telNumber) {this.telNumber = telNumber;}@Temporal(TemporalType.TIMESTAMP)@Column(name="registerDate")public Date getRegisterDate() {return registerDate;}public void setRegisterDate(Date registerDate) {this.registerDate = registerDate;}}
上面创建一个名为User的持久化对象,并使用了相应的注解
@Entity 表明该类为Hibernate的持久化类
@Table 指定该类映射的数据库中的表,user_info
@Id 表示该类的标识属性,一般对应数据库的主键
@GeneratedValue: 表示主键的生产策略,此处的策略为自动增长
@Column:对应表中的字段名称
@Temporal:处理时间的格式
…
通过上面的注解就将POJO类映射到了数据库的user_info表中
二、配置文件hibernate.cfg.xml
右击src文件夹,新建文件,命名为hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 连接数据库的信息 --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost/huan</property><property name="connection.username">root</property><property name="connection.password">root</property><!-- 连接池管理策略 --><!-- 最大连接数 --><property name="hibernate.c3p0.max_size">100</property><!-- 最小连接数 --><property name="hibernate.c3p0.min_size">10</property><!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --><property name="hibernate.c3p0.timeout">5000</property><!-- 最大的PreparedStatement的数量 --><property name="hibernate.c3p0.max_statements">100</property><property name="hibernate.c3p0.idle_test_period">300</property><property name="hibernate.c3p0.acquire_increment">2</property><property name="hibernate.c3p0.validate">true</property><!-- 数据库的方言 --><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 根据需要自动创建表 如果表存在不新建表,只操作数据 --><property name="hbm2ddl.auto">update</property><!-- 打印sql --><property name="show_sql">true</property><!-- 格式化打印的sql --><property name="hibernate.format_sql">true</property><!-- 罗列持久化的类名 --><mapping class="com.huan.entity.User"/></session-factory> </hibernate-configuration>
hibernate配置文件的默认名称为hibernate.cfg.xml,hibernate会自动去加载该文件。
三、测试使用hibernate
import java.util.Date;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test;import com.huan.entity.User;public class HibernateBasicUseTest {private SessionFactory sessionFactory;@Beforepublic void setUp() {//解析配置文件 默认去加载hibernate.cfg.xmlConfiguration config = new Configuration().configure();//创建SessionFactory实例sessionFactory = config.buildSessionFactory();}@Afterpublic void tearDown(){sessionFactory.close();}@Testpublic void testHibernateBasicUse(){//创建SessionSession session = sessionFactory.openSession();//开启事务Transaction tx = session.beginTransaction();//操作持久化对象User user = new User();user.setRegisterDate(new Date());user.setTelNumber("15678986774");user.setUserName("aha");//保存 session.save(user);//事务提交 tx.commit();//关闭Session session.close();}}
上面代码创建了一个测试类,对于使用Hibernate可以总结为如下步骤
1.获取Configuration实例(加载配置文件)
2.获取SqlSessionFactory
3.获取Session
4.开启事务Transaction
5.完成业务逻辑,使用Session操作持久化对象,即完成对数据库的操作
6.提交事务,关闭Session
运行上面的测试类,由于之前的<property name="hbm2ddl.auto">update</property>为update,在没有表的情况下hibernate会先去创建表,
所以第一次运行上面的测试类可以看到控制台输出了两条SQL语句。
然后到数据库中查看是否已经新建了表并且保存了数据:
结果表明测试运行成功,整个过程并没有手写sql语句去操作数据库,这个操作由hibernate去完成,我们操作的仅仅是User对象。
这应该就是ORM框架的特色吧。
转载于:https://www.cnblogs.com/yueguangmoliya/p/7004709.html
Hibernate ORM框架学习日记基础篇-1相关推荐
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...
- 计算机视觉面试宝典--深度学习机器学习基础篇(四)
计算机视觉面试宝典–深度学习机器学习基础篇(四) 本篇主要包含SVM支持向量机.K-Means均值以及机器学习相关常考内容等相关面试经验. SVM-支持向量机 支持向量机(support vector ...
- 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明
基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...
- 【Kotlin】学习小记-基础篇
Kotlin学习小记-基础篇 Kotlin的介绍 入门基础篇 属性声明 关于val和final的小Tips 参数 1.可变参数 2.命名参数 函数返回值 1.默认返回Unit值 2.返回Nothing ...
- PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)
PyTorch框架学习十--基础网络层(卷积.转置卷积.池化.反池化.线性.激活函数) 一.卷积层 二.转置卷积层 三.池化层 1.最大池化nn.MaxPool2d 2.平均池化nn.AvgPool2 ...
- 2020_12-电路理论框架复习思考-基础篇
2020_12-电路理论框架复习思考-基础篇 电路理论究竟在学些什么?我认为本质上,是线性拓扑结构,KCL,KVL和V-I关系,于是,在电阻电路部分,有它的拓扑结构带来的各种性质和运算方式,包括结点方 ...
- MySQL学习笔记-基础篇1
MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...
- 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程
基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...
- STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow)
STM32运行深度学习指南基础篇(3)(STM32CubeMX.AI+Tensorflow) 在上一篇文章中我们已经有训练好的tflite模型,接下来我们要在Clion中实现,如果是Keil的朋友可以 ...
最新文章
- Toast 位置的改变 和 Toast的简单用法
- 乐源机器人优点跟缺点_机床实现自动化上下料选桁架机械手还是关节机器人好?...
- signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
- 信息学奥赛一本通 1069:乘方计算 | OpenJudge NOI 1.5 13
- 一文梳理水下目标检测方法
- LINUX 硬盘分区及文件系统
- hbase shell查询表中某字段不为空的数据量_HBase工作原理
- Xcode无法启动模拟器或者真机
- ubuntu--雷鸟只能收邮件不能发邮件
- python画3d图-使用python绘制3d的图形
- fastjson将json字符串转化为java对象
- 游泳,情人节纪念一下。
- JavaSE基础——注解
- 焦仲卿刺杀孙策_惊闻:孙伯符死于焦仲卿之手。。。
- JDY-18+STM32的蓝牙APP控制 PWM灯光
- Freecad的Python脚本
- 自动尺寸标注 html,PxCook - 高效易用的自动标注工具,生成前端代码,设计研发协作利器...
- PyTorch 最新安装教程(2021-07-27)
- 【百度站长工具】使用网站收录工具加速网站收录
- Android上层进入recovery流程
热门文章
- MIT、哈佛合作,这个研究让神经网络认清自己“几斤几两”!
- CSDN博客如何转载(技术贴)
- android 获取网卡mac_Android获取本机Mac地址及IP地址方法
- ueditor版本python3_GitHub - crazyinstall/DjangoUeditor3: Django Ueditor 兼容Python3改进,Python2上也可用...
- python编程人脸识别工具_几行代码带你实现人脸识别。Python 就是这么简单
- java同步锁synchronized_Java对象锁和类锁全面解析(多线程synchronized关键字)
- 033_使用ArrayDeque模拟队列结构
- 022_Jedis的事物
- 004_Ajax服务器响应
- 025_html表格