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 ...
随机推荐
- YUV420序列转成图片
首先声明一点,这里的YUV其实不是YUV,严格来说是YCbCr.这里就先这样称呼YUV吧.本文是关于YUV420格式的视频转成图片序列的. 关于YUV格式的图片,存储如下图所示: 举个例子,一个640 ...
- enctype和Content-type有什么关系
enctype和Content-type有什么关系 当我们使用form表单上传文件时post请求的时候,需要在form表单中添加enctype="multipart/form-data&qu ...
- too much recursion(太多递归)Uncaught RangeError: Maximum call stack size exceeded BootstrapValidator报错
在BootstrapValidator中已默认遵守Bootstrap规则,form里的每个输入项目必需包含在类为form-group的标签里,否则BootstrapValidator中定义的field ...
- hdu5299 Circles Game
Circles Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- AxWindowsMediaPlayer控件的使用
首先要知道如何将控件添加到工具箱中,步骤如下: “工具箱”中单击右键,选择“选择项”菜单,打开“选择工具箱项”窗口,选择“COM组件”标签,在列表中找到并勾选“Windows Media Player ...
- fontawesome图标字体库组件在服务器上显示不出来图标的解决
这个组件在我所开发的网站中被大量使用,为网站增色不少.在本地测试的时候所有图标都能显示出来,可一到服务器上就显示不出来了.网上查列出了可能的原因.其一,IIS没有注册字体类型.经过检查,不存在这个问题 ...
- Javascript 面向对象的编程思想
面向对象,首先得有类的概念,没有类造不出来对象,,Javascript把函数名看成类. 其次分为不同结构层,如三层架构.MVC.MVVM. 本文根据实际项目演练,分为几个适用的结构层,如果项目不大一般 ...
- Nload(CentOS网速的实时监控)
Nload(CentOS网速的实时监控)的安装和安装过程中的问题 I. 安装 Download the latest rpmforge-release rpm from wget ftp://ftp. ...
- Ubuntu安装守护进程supervisor
Supervisor安装与配置(Linux/Unix进程管理工具) asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel) 为了保证服务能够稳定 ...
- 星云的Linux专用学习手册
Centos 7 为例 1. 查看操作系统信息 uname -a 执行效果如下: [fairy@localhost ~]$ uname -a Linux localhost.localdomain - ...