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. 《软件性能测试与LoadRunner实战教程》喜马拉雅有声图书上线

    工作忙的同学们有福了,可以听书了. 于涌老师的<软件性能测试与LoadRunner实战教程>喜马拉雅有声图书上线.

  2. ORACLE通过SQL将一行数据转换为多行

    转换前和需要转成的格式如下图: sql语句如下: , ; 效果如下:

  3. NLP 第7章 文本向量化

  4. 2-08. 用扑克牌计算24点(25) (ZJU_PAT 数学 枚举)

    题目链接:http://pat.zju.edu.cn/contests/ds/2-08 一副扑克牌的每张牌表示一个数(J.Q.K分别表示11.12.13,两个司令都表示6).任取4张牌.即得到4个1~ ...

  5. git中提示 please tell me who you are

    提示也就是需要你登录一下,确认你的身份,但是不要按照其提示输入,先输入命令git config user.name “username”,换行输入git config user.email “emai ...

  6. 面试汇总——知道什么是同源策略吗?那怎么解决跨域问题?知道 JSONP 原理吗?

    本文是面试汇总分支——知道什么是同源策略吗?那怎么解决跨域问题?知道 JSONP 原理吗?. 同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能, ...

  7. keil软件错误总结.doc

    KEIL编译错误信息表   错误代码及错误信息 错误释义 error 1: Out of memory 内存溢出 error 2: Identifier expected 缺标识符 error 3: ...

  8. springboot整合三 共享session,集成springsession

    官网介绍 - spring:session:https://docs.spring.io/spring-session/docs/current/reference/html5/ 1. Mave依赖 ...

  9. [U3D Demo] 手机飞机大战

    游戏截图 使用插件 DOTween NGUI 游戏介绍 游戏使用C#开发,素材是<全民飞机大战>中提取出来的,该游戏最早是去年由Flash Air+Starling开发的Demo,后来我修 ...

  10. 使用Node.js的Express框架进行文件上传

    我们先创建一个Express项目,要使用文件上传的功能还需要下载multer模块. npm install --save multer 下面我们在public文件夹下创建upload.html,内容如 ...