01.Hibernate入门
前言:本文用一个简单的Hibernate应用程序例子来引领初学者入门,让初学者对Hibernate的使用有一个大致的认识。本文例子使用了MySQL数据库、Maven管理工具、Eclipse开发工具,创建的项目是Maven项目但是本质上只是用了Java SE的东西。
1.在Maven项目中引入Hibernate库
<!-- 依赖项定义 -->
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.8.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.34</version>
</dependency>
</dependencies>
2.搭建数据库环境(MySQL)
CREATE TABLE tb_teacher
(
id bigint NOT NULL auto_increment COMMENT 'ID',
no varchar(10) NOT NULL COMMENT '教师编号',
name varchar(50) NOT NULL COMMENT '教师姓名',
sex char(1) NOT NULL COMMENT '教师性别',
job_title varchar(50) NOT NULL COMMENT '职称',
PRIMARY KEY (id)
) COMMENT = '教师信息表';
3.设置Hibernate配置文件(hibernate.cfg.xml)
<!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>
<!-- 设置MySQL的数据库路径、用户名、密码 -->
<property name="hibernate.connection.url">jdbc:mysql://192.168.10.201:3306/Study</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">lizhiwei</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Hibernate配置 -->
<property name="connection.pool_size">1</property>
<property name="show_sql">true</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.format_sql">true</property>
<!-- 设置实体类到数据库的映射文件 -->
<mapping resource="model/Teacher.hbm.xml"/>
</session-factory>
</hibernate-configuration>
- hibernate.dialect:设置数据库方言,我使用的MySQL数据库就用MySQL数据库的方言。
- connection.pool_size:设置数据库连接池大小。
- current_session_context_class:与SessionFactory.getCurrentSession()相关,如果得到一个Session是调用这个方法(并非openSession())那么会使用这个属性。
- show_sql:配置是否显示Hibernate操作数据库的SQL,调试时非常有用。
- hibernate.format_sql:与show_sql配合使用,用于格式化打印的SQL。
- hibernate.cache.use_second_level_cache:是否使用Hibernate的二级缓存,关于二级缓存的使用后面的章节会讲到。
- <mapping resource="model/Teacher.hbm.xml"/>:设置实体类与数据库表的映射文件,关于这个映射文件的作用和内容会在下面讲到。
4.创建实体类与其映射文件(Teacher.hbm.xml)
package model;
/**
* 教师信息表
* */
public class Teacher
{
/** ID */
private Long id;
/** 教师编号 */
private String no;
/** 教师姓名 */
private String name;
/** 教师性别 */
private String sex;
/** 职称 */
private String job_title;
//省略setter、getter、toString...
}
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="model">
<class name="Teacher" table="tb_teacher">
<id name="id" column="id">
<generator class="native"></generator>
</id>
<property name="no" column="no"/>
<property name="name" column="name"/>
<property name="sex" column="sex"/>
<property name="job_title" column="job_title"/>
</class>
</hibernate-mapping>
- package="model":用于设置实体类的命名空间。
- name="Teacher" table="tb_teacher":设置实体类名与数据库表名的映射。
- <id name="id" column="id">:设置实体类的属性与数据库的主键的映射。
- <generator class="native"></generator>:设置主键的生成方式,如:自定义、序列、自增长等。native表示根据底层数据库对自动生成标识的能力自动选择。
- <property name="no" column="no"/>:设置实体类属性与数据库字段的映射关系。
5.编写测试代码(Holle World)
package test;
import model.Teacher;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
@SuppressWarnings("deprecation")
public class Test01
{
public static void main(String[] args)
{
Configuration cfg = new Configuration();
cfg.configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sf = cfg.buildSessionFactory(sr);
System.out.println("连接数据库");
Session session = sf.openSession();
Teacher teacher =(Teacher) session.get(Teacher.class, new Long(1));
System.out.println(teacher);
session.close();
System.out.println("关闭数据库");
System.exit(0);
}
}
连接数据库
Hibernate:
select
teacher0_.id as id1_0_0_,
teacher0_.no as no2_0_0_,
teacher0_.name as name3_0_0_,
teacher0_.sex as sex4_0_0_,
teacher0_.job_title as job_titl5_0_0_
from
tb_teacher teacher0_
where
teacher0_.id=?
tb_teacher [id=1, no=000001, name=教师1, sex=女, job_title=初级教师]
关闭数据库
6.Hibernate API接口简介
- Configuration接口:配置Hibernate,启动Hibernate,创建SessionFactory对象。
- SessionFactory接口:初始化Hibernate,充当数据源的代理,创建Session对象。
- Session接口:负责保存、更新、删除、加载和查询对象。
- Transaction接口:事务管理接口。
- Query和Criteria接口:用于执行数据库查询。
- Callback接口:Hibernate事件回调接口。
- 它是线程安全的,这意味着它的同一个实例可以被应用的各个线程共享。
- 它是重量级的,这意味着不能随意创建或销毁它的实例。
- 之所以说SessionFactory是重量级的,是因为它需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数据等。用户还可以为SessionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的第二级缓存,该缓存用来存放被工作单元读过的数据,将来其它工作单元可能会重用这些数据,因此这个缓存中的数据能够被所有工作单元共享,一个工作单元通常对应一个数据库事务。SessionFactory接口负责初始化Hibernate。
- 不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。
- Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建和销毁Session对象,例如为每个客户请求分配单独的 Session实例,或者为每个工作单元分配单独的Session实例。
- Session有一个缓存,被称为Hibernate的第一级缓存,它存放被当前工作单元加载的对象。每个Session实例都有自己的缓存,这个Session实例的缓存只能被当前工作单元访问。Session接口负责执行被持久化对象的CRUD操作 (CRUD的任务是完成与数据库的交流,添加、更新、删除、加载和查询对象,包含了很多常见的SQL语句)。
01.Hibernate入门的更多相关文章
- 01.Hibernate快速入门
第一步:下载Hibernate5的运行环境 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 第二步:在数据库创建表 Cr ...
- 三大框架之hibernate入门
hibernate入门 1.orm hibernate是一个经典的开源的orm[数据访问中间件]框架 ORM( Object Relation Mapping)对象关 ...
- Hibernate入门案例及增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门案例 增删改
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...
- Hibernate入门6.Hibernate检索方式
Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ...
- Hibernate入门5持久化对象关系和批量处理技术
Hibernate入门5持久化对象关系和批量处理技术 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hiberna ...
- Hibernate入门4.核心技能
Hibernate入门4.核心技能 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv 前言: 前面学习了Hibernate3的基本知识, ...
- Hibernate入门3.配置映射文件深入
Hibernate入门3.配置映射文件深入 2013.11.27 前言: 之前的两节是在Java项目中如何使用hibernate,并且通过一个简单地项目实践,期间有很多的错误,一般都是因为配置包的问题 ...
- 简单的Hibernate入门简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...
随机推荐
- The Rotation Game (POJ 2286) 题解
[问题描述] (由于是英文的,看不懂,这里就把大意给大家说一下吧……都是中国人,相信大家也不愿意看英文……) 如图,一个井字形的棋盘,中间有着1-3任意的数,有ABCDEFGH八个操作,每个操作意味着 ...
- Git - Tutorial [Lars Vogel]
From: http://www.vogella.com/tutorials/Git/article.html Git - Tutorial Lars Vogel Version 5.6 Copyri ...
- ListView用法及加载数据时的闪烁问题和加载数据过慢问题
ListView介绍及添加数据时的闪烁问题 1. ListView类 1.1 ListView常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示 ...
- 菜鸟学习Struts——总结
一.原理 客户端请求到ActionSeverlet,ActionSeverlet负责截URL进行分发分发到每一个Action上,Action负责和Model打交道然后把相关信息返回到ActionSev ...
- linux中fork()函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...
- 九度oj 1349 数字在排序数组中出现的次数
原题链接:http://ac.jobdu.com/problem.php?pid=1349 二分.. #include<algorithm> #include<iostream> ...
- 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案
微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...
- sychronized面试问题浅析
先说下面试吧,整体来说基础准备好点,简历别太假,然后回答起来实事求是,表现自然的点基本上都没问题吧(针对初级职位,记得有个hr说过对于新人基础扎实和为人真诚是最关键的),两天时间跑起来挺累,反而觉得面 ...
- Knockout应用开发指南 第一章:入门
2011-11-21 14:20 by 汤姆大叔, 20165 阅读, 17 评论, 收藏, 编辑 1 Knockout简介 (Introduction) Knockout是一个轻量级的UI类 ...
- C#中的委托与事件
1,委托? 通俗来讲,就是一个能存放符合某种格式(签名)的方法的指针 的容器 (可以将方法作为一个参数来传递到另一个方法内执行) 定义委托:delegate string DelegateSayHi ...