一、Hibernate简介

1、Hibernate是一款ORM框架,Object Relation Mapping 对象关系映射。

2、可以将DB映射成Object,这样程序只要对Object对象进行操作就能完成对数据库的操作。

3、主流的ORM框架有Hibernate,iBatis,JPA......


二、Hibernate框架体系结构

1、主配置文件:用于描述数据库连接信息。

     hibernate.cfg.xml或者hibernate.properties

2、映射描述文件:用于描述映射类及属性与DB表和字段之间的对应关系。

     User.hbm.xml

3、映射类文件:User.java

4、主要API

(1)Cofigration:主要用于加载主配置文件,获取数据库连接。

(2)SessionFactory:用于创建Session对象,封装了映射信息以及预定义的SQL

(3)Session:用于对象操作,完成增删改查,删除,修改,查询操作。

(4)Transaction:用于事务的处理。进行增加、删除、修改时需要注意,因为Hibernate中自动提交功能是关闭的。

(5)Query:用于执行HQL查询语句。HQL属于面向对象的查询语句,语句中没有表名和字段名。

    

三、案例:

案例一:Hibernate HelloWord(1)

1、项目结构:

2、新建项目

3、导入jar包

4、新建配置文件hibernate.cfg.xml

   放在src目录下,默认为hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1. 数据库连接信息 -->
<property name="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 2. Hibernate配置信息 -->
<!-- dialect是方言,用亍配置生成针对哪个数据库的SQL语句 -->
<property name="dialect">
<!--Hibernate提供的方言类,用亍封装某种特定数据库的方言 -->
org.hibernate.dialect.MySQLDialect
</property>
<!--将执行sql打印到控制台,一般用亍sql调优 -->
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>

5、新建映射文件:用于指明POJO类和表之间的映射关系,每个类对应一个映射文件

(1)执行db.sql脚本

SQL> DROP TABLE IF EXISTS t_user;
SQL> CREATE TABLE t_user (
t_id int(11) NOT NULL AUTO_INCREMENT,
t_login_name varchar(50) DEFAULT NULL,
t_password varchar(50) DEFAULT NULL,
t_name varchar(100) DEFAULT NULL,
PRIMARY KEY (t_id)


(2)新建POJO类User.java

public class User {
private Integer id;
private String loginName;
private String password;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getLoginName() {
return loginName;
} public void setLoginName(String loginName) {
this.loginName = loginName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}

(3)新建映射文件 User.hbm.xml

映射文件默认与POJO类放在一起;命名规则为类名.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.xsyu.tts.po.User" table="t_user">
<id name="id" type="java.lang.Integer" column="t_id">
<!-- generator用来指明主键的生成方式 -->
<generator class="identity"></generator>
</id>
<property name="loginName" type="java.lang.String" column="t_login_name"></property>
<property name="password" type="string" column="t_password"></property>
<property name="name" type="java.lang.String" column="t_name"></property>
</class>
</hibernate-mapping>

主键一般是自动生成的。我们一般不使用业务数据作为主键,因为业务逻辑的改变有可能会改变主键。

如下图所示,生成主键方式有很多种。


其中,sequence是使用序列生成主键(Oracle数据库经常使用)Mysql数据库一般使用identity,自动生成主键(注意:需要在建表时指定主键生成为auto_increment)

(4)在配置文件里关联映射文件

<!-- 在配置文件中关联映射文件 -->
<mapping resource="com/xsyu/tts/po/User.hbm.xml" />

6、测试

(1)新建TestHibernate向数据库插入一条数据

public class TestHibernate {
/**
* 把一个 User 对象存入数据库
*/
@Test
public void tst1() {
// 1. 创建一个 User 对象
User user = new User();
user.setLoginName("whatisjava");
user.setName("goodman");
user.setPassword("12345");
// 2. 调用 Hibernate 的 API,用亍装载 Hibernate 配置文件
Configuration conf = new Configuration();
/*
* 3. 在类路径中装载 默认的 配置文件 hibernate.cfg.xml 如果配置文件关联了映射文件,同时也装载了映射信息
*/
conf.configure();
// 3.1 如果装载指定的配置文件
// conf.configure(new File("abc.xml"));
// 4.创建 SessionFactory
SessionFactory factory = conf.buildSessionFactory();
// 5.创建 Session
// Hibernate 提供的访问接口
Session session = factory.openSession();
// 6. 获得事务
Transaction tx = session.getTransaction();
// 6.1 开启事务
tx.begin();
// 6.2 插入数据
session.save(user);
// 6.3 提交事务
tx.commit();
// 7. 关闭 session
session.close();
}
}

(2)运行JUnit单元测试





Hibernate——(1)Hibernate入门的更多相关文章

  1. Hibernate框架之入门

    1.Hibernate框架简述 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...

  2. Hibernate入门1. Hibernate基础知识入门

    Hibernate入门1. Hibernate基础知识入门 20131127 前言: 之前学习过Spring框架的知识,但是不要以为自己就可以说掌握了Spring框架了.这样一个庞大的Spring架构 ...

  3. Hibernate框架之入门案例

    今天终于开始学习了三大框架的其中一个框架,Hibernate框架,在这里不去讲Hibernate框架的一些基础概念了,直接切入代码,带大家了解一下Hibernate能干什么, Hibernate的人们 ...

  4. hibernate基础简单入门1---helloword

    1:目录结果 2:实体类(student.java) package com.www.entity; public class Student { private int id; private St ...

  5. 【hibernate】hibernate和mybatis的比较

    理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉 ...

  6. 问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not found解决方法

    问题Initial SessionFactory creation failed.org.hibernate.HibernateException: /hibernate.cfg.xml not fo ...

  7. Hibernate笔记——Hibernate介绍和初次环境配置

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...

  8. org.hibernate.HibernateException: /hibernate.cfg.xml not found等三个问题

    初次配置hibernate在myeclipse上: 出现三个问题,怎么都不好使,比对代码,没有问题,查看路径还是没有问题: 1.org.hibernate.HibernateException: /h ...

  9. Hibernate之Hibernate环境搭建

    Hibernate之Hibernate环境搭建 一.Hibernate环境搭建的步骤 1.添加Hibernate && SQLServer 的Jar antlr-2.7.7.jar d ...

  10. 【hibernate】Hibernate中save, saveOrUpdate, persist, merge, update 区别

    Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原 ...

随机推荐

  1. Mybatis的使用中的一些不太注意的技巧

    以下就总结一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的总结笔 1.插入时主键返回 我们向数据库插入一条记录是,使用Mybatis的<insert>是无法返回插入的主 ...

  2. 基于AndFix的热修复 成功后简单的总结总结错失

    首先了解热修复是什么东西?? 就我自己简单的理解:就是不须要又一次打包 公布到市场 然后再让用户又一次下载就能够把一些小bug和需求通过补丁的形式进行改动. 然后如今的热修复方式有大致的三种: 1.d ...

  3. Android新控件RecyclerView剖析

    传智·没羽箭(传智播客北京校区Java学院高级讲师) 个人简单介绍:APKBUS专家之中的一个,黑马技术沙龙会长,在移动领域有多年的实际开发和研究经验.精通HTML5.Oracle.J2EE .Jav ...

  4. POJ 2479 Maximum sum POJ 2593 Max Sequence

    d(A) = max{sum(a[s1]..a[t1]) + sum(a[s2]..a[t2]) | 1<=s1<=t1<s2<=t2<=n} 即求两个子序列和的和的最大 ...

  5. Codeforces Round #315 (Div. 2) (ABCD题解)

    比赛链接:http://codeforces.com/contest/569 A. Music time limit per test:2 seconds memory limit per test: ...

  6. 英特尔投资:7200万美元投资12家创新公司,包括3家中国公司(www.intelcapital.com)

    集微网消息,英特尔投资——英特尔公司全球投资机构,今天在英特尔投资全球峰会上宣布向12家科技创业公司投资超过7200万美元.加上今天宣布的新投资,英特尔投资在2018年投资总额已超过1.15亿美元. ...

  7. 【微信小程序】自定义模态框实例

    原文链接:https://mp.weixin.qq.com/s/23wPVFUGY-lsTiQBtUdhXA 1 概述 由于官方API提供的显示模态弹窗,只能简单地显示文字内容,不能对对话框内容进行自 ...

  8. 【SPOJ QTREE】树链剖分模板

    用线段树求解,这里注意因为求的是路径最大值,注意一下细节. #include<cstdio> #include<cstring> #include<algorithm&g ...

  9. 贝叶斯统计(Bayesian statistics) vs 频率统计(Frequentist statistics):marginal likelihood(边缘似然)

    1. Bayesian statistics 一组独立同分布的数据集 X=(x1,-,xn)(xi∼p(xi|θ)),参数 θ 同时也是被另外分布定义的随机变量 θ∼p(θ|α),此时: p(X|α) ...

  10. thinkphp 3.2,引入第三方类库的粗略记录

    首先用第三方类库我是放到vendor里面的 根目录\ThinkPHP\Library\Vendor\Wxphp 例如创建了一个Wxphp文件夹,里面有个php文件叫做     zll.php    文 ...