在进入Hibernate学习之前我们先来回顾一下JDBC的开发。
JDBC是SUN公司为统一对数据库的操作,定义的一套java操作数据库的规范。
基本的JDBC应用步骤
1)注册一个 Driver
2)建立一个到数据库的连接
3)创建一个statement / PreparedStatement(这个更好)
3)执行SQL语句
4)处理结果
5)关闭JDBC对象
关系型数据库与面向对象的冲突
面向对象是从软件工程基本原则(如耦合,聚合,封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。而java语言是完全面向对象语言,这种冲突就越发的明显了。
对目前的J2EE信息化系统而言,通常采用面向对象分析和面向对象设计的过程。系统从需求设计到系统设计都是按面向对象方式进行。但到了详细设计阶段,由于数据持久化需要保存到关系数据库,不得不自底向上修改设计方案,又回到了按照过程进行编程的老路上来了,这是非常令人沮丧的。
ORM介绍:
ORM的全称是Object/Relation Mapping,即对象/关系映射。
ORM也可以理解是一种规范,具体的ORM框架可作为应用程序和数据库的桥梁。
面向对象程序设计语言与关系数据库发展同步时,需要一种中间解决方案,ORM框架就是这样的解决方案。
ORM不是一种具体的产品,而是一类框架的总称,它概述了这类框架的基本特征:
1)完成面向对象的程序设计语言到关系数据库的映射。
2)基于ORM框架完成映射后,既可利用面向对象程序语言的简单易用性,又可利用关系数据库的技术优势。
Hibernate介绍:(Hibernate-4.1.9)
Hibernate是目前最流行的ORM框架之一,它是一个面向Java环境的对象/关系数据库映射工具。
Hibernate采用低浸入式的设计,即完全采用普通的Java对象,而不必继承Hibernate的某个超类或实现Hibernate的某个接口。Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,真正实现了开发者采用面向对象的方式来操作关系数据库。
Hibernate的目录结构:
开发环境搭建:
1.导入jar包
2.创建一个需要持久化的类,并对应配置 *.hbm.xml 文件。(下面以Person类为例)
JDBC是SUN公司为统一对数据库的操作,定义的一套java操作数据库的规范。
基本的JDBC应用步骤
1)注册一个 Driver
2)建立一个到数据库的连接
3)创建一个statement / PreparedStatement(这个更好)
3)执行SQL语句
4)处理结果
5)关闭JDBC对象
public void insert(){
try {
//1.连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/j1206";
Connection con = DriverManager.getConnection(url,"root","root");
//准备sql语句
String sql = " insert into tb_user(name,password) values('谢霆锋','123') ";
//2. 获取Statment
Statement stm = con.createStatement();
//3. 发送sql
int result = stm.executeUpdate(sql);
stm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
只记得初学JDBC的时候这样的步骤就是复制粘贴复制粘贴.....好了,还是接着继续整理整理Hibernate的笔记吧。
关系型数据库与面向对象的冲突
面向对象是从软件工程基本原则(如耦合,聚合,封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。而java语言是完全面向对象语言,这种冲突就越发的明显了。
对目前的J2EE信息化系统而言,通常采用面向对象分析和面向对象设计的过程。系统从需求设计到系统设计都是按面向对象方式进行。但到了详细设计阶段,由于数据持久化需要保存到关系数据库,不得不自底向上修改设计方案,又回到了按照过程进行编程的老路上来了,这是非常令人沮丧的。
ORM介绍:
ORM的全称是Object/Relation Mapping,即对象/关系映射。
ORM也可以理解是一种规范,具体的ORM框架可作为应用程序和数据库的桥梁。
面向对象程序设计语言与关系数据库发展同步时,需要一种中间解决方案,ORM框架就是这样的解决方案。
ORM不是一种具体的产品,而是一类框架的总称,它概述了这类框架的基本特征:
1)完成面向对象的程序设计语言到关系数据库的映射。
2)基于ORM框架完成映射后,既可利用面向对象程序语言的简单易用性,又可利用关系数据库的技术优势。
Hibernate介绍:(Hibernate-4.1.9)
Hibernate是目前最流行的ORM框架之一,它是一个面向Java环境的对象/关系数据库映射工具。
Hibernate采用低浸入式的设计,即完全采用普通的Java对象,而不必继承Hibernate的某个超类或实现Hibernate的某个接口。Hibernate是面向对象的程序设计语言和关系数据库之间的桥梁,真正实现了开发者采用面向对象的方式来操作关系数据库。
Hibernate的目录结构:
开发环境搭建:
1.导入jar包
2.创建一个需要持久化的类,并对应配置 *.hbm.xml 文件。(下面以Person类为例)
import java.util.Date;
/**
* 普通的javabean ,需要进行持久化的类
* 需要注意:
* 1:通常这个类需要有一个 id ,一般建议使用封装类型
* 2:这个类不能是final修饰的
* 3:需要给这个类提供一个无参的构造器
* 4:需要给所有的属性提供getting/setting方法
*/
public class Person {
private Integer id;
private String name;
private int password;
private Date birthday;
public Person(){
}
/** getter setter method*/
}
△持久化配置文件--Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!-- 本文件就是一个java对象到关系数据库的映射配置文件 -->
<hibernate-mapping package="org.jay.bean">
<!-- class配置类对应数据库表的映射配置
name 表示要进行持久化类的类名
table 表示类持久化后在数据库中的表名
-->
<class name="Person" table="t_person">
<!-- id指定Person类中那个属性是id -->
<id name="id">
<!-- id的生成策略 -->
<generator class="identity"/>
</id>
<!-- Person 类的其他属性配置
name 对应类的属性
column 在数据库表中所取的字段名(如果没有设置column将使用name的值创建对应的列名)
-->
<property name="name" column="t_name"/>
<property name="password" column="t_password"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
3.配置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>
<!--是否显示执行的SQL语句>
<property name="show_sql">true</property>
<!-- 驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库url /// 可以表示本机 -->
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_db</property>
<!-- 访问数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 密码当然要啦 -->
<property name="hibernate.connection.password">root</property>
<!-- 方言(为了更好的操作具体的数据库)-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!--
自动创建表结构配置
create-drop 在程序启动的时候创建对应数据库表结构,当SessionFactory关闭的时候会将创建的表结构删除
create 在每次程序启动的时候先删除上次创建的数据库表结构,然后再创建对应新数据库表结构。
update 在每次启动的时候会追加修改的表结构,但是不会影响原来的数据(通常用这个)
validate 在每次启动的时候会验证并修改的表结构
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 嘿嘿!千万不要忘了这一步。引入对应的需要进行持久化类的配置文件(可以引入多个要进行持久化操作的配置文件) -->
<mapping resource="org/jay/bean/Person.hbm.xml">
</session-factory>
</hibernate-configuration>
4.好了,基本上就是这样子了。下面上个测试类 (⊙o⊙)
package org.jay.fuck;
import org.jay.bean.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
/**
* hibernate入门实例
*/
public class fuck{
public static void main(String[] args) {
//创建Configuration 实例并加载配置文件(hibernate.cfg.xml)
Configuration config = new Configuration().configure();
//通过Configuration 获得 SessionFactory(获得对应的需要操作的数据库的配置信息)
//SessionFactory 是与应用程序生命周期一致的是在多个线程之间共享的
//config.buildSessionFactory(); 是hibernate 4 之前的写法
SessionFactory sf = config.buildSessionFactory();
//通过sessionfactory获得session(一次数据库的交互)
Session session = sf.openSession();
//在使用Hibernate进行增删改操作的时候涉及到了事务
Transaction t = session.beginTransaction();
//创建需要进行持久化的java对象
Person p = new Person();
p.setName("尼玛");
p.setPassword(1278);
p.setBirthday(new Date();
//使用hibernate面向对象的方式进行持久化
//session.save(p);
session.persist(p);
//提交事务
t.commit();
//关闭session
session.close();
sf.close();
}
}
OK
就这样了,第一次发表文章,是对之前求学期间一些资料,笔记的整理,如有什么错漏,还望大家海涵,也希望大家不吝赐教!感激不尽!