zl程序教程

您现在的位置是:首页 >  其他

当前栏目

hibernate02环境的搭建详解编程语言

编程语言 详解 环境 搭建
2023-06-13 09:20:36 时间

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

 

创建一个java项目

hibernate02环境的搭建详解编程语言

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

hibernate02环境的搭建详解编程语言

hibernate02环境的搭建详解编程语言

hibernate02环境的搭建详解编程语言

hibernate02环境的搭建详解编程语言

把jar包放入项目中并引用

hibernate02环境的搭建详解编程语言

 

 创建对应的学生类

/** 

 * 学生的实体类 

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 + "]"; 

}

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

hibernate02环境的搭建详解编程语言

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

hibernate02环境的搭建详解编程语言

 

hibernate02环境的搭建详解编程语言

修改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 / 

 /id 

 !--配置其他属性的映射 -- 

 property name="age"/ 

 property name="name" column="sname"/ 

 /class 

 /hibernate-mapping 

 

找到hibernate核心的配置文件并修改内容 

 

hibernate02环境的搭建详解编程语言

 

修改后的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 


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 


01.create:每次运行都会删除上次生成的表! 02.update:没有表会自动创建,如果有,新增数据! 字段不一致,会按照hbm.xml文件中的column属性值 ,在数据库中新增一列 03.validate:不会自动创建表,如果表存在,会新增数据! 字段不一致,会抛出异常,说在数据库中没有该字段 04.create-drop:每次运行都会删除上次生成的表! 当sessionFactory关闭的时候,数据库中的表自动删除 property name="hbm2ddl.auto" update /property
主键生成的值由用户决定,与底层数据库没有关系! 在调用session.save()之前,必须给主键赋值,否则会抛出异常! 02.sequence: oracle支持的主键生成策略!hibernate会从数据库中取得当前的序列下一个值赋值给主键! 不需要我们给主键赋值! generator param name="sequence" sq_student_id /param /generator 03.identity :针对mysql数据库的主键自增 04.increment:默认会在数据库中查询对应表中主键的最大值,(select max(id) from stu) 之后把值给主键! generator / /id

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12118.html

cjavamysqloraclexml