Hibernate源码解析

一、先在官网 https://sourceforge.net/projects/hibernate/ 下载最新版本的开发包

下载解压后

  • documentation存放Hibernate的相关文件与API
  • lib存放Hibernate编译和运行所依赖的jar包,其中required子目录下包含了运行Hibernate项目必须的jar包。
  • project存放Hibernate各种相关的源代码与资源,project目录下的etc目录非常重要,它里面有一些关于Hibernate的配置信息。

二、新建一个 Java Project 即可

三、导入项目所需的jar包

四、配置Hibernate4框架各个层

创建数据库和表

CREATE DATABASE hibernate;
USE hibernate;DROP TABLE IF EXISTS `t_class`;
CREATE TABLE `t_class` (`classId` bigint(20) NOT NULL AUTO_INCREMENT,`className` varchar(255) DEFAULT NULL,PRIMARY KEY (`classId`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student` (`stuId` bigint(20) NOT NULL AUTO_INCREMENT,`stuName` varchar(255) DEFAULT NULL,`classId` bigint(20) DEFAULT NULL,PRIMARY KEY (`stuId`),KEY `FK_frxpowmeqnmf3sflhwgq3x0ub` (`classId`),CONSTRAINT `FK_frxpowmeqnmf3sflhwgq3x0ub` FOREIGN KEY (`classId`) REFERENCES `t_class` (`classId`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

项目结构

Hibernate4相关配置文件

  • hibernate.cfg.xml:它是Hibernate框架的核心配置文件。放在src目录下
  • xxx.hbm.xml:它主要是用于描述类与数据库中的表的映射关系。放在 hsx.com.model 目录下

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:3306/hibernate</property> //hibernate为数据库名<property name="connection.username">root</property><property name="connection.password">123456</property>  //数据库密码<!-- 方言 --><property name="dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- 控制台显示SQL --><property name="show_sql">true</property><!-- 自动更新表结构 --><property name="hbm2ddl.auto">update</property><mapping resource="hsx/com/model/Student.hbm.xml"/><!-- 映射到Teacher的实体@Entity --><mapping class="hsx.com.model.Student"/>  </session-factory></hibernate-configuration>

Student.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- 配置文件 --><hibernate-mapping package="hsx.com.model"><class name="Student" table="t_student"> <!-- name 实体类类名,table=数据表表名 --><id name="id" column="stuId">  <!--id是数据表中主键的映射,其他字段用property;name表示实体类中的属性,column表示id映射到数据表的字段名 --><generator class="native"></generator></id><property name="name" column="stuName"></property><many-to-one name="c" column="classId" class="hsx.com.model.Class" cascade="save-update"></many-to-one>
<!-- 在<many-to-one>这端,cascade默认是"none",假如我们希望在持久化多的一端的时候,自动级联保存和更新一的一端,可把cascade设置成"save-update" --></class></hibernate-mapping>

创建实体类
hsx.com.model.Student.java

package hsx.com.model;public class Student {private long id;private String name;private Class c;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Class getC() {return c;}public void setC(Class c) {this.c = c;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + "]";}}

生成Session工厂
hsx.com.util.HibernateUtil.java

package hsx.com.util;import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;public class HibernateUtil {private static final SessionFactory sessionFactory = buildSessionFactory();private static SessionFactory buildSessionFactory() {/* 实例化配置文件 */Configuration configuration = new Configuration().configure();/* 实例化服务登记 */ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();/* 获取Session工厂 */return configuration.buildSessionFactory(serviceRegistry);}public static SessionFactory getSessionFactory() {return sessionFactory;}}

创建测试类
hsx.com.service.StudentTest.java

package hsx.com.service;import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import hsx.com.model.Student;
import hsx.com.util.HibernateUtil;/*XML版CRUD实现*/
public class StudentTest {private SessionFactory sessionFactory = HibernateUtil.getSessionFactory();public static void main(String[] args) {StudentTest studentTest = new StudentTest();studentTest.add();// studentTest.delete();// studentTest.update();// studentTest.getAllStudent();}private void add() {/* 生成一个session */Session session = sessionFactory.openSession();/* 开启事务 */session.beginTransaction();Student s = new Student();s.setName("周杰伦");session.save(s);/* 提交事务 */session.getTransaction().commit();/* 关闭session */session.close();}private void delete() {/* 生成一个session */Session session = sessionFactory.openSession();/* 开启事务 */session.beginTransaction();Student student = (Student) session.get(Student.class, Long.valueOf(1));session.delete(student);/* 提交事务 */session.getTransaction().commit();/* 关闭session */session.close();}private void update() {/* 生成一个session */Session session = sessionFactory.openSession();/* 开启事务 */session.beginTransaction();Student student = (Student) session.get(Student.class, Long.valueOf(2));student.setName("张三2");session.save(student);/* 提交事务 */session.getTransaction().commit();/* 关闭session */session.close();}private void getAllStudent() {/* 生成一个session */Session session = sessionFactory.openSession();/* 开启事务 */session.beginTransaction();String hql = "from Student";Query query = session.createQuery(hql);@SuppressWarnings("unchecked")List<Student> studentList = query.list();for (Student student : studentList) {System.out.println(student);}/* 提交事务 */session.getTransaction().commit();/* 关闭session */session.close();}}

Hibernate源码解析相关推荐

  1. clickhouse原理解析与开发实战 pdf_重识SSM,“超高频面试点+源码解析+实战PDF”,一次性干掉全拿走...

    重识SSM,"超高频面试点"+"源码解析"+"实战PDF",一次性干掉全拿走!! 01 超高频面试点知识篇 1.1 Spring超高频面试点 ...

  2. 谷歌BERT预训练源码解析(二):模型构建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...

  3. 谷歌BERT预训练源码解析(三):训练过程

    目录 前言 源码解析 主函数 自定义模型 遮蔽词预测 下一句预测 规范化数据集 前言 本部分介绍BERT训练过程,BERT模型训练过程是在自己的TPU上进行的,这部分我没做过研究所以不做深入探讨.BE ...

  4. 谷歌BERT预训练源码解析(一):训练数据生成

    目录 预训练源码结构简介 输入输出 源码解析 参数 主函数 创建训练实例 下一句预测&实例生成 随机遮蔽 输出 结果一览 预训练源码结构简介 关于BERT,简单来说,它是一个基于Transfo ...

  5. Gin源码解析和例子——中间件(middleware)

    在<Gin源码解析和例子--路由>一文中,我们已经初识中间件.本文将继续探讨这个技术.(转载请指明出于breaksoftware的csdn博客) Gin的中间件,本质是一个匿名回调函数.这 ...

  6. Colly源码解析——结合例子分析底层实现

    通过<Colly源码解析--框架>分析,我们可以知道Colly执行的主要流程.本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现.(转载请指明出于break ...

  7. libev源码解析——定时器监视器和组织形式

    我们先看下定时器监视器的数据结构.(转载请指明出于breaksoftware的csdn博客) /* invoked after a specific time, repeatable (based o ...

  8. libev源码解析——定时器原理

    本文将回答<libev源码解析--I/O模型>中抛出的两个问题.(转载请指明出于breaksoftware的csdn博客) 对于问题1:为什么backend_poll函数需要指定超时?我们 ...

  9. libev源码解析——I/O模型

    在<libev源码解析--总览>一文中,我们介绍过,libev是一个基于事件的循环库.本文将介绍其和事件及循环之间的关系.(转载请指明出于breaksoftware的csdn博客) 目前i ...

  10. libev源码解析——调度策略

    在<libev源码解析--监视器(watcher)结构和组织形式>中介绍过,监视器分为[2,-2]区间5个等级的优先级.等级为2的监视器最高优,然后依次递减.不区分监视器类型和关联的文件描 ...

最新文章

  1. Pytorch和CNN图像分类
  2. 万字长文,别再说你不懂Linux内存管理了(合辑),30 张图给你安排的明明白白...
  3. 《IPv6安全》——1.7 推荐读物和资料
  4. c语言最小点对问题_C语言教程(一):程序开发理论基础!
  5. apache多站点配置+多端口配置
  6. Sring类型数组赋值
  7. python中codecs_Python:如何使用codecs模块将unicode数据保存成gbk格式
  8. SciPy 积分的计算
  9. java中如何判断一个String 是否可以强制转换成Integer
  10. Vue数据更新视图不更新的几种解决方案
  11. python实现计算器功能、输入加减乘除、不是就跳出_使用Python实现计算器功能
  12. 无线路由器关掉dhcp服务器,无线路由器关闭dhcp会好不好
  13. 泰晤士高等教育世界大学排名(400强)—前50位
  14. php guzzle,在PHP中实现使用Guzzle执行POST和GET请求
  15. android开发之上传头像
  16. AG9310MEQ AG9310MFQ 安格两款USB TYPEC转HDMI音视频数据转换功能芯片参数差异与设计电路参考
  17. Destroy Walls
  18. Amber中对体系的距离角度和二面角加以限制
  19. 浅析私域流量和公域流量的区别
  20. Day7:一款无线抢答系统的设计思路

热门文章

  1. dnf超时空漩涡副本路线流程图_DNF超时空漩涡单人副本怎么入场_超时空漩涡单人副本详细规则 _3DM网游...
  2. 网络安全-利用sniffer抓包软件,分析IP头的结构(详解)
  3. MongoDB课堂笔记
  4. 5分钟搭建私人Java博客系统——Tale
  5. REST Assured api
  6. 工厂模式简介和应用场景
  7. 常见计算机病毒种类及特征介绍与分析
  8. 写作技巧~100段作文排比句(1-20段),考试一定用得上,赶紧收藏!
  9. win2012R2无法打开匿名级安全令牌,安装.net 3.5
  10. 新唐 Nuvoton ML51PC 入门 点亮板载LED