很多人说Hbiernate已经没人用了,市面上有太多可供选择的开源工具.诚然市面上有很多新技术,但是作为初学者,还是要踏踏实实从基础做起,而且Hbiernate有自己的应用场景.

上篇博文 我们介绍了Hibernate的基本概念、Hibernate的核心以及Hibernate的执行原理,可以很好帮助我们从宏观上了解Hibernate,

再看这篇博客之前,请先回顾上篇博文内容。这篇博文,是Hibernate的一个入门,一起来学习.

一、开发包和版本介绍

这里使用的环境为: win10+jdk1.7+Tomcat7+mysql5.5

       下载网址:http://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/

页面显示如下图:

需要说明的是:

这里使用的环境如下:

win10+ jdk1.7 +Tomcat5.0 + MySQL5.1

开发包目录,如下图所示:



从图可以看出,hibernate5.0.7的解压s目录中包含一系列的子目录,这些子目录分别用于存放不同功能的文件,接下来针对这些子目录进行简单介绍,具体如下:

documentation文件夹:存放Hibernate的相关文档,包括参考文档的API文档。

lib文件夹:存放Hibernate编译和运行所依赖的JAR包。其中required子目录下包含了运行Hibernate5项目必须的JAR包。

project文件夹:存放Hibernate各种相关的源代码。

三、所需jar包

hibernate5.jar // Hibernate的核心包

dom4j-1.2.16..jar   //dom4j读取xml文件包

mysql-connector-Java-5.1.7-bin.jar // MySQL的jdbc驱动包

Hibernate的作用:让我们以面向对象的方式或思维来考虑怎么向关系型数据库存取数据。它需要与相应的数据库打交道,所以需要相应的jdbc驱动。我们的database用的是MySQL,所以需要引入MySQL的jdbc驱动。

log4j1.2.16.jar   //记录日志框架

由于log4j的记录日志比jdk自带的记录日志功能更加美观,简单,易配置日志级别,便于调试,我们选择使用log4j。

第二步:创建数据库和实体类

1.    创建数据库及客户表

    mysql> create database hibernate;3.     Query OK, 1 row affected (0.00 sec)4.     mysql> use hibernate5.     Database changed6.     mysql> CREATE TABLE `cst_customer` (7.         ->   `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',8.         ->   `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',9.         ->   `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',10.      ->   `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',11.      ->   `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',12.      ->   `cust_address` varchar(128) DEFAULT NULL COMMENT '客户联系地址',13.      ->   `cust_phone` varchar(64) DEFAULT NULL COMMENT '客户联系电话',14.      ->   PRIMARY KEY (`cust_id`)15.      -> ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;16.    Query OK, 0 rows affected (0.39 sec)

2. 根据数据库创建持久化类

新建一个项目,在src目录下创建cn.xinsz08.domian包

3. 在domain包内创建实体类Customer类,对应数据库表cus_customer

第三步:写代码

(1)编写客户实体类Customer,并创建get/set方法

package cn.xinsz08.domain;import java.io.Serializable;publicclass Customer implements Serializable {/*** 客户的实体类*/private Long custId;private String custName;private String custSource;private String custIndustry;private String custLevel;private String custAddress;private String custPhone;public Long getCustId() {returncustId;}publicvoid setCustId(Long custId) {this.custId = custId;}public String getCustName() {returncustName;}publicvoid setCustName(String custName) {this.custName = custName;}public String getCustSource() {returncustSource;}publicvoid setCustSource(String custSource) {this.custSource = custSource;}public String getCustIndustry() {returncustIndustry;}publicvoid setCustIndustry(String custIndustry) {this.custIndustry = custIndustry;}public String getCustLevel() {returncustLevel;}publicvoid setCustLevel(String custLevel) {this.custLevel = custLevel;}public String getCustAddress() {returncustAddress;}publicvoid setCustAddress(String custAddress) {this.custAddress = custAddress;}public String getCustPhone() {returncustPhone;}publicvoid setCustPhone(String custPhone) {this.custPhone = custPhone;}@Overridepublic String toString() {return"Customer [custId=" + custId + ", custName=" + custName + ", custSource=" + custSource+ ", custIndustry=" + custIndustry + ", custLevel=" + custLevel + ", custAddress=" + custAddress+ ", custPhone=" + custPhone + "]";}}

实体类Customer 目前还不具备持久化操作的能力,而Hibernate需要知道实体类Customer映射到数据库Hibernate中的哪个表,以及类中的属性对应表中那个字段,这些需要在下面的映射文件中配置.

(2)在实体类Custmoer包中创建Customer.hbm.xml文件,完成实体类映射

导入dtd约束步骤如下:

Customer.hbm.xml配置文件内容

<?xml version="1.0" encoding="UTF-8"?><!-- 导入约束:dtd约束 位置:在Hibernate的核心jar包中名称为hibernate-mapping-3.0.dtd 明确该文件中的内容:实体类和表的对应关系 实体类中属性和表的字段的对应关系 --><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.xinsz08.domain"><!-- package属性,用于设定 包的名称,
接下来该配置文件凡是用到此包名的都可以省略 --><!-- class 标签 作用:建立实体类和表的对应关系 属性: name:指定实体类的名称 table:
指定数据表的名称 --><class name="Customer" table="cut_customer"><!-- id标签 作用:用于映射主键 属性: name:指定的是属性名称,也就是get/set方法后面的部分,
并且首字母要转为小写 column:指定的是数据库字段名称 --><id name="custId" column="cust_id"><!-- generator标签: 作用:配置主键的生产策略 属性: class :指定生成方式的取值 取值1:native
,使用本地数据库的自动增长能力 --><generator class="native"></generator></id><!-- property标签: 作用:映射其他的字段 属性:name:指定属性的名称,和ID标签的name属性含义一样 column:指定数据库表的字段名称 --><property name="custName"  column="cust_name"></property><property name="custLevel" column="cust_level"></property><property name="custSource" column="cust_source"></property><property name="custIndustry" column="cust_industry"></property><property name="custAddress" column="cust_address"></property><property name="custPhone" column="cust_phone"></property></class></hibernate-mapping>

(3) 编写主配置文件,把Customer.bhm.xml文件加入到hibernate.cfgxml文件中

在src下创建主配置文件: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><!-- 配置SessionFactory注:sessionFactory是一个工厂,用于生产Session对象的创建SessionFactory 由三部分组成:1.连接数据库的基本信息2.hibernate的基本配置3.映射文件的位置--><session-factory><!-- 1.连接数据库的基本信息 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property><property name="hibernate.connection.usrname">root</property><property name="hibernate.connection.password">root</property><!-- 2.hibernate的基本配置 --><!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,
针对每种数据库都指定了一个方言dialect --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 是否显示SQL语句 --><property name="hibernate.show_sql">true</property><!-- 是否格式化SQL语句 --><property name="hibernate.format_sql">true</property><!-- 是否让hibernate根据表结构的变化来生成DDL语句*none:不用hibernate自动生成表*create:每次都会创建一个新表*create-drop:每次都会创建一个新的表,执行程序结束后删除这个表*update:如果数据库中有表,使用原来的表,如果没有标,创建一个新表--><!-- 设置hibernate的连接池提供商C3P0 --><property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!-- 把session绑定到当前线程上 --><property name="hibernate.current_session_context_class">thread</property><property name="hibernate.hbm2ddl.auto">update</property><!-- 映射文件位置 --><mapping resource="cn/xinsz08/domain/Customer.hbm.xml"/></session-factory></hibernate-configuration>

(4)实现保存操作

在项目中新建一个名称为cn.xinsz08.test的包,然后在包中建立一个HibernateTest1.java 的文件,进行测试

package cn.xinsz08.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import cn.xinsz08.domain.Customer;/*** 测试:把一个客户保存到数据库中* @author Administrator**/publicclass HibernateTest1 {@Testpublicvoid test1(){Customer ct =new Customer();ct.setCustName("xinsz08");ct.setCustIndustry("程序猿");ct.setCustSource("java");ct.setCustLevel("p7");ct.setCustAddress("xinsz08@yeah.net");ct.setCustPhone("158****08**");//1.加载主配置文件Configuration cfg=new Configuration();cfg.configure(); //读取操作,加载配置文件//2构建sessionFactorySessionFactory factory =cfg.buildSessionFactory();//3.获取SessionSession session=factory.openSession();//4.开启事务Transaction tx =session.beginTransaction();//5.执行操作session.save(ct);//6.提交事务tx.commit();//7.释放资源session.close();factory.close();    }}

在执行之前,数据库是空的.

mysql> show tables;

Empty set (0.00 sec)

执行后控制台输出:(hibernate执行SQL语句)

数据库显示结果:

mysql> set names gbk;

Query OK, 0 rows affected (0.00 sec)

mysql> show tables;

+-----------------+

| Tables_in_hibernate|

+-----------------+

| cst_customer    |

+-----------------+

1 row in set (0.00 sec)

mysql> select * from cst_customer \G

*************************** 1. row ***************************

cust_id: 1

cust_name: xinsz08

cust_source: java

cust_industry: 程序猿

cust_level: p7

cust_address: xinsz08@yeah.net

cust_phone: 158****08**

1 rows in set (0.00 sec)

可以看到,我们没有写任何SQL语句,但是hibernate依然保存数据成功了.而且一开始是只有数据库hibernate,没有表的,执行完后,自动创建表,因为我们在配置文件里使用了update.

(四)总结

通过上面的代码我们可以看出,作为开发人员只需要写好相应的实体类,然后通过配置就可以实现了表的建立以及向
表中实现数据的增删改查,这里只介绍了插入,后面会介绍增删改.
在代码中有许多Hibernate的核心对象,例如Configuration、SessionFactory、Session等等。这些内容将在以后
介绍。

Hibernate快速入门+简单示例相关推荐

  1. (转)Hibernate快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/64209343 Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有 ...

  2. Alibaba Arthas快速入门 简单易懂

    简介 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参.异常,监测方法执 ...

  3. Hibernate(1)Hibernate简介和简单示例,了解Hibernate事务回滚用法

    1 Hibernate简介 Hibernate是一个orm(object relation mapping 对象关系映射)框架,处于项目的持久层,也叫持久层框架(持久层框架还有ojb等). Hiber ...

  4. saltstack php,Saltstack快速入门简单汇总

    [root@master~]# salt \* test.ping minion-1: True minion-2: True minion-3: True minion-4: True True代表 ...

  5. 【机器学习】快速入门简单线性回归 (SLR)

    简单线性回归图(青色散点为实际值,红线为预测值) statsmodels.api.statsmodels.formula.api 和 scikit-learn 的 Python 中的 SLR 今天云朵 ...

  6. RabbitMQ快速入门--简单队列模型

    入门案例 简单队列模式的模型图: 官方的HelloWorld是基于最基础的消息队列模型来实现的,只包括三个角色: publisher:消息发布者,将消息发送到队列queue queue:消息队列,负责 ...

  7. 数据校验JSR303快速入门(简单使用、分组效验、自定义注解效验)

    前言: 在实际开发中,除了前端需要在表单中验证用户的输入.后台服务也需要对用户传入的参数进行效验,避免他人在得知请求格式后,直接通过类似Postman这样的测试工具进行非常数据请求. JSR303是什 ...

  8. Hibernate 快速入门

    原视频内容以及资料来自 b 站:https://www.bilibili.com/medialist/play/ml1025729445/p1 hibernate 在 idea 中文件快速生成博客:h ...

  9. html 甘特图_甘特图怎么画?甘特图基础教程,小白快速入门简单易懂

    甘特图是什么?可能你是第一次听到,甘特图是通过活动顺序和时间间隔表示某一特定项目其顺序与时间的关系.不同于时间表,或日程规划表,甘特图可以使使用者更直观的知道在某一时间的工作内容和进度. 甘特图常见用 ...

最新文章

  1. 当人工智能遇到神经科学,二者联手势不可挡!
  2. eclipse忘记了程序保存在哪里怎么办
  3. EOJ Monthly 2019.2 (based on February Selection) D.进制转换
  4. java国家电网面试试题_国家电网笔试面试相关
  5. iPhone和SSH
  6. 如何在苹果 Mac 上的“快速查看”中查看和编辑文件?
  7. 云服务器安全组设置后,依然无法访问端口(已解决)
  8. 彻底删除卸载2345安全卫士及2345浏览器
  9. 二极管(三):电源防反接
  10. 2020年金融科技创新项目总结
  11. 关于xss盲打关于xss盲打
  12. ARM Linux下的phys_to_virt/virt_to_phys函数
  13. 初探----python封装通俗易懂的数据库增、删、改、查方法
  14. 解密街头立体画的创作过程
  15. 激活synopsys命令
  16. 2022-04-05 学习记录--React-React UI组件库-ant-design(蚂蚁金服)—— 按需引入样式 + 自定义主题
  17. Apriori算法与python实现
  18. BPM、BPMN介绍
  19. 2021 中国科学技术大学 大数据学院 推免夏令营 经历
  20. 基于PIE-Engine 监测黄海海域浒苔绿潮发展过程

热门文章

  1. Unity 之 实现老虎机滚动抽奖效果
  2. 都说SSM框架是面试的基础,这76道SSM面试题,坑也太多了!
  3. 【TypeScript】TS进阶-函数重载(七)
  4. 百变大侦探 v3.0.4
  5. 爬取央视网节目单栏目信息!
  6. 二进制整数转换为十进制整数[包括负数的转换]
  7. linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色
  8. 分析以太网帧结构_车辆网络 | 汽车网络中融合以太网的有效解决方案RELYTSNREC...
  9. python分层聚类_使用Python分层聚类进行机器学习
  10. KVM 虚拟化技术 | 虚拟化平台部署