hibernate02环境的搭建
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环境的搭建的更多相关文章
- 总结:Mac前端开发环境的搭建(配置)
新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...
- CentOS7 + mono +Jexus 环境的搭建
CentOS7的安装和配置 1,从http://www.centos.org/下载CentOS7的镜像,并在VMWare中创建该镜像的虚拟机,为方便操作,把虚拟机的网络连接设置为桥接模式:在安装过程中 ...
- ubuntu14.04安装及web环境的搭建
在进行接下来的工作之前首先得准备一个Ubuntu的启动U盘以及腾出一个至少50G的系统盘(在网上看到有人用20G的,不知道效果怎么样).关于Ubuntu启动U盘大家可以参考这个帖子 http://ti ...
- ubuntu 14.04LTS 环境下搭建tftp服务器
花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...
- Linux 14.04lts 环境下搭建交叉编译环境arm-linux-gcc-4.5.1
交叉编译工具链是为了编译.链接.处理和调试跨平台体系结构的程序代码,在该环境下编译出嵌入式Linux系统所需要的操作系统.应用程序等,然后再上传到目标板上. 首 先要明确gcc 和arm-linux- ...
- windows环境下搭建vue+webpack的开发环境
前段时间一直在断断续续的看vue的官方文档,后来就慢慢的学习搭建vue的开发环境,已经有将近两周了,每到最后一步的时候就会报错,搞的我好郁闷,搁置了好几天,今天又接着搞vue的开发环境,终于成功了.我 ...
- 非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法
非域环境下搭建自动故障转移镜像无法将 ALTER DATABASE 命令发送到远程服务器实例的解决办法 环境:非域环境 因为是自动故障转移,需要加入见证,事务安全模式是,强安全FULL模式 做到最后一 ...
- 如何在没有域的环境中搭建AlwaysOn(二)
对DBA而言,不需要域就可以搭建SQL Server AlwaysOn是Windows Server 2016中最令人兴奋的功能了,它不仅可以降低搭建的成本,而且还减少了部署和运维的工作量. 上篇博客 ...
- JMeter--二、在Windows环境上搭建wordpress
为了学习使用JMeter,在Windows环境上搭建了wordpress. 使用JMeter录制或是编写登录worepress.编辑文章.删除文章的脚本. 首先了解一下wordpress是什么? Wo ...
随机推荐
- wriesharek同时监听多个端口
之前的文章<wireshark解析自定义的protobuf协议> ,当时只监听了一个端口,而如果游戏同时有二个 socket 连接,比如一个是网关另外一个是其它的,怎么办呢? for i, ...
- grid和flex区别
网格容器 VS Flex容器 网格属性 VS Flex属性
- CSAPP Tiny web server源代码分析及搭建执行
1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议). 一个webclient(即浏览器)打开一个到server的因特网连接,而且请求 ...
- 运行Keras版本的Faster R-CNN(1)
Keras版本的Faster R-CNN源码下载地址:https://github.com/yhenon/keras-frcnn下载以后,用PyCharm打开(前提是已经安装了Tensorflow-g ...
- Oracle 学习笔记 10 -- 约束
本次笔记来学习约束,约束在表中无处不在. 比如,表中的数据不同意为空或者是表中id为设为主键,都是约束. 约束分类: 主键约束(PRIMARY KEY):主键表示表中一个唯一的标识,本 ...
- Xtrabackup的安装
一.Installing Percona XtraBackup from Percona yum repository 添加源 yum install http://www.percona.com/d ...
- 搭建web之 服务器鉴权失败,请确认服务器已启用密码鉴权并且账号密码正确?
实例化时,登录过程中出现 服务器鉴权失败! 这是由于密码错误所致! 第一种情况:原始随机密码 第一种情况,你没有修改密码,则可以直接查找原始密码: 过程详见官网 使用密码登录的前提条件 密码: 若用户 ...
- 超简单的okHttpUtils封装(下)
版权声明:转载请注明出处:http://blog.csdn.net/piaomiao8179 https://blog.csdn.net/piaomiao8179/article/details/ ...
- CSS-2
day 39 学习链接:https://www.cnblogs.com/yuanchenqi/articles/5977825.html 4 文本属性 font-size: 10px; text-a ...
- Laravel 执行流程(一)之自动加载
定位 从 public/index.php 定位到 bootstrap/autoload.php 从 bootstrap/autoload.php 定位到 vendor/autoload.php 从 ...