hibernate: 持久层的框架!
是一个开放源代码的对象关系映射框架(ORM)!之前我们访问数据库使用JDBC!
对JDBC进行了轻量级的对象封装!是一个全自动ORM框架!(底层可以自动生成sql语句)!
使用面向对象的思想来操作数据库!

创建一个java项目

引入需要的hibernate需要的jar包以及连接数据库需要的驱动包

把jar包放入项目中并引用

创建对应的学生类

/**
* 学生的实体类
*/
public class Student { private Integer id;
private Integer age;
private String name;// 和数据库中不一致 (sname) public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Student(Integer id, Integer age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
} public Student() {
super();
} @Override
public String toString() {
return "Student [id=" + id + ", age=" + age + ", name=" + name + "]";
} }

创建对应的数据库中的学生表

找到对应mapping映射文件,放在和实体类相同的包下!并修改其中的内容

修改Student.hbm.xml文件之后的内容

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- 映射文件 M 目的;实体类和 数据库中的表 产生关系
package:是说明我们需要映射的实体类的包名
class name:对应的是实体类的名称(如果省略了package属性,必须书写全类名)
property,id name:对应的是实体类中的属性名,如果和数据库中的字段一致,则可以省略column
-->
<hibernate-mapping package="cn.bdqn.bean">
<class name="Student" table="stu">
<id name="id">
<!--主键生成策略
assigned:主键的生成值完全由用户决定,与底层数据库无关。
在调用session.save()之前必须指定主键值,否则会抛出异常!
-->
<generator class="assigned"/>
</id>
<!--配置其他属性的映射 -->
<property name="age"/>
<property name="name" column="sname"/>
</class>
</hibernate-mapping>

找到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>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.username">t10</property>
<property name="connection.password">t10</property>
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property>
<!--方言 -->
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<!--是否显示底层生成的sql语句 -->
<property name="show_sql">true</property>
<!--格式化生成的sql语句 -->
<property name="format_sql">true</property>
<!--加载我们配置的映射文件 全路径 -->
<mapping resource="cn/bdqn/bean/Student.hbm.xml" /> </session-factory>
</hibernate-configuration>

创建对应的测试类

package cn.bdqn.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import cn.bdqn.bean.Student; /**
*
* @author 小豆腐
* 以后的你,会感谢现在努力的自己!努力!坚持!不放弃!
*
* hibernate核心的
* 1个类
* 01. 类 Configuration !对核心配置文件的读取! * 5个接口
* 01. SessionFactory:负责初始化hibernate需要的参数!在程序中有一个就够了!之后我们会写成单例模式!
* 02. Session:不是我们的HttpSession(用户session)! 我们hibernate的session
* 是用来操作对象(增删改查)!创建事务的对象!我们现在使用的session不是线程安全的!
* 03. Transaction :进行事务的操作!
* 04. Query :hibernate中查询的接口(sql , hql)
* 05. Criteria :和Query相似!但是做了一些封装!
*/
public class StudentTest { // 新增学生信息
@Test
public void addStudent() {
/**
* 01.读取核心配置文件 因为我们需要的信息都在这个核心配置文件中(连接数据库的四要素,映射文件)
* configure()底层默认去src下面查询了hibernate.cfg.xml文件
*/
Configuration configuration = new Configuration().configure();
// 02.创建sessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 03.打开session
Session session = sessionFactory.openSession();
// 04.开启事务
Transaction transaction = session.beginTransaction();
// 05.创建一个Student对象
Student student = new Student(400, 50, "小黄");
// 06.持久化操作
session.save(student);
// 07.提交事务 的 会产生sql语句
transaction.commit();
// 08.关闭session
session.close();
} // 新增学生信息
@Test
public void addStudent2() {
/**
* 01.读取核心配置文件 因为我们需要的信息都在这个核心配置文件中(连接数据库的四要素,映射文件)
* configure()底层默认去src下面查询了hibernate.cfg.xml文件
*/
Configuration configuration = new Configuration().configure();
// 02.创建sessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 03.打开session
Session session = sessionFactory.openSession();
// 04.开启事务
Transaction transaction = session.beginTransaction();
// 05.创建一个Student对象
Student student1 = new Student(50, 50, "小黄2");
session.save(student1);
Student student2 = new Student(60, 50, "小黄2");
session.save(student2);
Student student3 = new Student(7, "小黄2"); // 没有手动的给主键赋值,会抛出异常
session.save(student3);
/**
* 07.提交事务
* student1 和student2 没有问题
* 但是student3 报错了
* 那么事务还会提交吗? 不会! ACID
一致性: 原子性: 隔离性: 永久性:
         *
* 如果说 每个save()都会产生sql语句,与数据库产生交互! 这样数据库的压力大!
* 怎么减轻?
* 在commit()的时候,把之前的sql语句一起发送给数据库执行!
*/
transaction.commit();
// 08.关闭session
session.close(); } }

hbm2ddl:属性值

<!--是否显示底层生成的sql语句  -->
<property name="show_sql">true</property>
<!--格式化生成的sql语句 -->
<property name="format_sql">true</property> <!-- hbm2ddl
01.create:每次运行都会删除上次生成的表!
02.update:没有表会自动创建,如果有,新增数据!
字段不一致,会按照hbm.xml文件中的column属性值 ,在数据库中新增一列
03.validate:不会自动创建表,如果表存在,会新增数据!
字段不一致,会抛出异常,说在数据库中没有该字段
04.create-drop: 每次运行都会删除上次生成的表!sessionFactory关闭的时候,数据库中的表也会删除!
-->
<property name="hbm2ddl.auto">update</property>

小结

hibernate: 持久层的框架!
是一个开放源代码的对象关系映射框架(OMR)!之前我们访问数据库使用JDBC!
对JDBC进行了轻量级的对象封装!是一个全自动ORM框架!(底层可以自动生成sql语句)!
使用面向对象的思想来操作数据库! Student 实体类
Student.hbm.xml mapping(映射文件) hibernate.cfg.xml:是整个hibernate框架的核心配置文件!
01.管理mapping文件
02.整个hibernate环境的配置
03.连接数据库的四要素 sql的四种语言: DDL:数据定义语言
create alter drop truncate
DML: 数据操作语言
select insert update delete
DCL: 数据控制语言
grant revoke
TCL: 事务控制语言
savepoint
rollback <!-- hbm2ddl
01.create:每次运行都会删除上次生成的表!
02.update:没有表会自动创建,如果有,新增数据!
字段不一致,会按照hbm.xml文件中的column属性值 ,在数据库中新增一列
03.validate:不会自动创建表,如果表存在,会新增数据!
字段不一致,会抛出异常,说在数据库中没有该字段
04.create-drop:每次运行都会删除上次生成的表! 当sessionFactory关闭的时候,数据库中的表自动删除
-->
<property name="hbm2ddl.auto">update</property> oracle数据库创建序列
create sequence sq_student_id
minvalue 1
maxvalue 9999999999
start with 10
incrment by 1
cache 20; <id name="id">
<!--主键生成策略
01.assigned:
主键生成的值由用户决定,与底层数据库没有关系!
在调用session.save()之前,必须给主键赋值,否则会抛出异常!
02.sequence:
oracle支持的主键生成策略!hibernate会从数据库中取得当前的序列下一个值赋值给主键!
不需要我们给主键赋值!
<generator class="sequence">
<param name="sequence">sq_student_id</param>
</generator>
03.identity :针对mysql数据库的主键自增
04.increment:默认会在数据库中查询对应表中主键的最大值,(select max(id) from stu)
之后把值给主键!
-->
<generator class="increment"/>
</id>

hibernate02环境的搭建的更多相关文章

  1. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  2. CentOS7 + mono +Jexus 环境的搭建

    CentOS7的安装和配置 1,从http://www.centos.org/下载CentOS7的镜像,并在VMWare中创建该镜像的虚拟机,为方便操作,把虚拟机的网络连接设置为桥接模式:在安装过程中 ...

  3. ubuntu14.04安装及web环境的搭建

    在进行接下来的工作之前首先得准备一个Ubuntu的启动U盘以及腾出一个至少50G的系统盘(在网上看到有人用20G的,不知道效果怎么样).关于Ubuntu启动U盘大家可以参考这个帖子 http://ti ...

  4. ubuntu 14.04LTS 环境下搭建tftp服务器

    花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...

  5. Linux 14.04lts 环境下搭建交叉编译环境arm-linux-gcc-4.5.1

    交叉编译工具链是为了编译.链接.处理和调试跨平台体系结构的程序代码,在该环境下编译出嵌入式Linux系统所需要的操作系统.应用程序等,然后再上传到目标板上. 首 先要明确gcc 和arm-linux- ...

  6. windows环境下搭建vue+webpack的开发环境

    前段时间一直在断断续续的看vue的官方文档,后来就慢慢的学习搭建vue的开发环境,已经有将近两周了,每到最后一步的时候就会报错,搞的我好郁闷,搁置了好几天,今天又接着搞vue的开发环境,终于成功了.我 ...

  7. 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法

    非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...

  8. 如何在没有域的环境中搭建AlwaysOn(二)

    对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量. 上篇博客 ...

  9. JMeter--二、在Windows环境上搭建wordpress

    为了学习使用JMeter,在Windows环境上搭建了wordpress. 使用JMeter录制或是编写登录worepress.编辑文章.删除文章的脚本. 首先了解一下wordpress是什么? Wo ...

随机推荐

  1. tensorflow由于未初始化变量所导致的错误

     版权声明:本文为博主原创文章,如需转载请注明出处,谢谢. https://blog.csdn.net/qq_38542085/article/details/78742295 初始代码 import ...

  2. PDF.js实现个性化PDF渲染(文本复制)

    我肥来啦

  3. VMware中虚拟机与主机不能ping通解决办法

    先去看看服务全部启动了没? VMware相关服务启动关闭脚本     启动了还报错,接着往下看......     一.如果是桥接模式,那么 可能性1:虚拟机防火墙禁ping,请关闭虚拟机防火墙重试: ...

  4. jQuery on()方法使用

    jQuery on()方法 基本语法: 语法结构一: $(selector).on(event,function) 语法结构二: $(selector).on(events,[selector],[d ...

  5. unbuntu系统( PC机 )中安装360wifi步骤

    少说废话,每一步都经过验证: 1.  首先查看一下当前使用的linux版本: gxjun@gxjun:~$ uname -r 4.8.0-59-generic 2. 将360wifi插入PC的USB中 ...

  6. iOS 线上版本图片资源格式的问题导致的闪退

    链接:https://www.jianshu.com/p/6492779cb89e來源:简书 导致这种问题的原因是:在 Xcode 8 中,当你资源文件中[含有16位图]或者[图片显示模式γ值为'P3 ...

  7. 【C++】C++中的分离式编译

    在C++中随着程序越来越复杂,我们希望把程序的各个部分分别储存在不同的文件中.C++支持的分离式编译(separate compilation)允许我们把程序分割到几个文件中去,每个文件独立编译. 头 ...

  8. 基于Kafka的生产者消费者消息处理本地调试

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/68174111冷血之心的博客) Kafka下载地址:http://d ...

  9. 【OpenFOAM案例】02 自己动手

    前言:很多人说OpenFOAM很难,要啃上很多的理论书籍,什么流体力学.计算流体力学.矩阵理论.线性代数.数值计算.C++程序设计神马的,看看光这一堆书就能吓倒绝大多数的人.其实我们并不一定要从这些基 ...

  10. hive hbase区别

    1.hive是sql语言,通过数据库的方式来操作hdfs文件系统,为了简化编程,底层计算方式为mapreduce. 2.hive是面向行存储的数据库. 3.Hive本身不存储和计算数据,它完全依赖于H ...