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:selectteacher0_.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_fromtb_teacher teacher0_whereteacher0_.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的东西, ...
随机推荐
- C# DataGridViewComboBoxColumn 数据绑定
dataGridView1.Columns.Clear(); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = ...
- PHP变量名区分大小写,函数名不区分大小写
PHP变量名区分大小写,函数名不区分大小写,经常被新手忽视的小细节,测试如下. PHP变量名区分大小写测试: <?php $aaa = "phpddt.com"; $AAA ...
- php获取客户端浏览器以及操作系统信息的方法
发布:sunday01 来源:net 阅读: 2 [大 中 小] 在较为智能的程序中,php可以获取客户端浏览器及操作系统信息,然后根据浏览器及系统类型,加载不同的页面,以提供更加个性化的 ...
- htaccess rewrites重写规则实例
1..htaccess rewrite实例开始部分 Options +FollowSymLinksRewriteEngine OnRewriteBase / 2.把不带www的域名地址重定向到带www ...
- 百度 迷你版 UMeditor富文本编辑器 使用方法
第一步:下载编辑器 到官网下载 umeditor 最新版源码版本,下载之后打开 _examples/index.html 就可以看到演示例子.[下载页面] 第二步:部署编辑器到页面 解压下载的包,放到 ...
- java android 中的Toast
package com.example.my1; import android.os.Bundle;import android.app.Activity;import android.content ...
- 第五章 管理程序流(In .net4.5) 之 异常处理
1. 概述 本章包括.net4.5中异常处理相关的部分. 2. 主要内容 2.1 处理异常 ① try.cahtch.finally 机制,无需多言. ② 使用 Environment.FailFas ...
- 关于垃圾回收(GC和Marshal)有感
最近做一个挂机软件.要求是挂个三四天没事,不会报错.开始的时候都是顺利的,所有步骤都是可以ok.但是当测试运行的是就出现问题了,内存居然会在一个Task跑完之后暴涨几M的内存.开了一台测试机测试了一天 ...
- 包装类(Wrapper Class)
1)包装类.针对于原生数据类型的包装.所有的包装类(8个)对位于java.lang包下.java中的8个包装类分别是:Byte,Short,Integer,Long,Float.Double,Char ...
- 浅谈iOS网络编程之一入门
计算机网络,基本上可以抽象是端的通信.实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了.先来了解一些基本概念 了解网络中传输的都是二进制数据流. 2.了 ...