一、Hibernate 简介

1、Hibernate 简介

  Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象。

2、Hibernate 优缺点

  优点与缺点都是相对的,那么讲一个东西的优缺点我们都需要一个参数对比,而咱们要来进行对比的咱们操作数据的原生的JDBC:

1、JDBC的优缺点

本质:处理Java对象和关系型数据库表之间的转换。

优点:

  操作数据库最底层,性能最高(需要你是有相应的经验,并且是一个数据库高手)。

缺点:  

1、使用复杂(重复代码太多)。

2、移植数据库很麻烦,改动比较多;主键的生成方式不同(mysql使用自增,oracle使用序列);分页的sql语句也是不同(mysql使用limit,oracle使用ROWNUM)。

3、性能优化得自己处理,没有提供数据的缓存。

4、面向sql语句操作,不是面向对象的。

2、hibernate的优缺点

  本质:处理Java对象和关系型数据库表之间的转换,只是对JDBC再次做了一层封装。

优点:

1、程序员操作很简单,代码简单 session.save(user);

2、直接面向对象操作。

3、提供世界级数据缓存(现在几乎所有的ORM框架的缓存都是学的Hibernate);一级缓存,二级缓存,查询缓存。

4、数据库移植性很强,很少的修改;把各种数据库抽取了一个方言接口;不同数据库实现一个方言接口,如果换了数据库,必须修改方言实现,驱动jar文件,连接数据库信息。

缺点:

1、不能干预sql语句的生成;session.get(User.class,id); 默认查询t_user表的所有字段,自动生成select user0_.id,user0_.name,user0_.age from t_user user0_ where    user0_.id=?

2、一个项目中,如果对sql语句的优化要求比较高,不适合用hibernate(不过可以使用 Hibernate 对原生sql 的支持来解决)。

3、如果一张表中有上亿级别的数据量,也不适合用hibernate,其实也不适合用jdbc(可以使用数据库读写分离,分库分表方案解决)。

二、Hibernate 入门

1、步骤

1、拷贝jar包

2、建立 pojo

Product 类:

 1 package com.hibernate.pojo;
 2
 3 /**
 4  * @author zt1994 2018/3/6 14:16
 5  */
 6 public class Product {
 7     private Integer id;
 8     private String name;
 9     private float price;
10
11     public Integer getId() {
12         return id;
13     }
14
15     public void setId(Integer id) {
16         this.id = id;
17     }
18
19     public String getName() {
20         return name;
21     }
22
23     public void setName(String name) {
24         this.name = name;
25     }
26
27     public float getPrice() {
28         return price;
29     }
30
31     public void setPrice(float price) {
32         this.price = price;
33     }
34 }

3、建立映射文件

Product.hbm.xml 映射文件:

 1 <!DOCTYPE hibernate-mapping PUBLIC
 2         "-//Hibernate/Hibernate Mapping DTD//EN"
 3         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 4
 5 <!--映射文件-->
 6 <hibernate-mapping package="com.hibernate.pojo">
 7     <!--class表示一个由hibernate管理的持久对象,对应数据库中一个表-->
 8     <!--table数据库的表名-->
 9     <class name="Product" table="product">
10         <id name="id" type="int" column="id">
11             <!--generator表示主键的生成方式,native自动选择数据库本地的策略-->
12             <generator class="native"/>
13         </id>
14         <!--非主键属性-->
15         <property name="name" column="name" type="string"/>
16         <property name="price" column="price" type="float"/>
17     </class>
18 </hibernate-mapping>

4、建立hibernate核心配置文件

hibernate.cfg.xml 配置文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5
 6 <!--hibernate核心配置文件-->
 7 <hibernate-configuration>
 8     <session-factory>
 9         <property name="dialect">
10             org.hibernate.dialect.MySQLDialect
11         </property>
12         <!--链接池配置-->
13         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
14         <property name="connection.url">jdbc:mysql://localhost:3306/how2java</property>
15         <property name="connection.username">root</property>
16         <property name="connection.password">admin</property>
17         <!--显示sql语句-->
18         <property name="show_sql">true</property>
19
20         <!-- 映射文件-->
21         <mapping resource="mapper/Product.hbm.xml"/>
22     </session-factory>
23 </hibernate-configuration>

5、编辑dao实现类

dao 接口:

 1 package com.hibernate.dao;
 2
 3 import com.hibernate.pojo.Product;
 4
 5 import java.util.List;
 6
 7 public interface IProductDao {
 8
 9     /**
10      * 添加产品
11      * @param product
12      * @return
13      */
14     void addProduct(Product product);
15 }

dao 实现:

 1 package com.hibernate.dao.impl;
 2
 3 import com.hibernate.dao.IProductDao;
 4 import com.hibernate.pojo.Product;
 5 import org.hibernate.Query;
 6 import org.hibernate.Session;
 7 import org.hibernate.SessionFactory;
 8 import org.hibernate.Transaction;
 9 import org.hibernate.cfg.Configuration;
10
11 import java.util.List;
12
13 /**
14  * @author zt1994 2018/3/6 14:40
15  */
16 public class ProductDaoImpl implements IProductDao {
17
18     @Override
19     public void addProduct(Product product) {
20         //1.读取并解析配置文件
21         Configuration configuration = new Configuration();
22         //2.加载配置文件,如果不设置加载默认配置文件hibernate.cfg.xml
23         configuration.configure("hibernate.cfg.xml");
24         //3.生成会话工厂
25         SessionFactory sessionFactory = configuration.buildSessionFactory();
26         //4.获取session
27         Session session = sessionFactory.openSession();
28         //5.开启事务
29         Transaction transaction = session.getTransaction();
30         transaction.begin();
31         //6.操作CRUD
32         session.save(product);
33         transaction.commit();
34         //7.关闭资源
35         session.close();
36         sessionFactory.close();
37     }
38 }

6、测试

 1 package com.hibernate.test;
 2
 3 import com.hibernate.dao.IProductDao;
 4 import com.hibernate.dao.impl.ProductDaoImpl;
 5 import com.hibernate.pojo.Product;
 6 import org.junit.Test;
 7
 8 /**
 9  * @author zt1994 2018/3/6 14:47
10  */
11 public class TestProductDao {
12     private IProductDao productDao = new ProductDaoImpl();
13
14     /**
15      * 测试添加商品
16      */
17     @Test
18     public void testAddProduct(){
19         Product product = new Product();
20         product.setName("test");
21         product.setPrice(2222);
22         productDao.addProduct(product);
23     }
24 }

转载于:https://www.cnblogs.com/zt19994/p/8515134.html

Hibernate 学习(一)相关推荐

  1. Hibernate学习总结【比较与Mybatis框架之间的区别】

    经过一周的Hibernate学习,我理解了作为以JPA为核心的持久层查询标准.JPA所涉及的思想为ORM(object relational mapping),它解释了为什么我们的实体关系要和数据库一 ...

  2. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  3. hibernate学习和各种关系总结

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址 http://yifanxiang.blog.163.com/blog/static/500008342010527 ...

  4. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  5. hibernate 学习之——hql 语句

    hibernate 学习之--hql 语句 hibernatre hql 语句:是对于hibernate的orm模式的一种类似于JDBC语句的面对对象的操作语句 特点 : 1.对于类名属性名区分大小写 ...

  6. hibernate学习笔记(总结)

    hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...

  7. Hibernate 学习心得1: 多对多关系中,中间表无法插入数据。

    Hibernate 学习心得之一 多对多关系中,中间表无法插入数据. 最近学习 spring4+hibernate4,学习中遇到了很多坑. 在这里我来说说我遇到的坑,这里就不介绍如何spring如何集 ...

  8. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  9. Hibernate学习笔记Session.evict(user)方法

    @[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...

  10. Hibernate学习(九)———— 二级缓存和事务级别详讲

    序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...

最新文章

  1. Django Web开发学习笔记(4)
  2. python HTTP后台响应服务
  3. div 居中,浏览器兼容性
  4. kafka模拟生产-消费者以及自定义分区
  5. c++ mysql 配置_C++--mysql相关配置
  6. C语言试题五十五之m个人的成绩存放在score数组中,请编写函数function,它的功能是:将高于平均分的人数作为函数值返回,将高于平均分的分数放在high所指定的数组中。
  7. 数据可视化--pyecharts绘图
  8. 解决MFC 窗口创建时 争夺焦点的问题
  9. [转载]使用Java将Word转为Html或txt!
  10. Acute Angle Cloud与Achain达成战略合作,共促区块链系统发展
  11. JAVA小项目-搜搜移动大厅
  12. Sparrow 开发板化身电脑音量调节器
  13. 我知道你在淘宝买过很多东西,但是你买过一所大学吗
  14. 电脑开机启动选择系统
  15. Shell脚本中dirname命令的使用
  16. 关于直接下载第三方IPA应用分发平台之蒲公英的研究
  17. 011 索引的优点,特大型的表考虑分区技术
  18. 采药问题 c语言程序,采药-题解(C语言代码)
  19. java 利用httpclient绕过百度验证登录爬取百度指数
  20. 实现Android跨进程组件通信能有多简单?

热门文章

  1. 【POJ - 1087】A Plug for UNIX(建图,网络流最大流)
  2. 【蓝桥杯官网试题 - 历届试题】格子刷油漆(dp)
  3. 【CodeForces - 155C】Hometask (字符串,思维,贪心,熟悉句式)(总结)
  4. 浙江经济职业技术学院计算机排名,浙江经济职业技术学院排名第几
  5. 如何释放mysql连接资源_CI框架出现mysql数据库连接资源无法释放的解决方法
  6. layui 数据表格 日期格式化
  7. linux依赖包在哪个目录,命令-Linux cmd在jar中搜索类文件,而与jar路径无关
  8. Tomcat服务器集群与负载均衡实现
  9. java合并list_java合并list方法代码实例
  10. 剑指offer之矩阵中的路径