Hibernate学习---基本介绍+作用+配置
从今天开始重新学习(以前学的太匆忙)Hibernate,这篇文章主要就一下几点进行讲解和说明:
- Hibernate的基本介绍
- Hibernate的作用
- Hibernate基本配置
Hibernate的基本介绍:
Hibernate最开始的作者是Gavin King,是澳大利亚人,在工作中因为不满EJB的种种不足,而自行花费两年的时间开发出最原始的Hibernate,后来被Jboss收购了Gavin King所在的公司(最主要是看上了Hibernate),后来的Jboss被红帽收购,所以现在Hibernate为红帽旗下的产品。
讲到了Hibernate怎么能不提一下什么叫做JPA(Java persistence API),是JavaEE5标准的ORM接口标准,是一种规范和接口,并不是ORM的具体实现,用于实现这一套规范的框架有很多,其中Hibernate就是一个这样的框架。
JPA,ORM,Hibernate之间的关系:
ORM是一种思想,JPA是这种思想的规范约束,Hibernate是这种思想和规范的具体实现。
Hibernate的作用:
说到了作用就自然而然的想到了Hibernate的工作大体工作模式:
这个是Hibernate的一个简单结构。
Hibernate是一款持久化框架(ORM)即Object Relationship Mapping,对JDBC进行了轻量级的封装,他能够自动根据我们的需求,能够将我们的实体类映射到数据库表中而进行存储。
这就是它的作用。
Hibernate基本配置
下面我们就来说说Hibernate的具体配置吧:
首先,我们去官网找到相应的jar包(我使用的是5.0.1)http://hibernate.org/
然后将下载好的安装包解压:
打开lib,选中required中所有jar包,optional里面c3p0所有jar包,optional的ehcache下slf4j-api-1.6.1.jar,jpa-metamodel-generator下所有jar包,jpa下所有jar包,当然还需要我们的数据库驱动jar包,根据我们使用的数据库自行选定。
选完过后的jar包大概是这样的:
将这些jar包放到我们新建的项目中(我创建的是java project,因为Hibernate是对数据库底层的操作,不需要建立web project)。
在项目中创建lib文件夹,将jar包放入,并加入到我们路径中。
接下来就是配置文件了:
我们需要配置两个配置文件:
①/TestHibernate/src/hibernate.cfg.xml
②/TestHibernate/src/entity/Student.hbm.xml
这两个文件所在的位置大家也看到了,hibernate.cfg.xml在src下,Student.hbm.xml和实体类放在同一个包下。
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>
<!--DB连接四要素 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///oa?useUnicode=true&characterEncoding=UTF8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- hibernate会根据你所指定生成sql语句,但是要指定数据库的版本 配置从core jar包里面找 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 数据源(DBCP):数据库连接池 -->
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<!-- 配置当前session上下文 保证同一个线程中获取的session是同一个-->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 自动建表 里面的值也可以是create,但是每次都会新建一个表,影响效率,update在原有的表上面添加信息 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 显示sql -->
<!-- <property name="hibernate.show_sql">true</property> -->
<!-- 格式化sql -->
<!-- <property name="hibernate.format_sql">true</property> -->
<!-- 注册映射文件 -->
<mapping resource="entity/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Student.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 作用:
实体类到表的映射
属性到字段的映射
-->
<class name="entity.Student" table="t_student">
<id name="id" column="tid">
<generator class="native"/>
</id>
<property name="name" column="t_name"/>
<property name="age" column="t_age"/>
<property name="score" column="t_score"/>
</class>
</hibernate-mapping>
者两个配置文件的dtd约束在我们我Hibernate核心jar包里面有:
具体的配置和解释配置文件里面我都有具体的介绍。
接下来需要我们再entity包下建立对应的实体类:
package entity;
/**
* @author:MindMrWang
*2017年11月15日
*:function:学生实体类
*/
public class Student {
Integer id;
String name;
int age;
double score;
public Student() {
}
public Student(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
接下来使我们的测试文件:
package Test;
/**
* @author:MindMrWang
*2017年11月16日
*:function:测试hibernate
*/
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import entity.Student;
public class Test1 {
public static void main(String[] args) {
//加载配置文件
Configuration config = new Configuration().configure();
//根据配置文件创建会话工厂
SessionFactory factory = config.buildSessionFactory();
//根据会话工厂创建会话
Session session = factory.getCurrentSession();
//创建一个事物对象
Transaction tx = session.beginTransaction();
//new 一个学生对象
Student student = new Student("张三",19,99);
//将对象持久化到数据表中
session.save(student);
//提交事务
tx.commit();
//关闭会话
session.close();
//关闭工厂
factory.close();
}
}
然后打开我们的数据库可视化工具就可以看见我们在hibernate.cfg.xml中指定的t_student表。
本篇文章就介绍到这里了,未完待续。
如有错误,欢迎指正。
Hibernate学习---基本介绍+作用+配置的更多相关文章
- hibernate学习(一)配置,导包
框架的作用 学过javaWeb基础的已经对web层 jsp servlet ,service 层 ,dao层的jdbc .DBUtils 有了很深的了解 并编写代码实现某种功能 为了提高开发 ...
- hibernate学习笔记--可选的配置属性
3.4. 可选的配置属性 有大量属性能用来控制Hibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值. 警告: 其中一些属性是"系统级(system-level)的&qu ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- Hibernate学习2--对象的三种状态以及映射关系的简单配置
上篇hibernate的博客总体简单梳理了对象持久化的一些思想以及hibernate中对象持久化化的方法,下面说说对象持久化过程的三种状态. 一.hibernate缓存的概念 1.session与缓存 ...
- hibernate学习之一 框架配置
hibernate 框架 1.hibernate框架应用在javaee三层结构中的dao层框架 2.好处就是不需要写复杂jdbc代码,不需要sql语句实现 3.是开源的轻量级框架 hibernate使 ...
- Hibernate学习11——配置Hibernate二级缓存
一.缓存的概念: 以空间换时间: 二.Hibernate缓存的分类: 前面我们讲的缓存都是session缓存:也叫一级缓存:get,load等缓存都是内置的,一级缓存: SessionFactor ...
- Hibernate 学习教程
第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个演示样例HibernateHelloWorld 7 第7 ...
- Hibernate学习大全
第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...
- Hibernate学习第一天
Hibernate框架第一天 今天任务 1. 使用Hibernate框架完成对客户的增删改查的操作 教学导航 1. 能够说出Hibernate的执行流程 2. 能够独立使用Hibernate框架完成增 ...
随机推荐
- ArrayList迭代过程删除问题
一:首先看下几个ArrayList循环过程删除元素的方法(一下内容均基于jdk7): package list; import java.util.ArrayList; import java.uti ...
- Makefile Android.mk 引发的思索
在我们编写 Android 平台 cocos2d-x 游戏的时候,我们除了编写 Classes 之内的源代码文件之外,我们还需要维护其编译文件 Android.mk,如我们在 Classes 添加新的 ...
- PendingIntent、Notification常用方法
PendingIntent PendingIntent它的直译是:待处理意图,这样翻译,大家就猜出它的作用是什么了,用于处理一些定义但是不立即使用的意图,最常见的就是用户点击通知,然后跳转指定的页面: ...
- gitlab环境搭建
企业级的git管理程序.最好用的之一吧.估计其它的也得叫之二. 怎么搭建呢? 2G以上配置的机器才可以搞. . 如下 安装需要注意的是.如果开了80端口,8080的需要修改配置文件 下面会提到 1. ...
- php提供的对称加密算法
KEY 是之前定义的常量 Mcrypt::encrypt(); Mcrypt::decrypt(); defined('ROOT') or exit('Access Denied'); class M ...
- 组件嵌套时报:Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.
在组件嵌套的过程中,报了一个错误: 这里报错的原因是:vue的组件(模板)只能有一个根节点,即.vue文件中的<template>标签下只能有一个子元素. 因此,建议大家在写.vue组件的 ...
- 用tortoiseGit管理GitHub项目代码(完整教程)
一.为什么要写这篇博客呢,因为在一开始用tortoiseGit来管理项目的时候,在百度上找了很多教程,但是感觉说的都不是很全,有些东西以及操作没写清楚,所以想写一片比较完整用tortoiseGit管理 ...
- calc() ---一个会计算的css属性
最近这个月一直在赶项目开发,遇到的问题和学到的前端知识没有更新到博客园,现在闲了下来,就整理一下前端知识. 在项目开发中,在样式这方面花费的时间较多,因为针对于数字的变化特别多,本人不爱记数字,在看设 ...
- Spring任务调度之SpringTask基于XML和基于注解的使用示例
使用Spring的环境要求是:JDK1.8以上.Maven3.0以上. Maven依赖 SpringTask集成在SpringContext中,所以只需要SpringContext即可. 可以使用ma ...
- iOS开发之线程间的MachPort通信与子线程中的Notification转发
如题,今天的博客我们就来记录一下iOS开发中使用MachPort来实现线程间的通信,然后使用该知识点来转发子线程中所发出的Notification.简单的说,MachPort的工作方式其实是将NSMa ...