博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate学习(1)- 初识
阅读量:4681 次
发布时间:2019-06-09

本文共 6311 字,大约阅读时间需要 21 分钟。

一、概念引入

1、持久化:

  狭义概念:数据存储在物理介质不会丢失。

  广义概念:对数据的CRUD操作都叫做持久化。

2、加载: hibernate里,数据从数据库中加载到session。

3、ORM -- Object Relation Mapping

好处:

  解决阻抗不匹配:对象与关系数据库不匹配。

  没有侵入性:在代码中不用去继承或者实现hibernate类或实现hibernate提供的接口。

  hibernate:一个ORM的轻量级框架,解决持久化问题,是程序员可以从编写复杂的JDBC工作中解放,专注于业务,提高程序员的开发效率。

二、第一个Hibernate程序

1、资源包介绍

  •  documentation :相关文档
  •  lib :相关的jar包
  •  project :相关资源文件、模板文件、源码等

2、搭建hibernate环境

a)相关jar包 (required下的jar)

               

补充一点:hibernate所处的位置关系:

hibernate.cfg.xml 主要是配置信息

*.hbm.xml 实体与表的映射关系

   

b)添加配置文件(hibernate.cfg.xml)

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/hibernate_test
json
123456
org.hibernate.dialect.MySQL5Dialect
true
true
update

 

 c)创建数据库

CREATE TABLE `user` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  `pwd` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

d)创建实体对象

package com.demo.pojo;public class User {    private Long id;    private String name;    private String pwd;        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 String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }        @Override    public String toString() {        return "id=" + id + ", name=" + name + ", pwd=" + pwd;    }}

 

e)编辑*.hbm.xml文件

文件名一般为实体类User对应的名称 User.hbm.xml

 

f)测试

前提:将*.hml.xml文件 加入到hibernate.cfg.xml中

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/hibernate_test
json
123456
org.hibernate.dialect.MySQL5Dialect
true
true
update

测试类:

package com.demo.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.junit.jupiter.api.Test;import com.demo.pojo.User;public class QueryTest {    @Test    public void connectTest() {        /*        //1、新建Configuration对象 (Configuration管理加载配置文件)        Configuration config = new Configuration().configure();        //2、通过configuration得到SessionFactory对象        //3、通过SessionFactory得到Session对象        //hibernate3.x 中的写法        SessionFactory session = config.buildSessionFactory();                //hibernate4.3之前 ~~ 4.0        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();        SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);        Session session = sessionFactory.openSession();            //hibernate4.3  其中的一种 获取SessionFactory的方法        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();        SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);        Session session = sessionFactory.openSession();         */        //Hibernate5.1 的获取SessionFactory的方法        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();        Session session = sessionFactory.openSession();                //4、通过Session得到Transaction对象 (两种写法)        //Transaction transaction = session.getTransaction();        //transaction.begin();        Transaction transaction = session.beginTransaction();        //5、保存数据        User user = new User();        user.setName("张三");        user.setPwd("123456");        session.save(user);        //6、提交事务        transaction.commit();        //7、关闭Session        session.close();    }        @Test    public void queryTest() {        //Hibernate5.1 的获取SessionFactory的方法        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();        Session session = sessionFactory.openSession();                //5、保存数据        User user = session.get(User.class, 8L);        System.out.println(user);        //6、提交事务        //7、关闭Session        session.close();    }        @Test    public void saveTest() {        //Hibernate5.1 的获取SessionFactory的方法        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();        SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();        Session session = sessionFactory.openSession();                //4、通过Session得到Transaction对象        Transaction transaction = session.beginTransaction();        //5、保存数据        User user = new User();        user.setName("张三");        user.setPwd("123456");        session.save(user);        //6、提交事务        transaction.commit();        //7、关闭Session        session.close();    }} 

PS:

  1. SessionFactroy对象: 是一个session工厂,是一个重量级的对象,在一个应用中最好也是单例的,是一个线程安全的,属于进程级的对象。
  2. Session对象:使用hibernate进行数据库操作,主要使用session。session可以理解为对connction对象的一个包装。session对象中提供了对数据库的CRUD操作,Session是一个线程不安全的对象,生命周期很短暂,一般和事务一一对应。Session又称为hibernate的一级缓存。Session又是Transaction对象的工厂。
  3. Transaction对象:事务管理对象,通过Session获取该对象。
  4. Query 对象: 条件查询

 

PS:源码地址   

   

PS:原文地址  

 

转载于:https://www.cnblogs.com/JsonShare/p/8647269.html

你可能感兴趣的文章
动态规划入门 洛谷P2409 Y的积木
查看>>
【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
查看>>
Mysql全文索引
查看>>
推荐书?
查看>>
说说ID选择符、类选择符和HTML标记选择符的优先级顺序
查看>>
浅谈软件架构师的素质与职责
查看>>
Python生成器实现杨辉三角打印
查看>>
ElasticSearch集群搭建
查看>>
解决EntityFramework数据库无法自动迁移解决方法
查看>>
ElasticSearch 基本操作
查看>>
unity 中 Tilemap的使用 笔记
查看>>
sort()的多种用法
查看>>
UNIX C 文件权限 Part2_day01
查看>>
linux部署Oracle数据库--创建数据库
查看>>
[LeetCode] 148. Sort List 链表排序
查看>>
Java判断密码强度工具类
查看>>
阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第1课-Epoll机制精通...
查看>>
jmeter(四十四)常用性能指标分析
查看>>
6个出色的基于JQuery的Tab选项卡实例2010/01/29 16:261. jQuery 选项卡界面 / 选项卡结构菜单教程...
查看>>
F - 八苦を滅した尼公 POJ - 2763 线段树LCA
查看>>