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的东西, ...
随机推荐
- shell下添加计划性任务
*/1 * * * * /bin/sh /tmp/hello.sh ###每1分钟执行以下/tmp下的hello.sh脚本 service crond restart 重启任务计划 * 12 * ...
- C语言中的关键字
1.C语言中的关键字都有实际的意义. 2.C语言中的23个关键字如下: char:声明字符型变量. short:声明短整型变量. int:声明整型变量. long:声明长整型变量. float:声明浮 ...
- webservice简介以及简单使用
本文主要是简单的介绍webservice是什么.webservice的由来.webservice的作用,以及后面会介绍webservice的使用. webservice是什么? 目前,Web serv ...
- 当数据0跟if判断冲突的时候
我是很无奈的,以后都要2,3,4,5这样去标志状态: 分配状态:<select name="is_send" > <option selected="s ...
- 批量删除的js代码
<script type="text/javascript"> function seltAll(){ var chckBoxSign = document.getEl ...
- scala学习资料
强烈推荐一个s在线学习scala的网站: http://zh.scala-tour.com/#/overview
- Python基础 第二天
1.http://www.cnblogs.com/beer/p/5672678.html requests和beautifulsoup
- spark 集合交集差集运算
intersect except是spark提供的集合差集运算, 但是要求参与运算的两个dataframe,有相同的data Schema. 如果我想从 集合1(attribute1, attribu ...
- WPF DragDrop事件元素跟随
前一段时间项目里面要实现一个鼠标拖动一个元素到另外一个元素上面并且赋值的功能,由于要在surface上运行,拖动的时候手指会挡住系统默认的拖动图标,导致用户意识不到自己是不是在拖动着东西,所以要解决这 ...
- Oracle 错误代码
ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...