hibernate是对jdbc的封装 它是一个开源的DAO层框架.
JDBC 和Hibernate比较谁的执行速度快 JDBC的执行效率高
开发效率 Hibernate开发效率高,JDBC
ORM : 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的--"虚拟对象数据库"。
对象关系模型、对象关系映射
:一个JAVA对象应数据库的一行记录
:多行记录对应一个集合LIst
ORM: 比如Hibernate通过操作java对象来操作数据库
Hibernate 开发步骤
1.导jar包 1 导包 2add
2.src根目录下编写Hibernate主配置文件:数据库的连接参数等
hibernate.cfg.xml:对hibernate 进行配置
/hibernate-demo2/lib/hibernate-core-5.0.7.F
cfg:configuration配置
hibernate.cfg.xml 对hibernate进行配置
dtd:hibernate-core.jar org.hibernate
3.写实体类:和表一致
4.hibernate 映射文件:实体映射:写数据库列名和类属性的映射
和 实体类在一个包 类名.hbm.xml
指定主键生成策略 mysql优先使用 identity
identity : 自增
native:使用数据库默认的 需要去数据库核对
assigned:由程序指派 :给Panda的id赋值
uuid:32位不重复的字符串(全球唯一)
sequence:序列 Oracle
5.在hibenate.cfg.xml 中引入xxxx.hbm.xml
<mapping resource/>
6.b编码:
6.1加载主配置文件
6.2 创建sessionFactory
6.3获取Session 相当于JDBC中的connection
6.4开启事务
6.5通过Session 进行CRUD
6.6添加事务控制代码
6.7关闭事务
6.8 关闭Session
事务控制 :成功 commit 失败 rollback
SessionFactory 一般就一个
一次CRUD对应一个Session
注意:
xxxx.hbm.xml:中的name一定要类的属性一致 column一定要跟列名一致
hibernate.cfg.xml中的映射文件名不要写错
具体操作过程
通过hebernate实现对数据库的增删改查
1.导jar包 并且add
2.domain文件下创建类实现对数据库的封装 再创建
3..domain文件下 创建类名.hbm.xml 文件 创建方式 右键 new other xml 选择 举个例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="domain.Girl" table="girl">
<id name="id" column="id" > 表中的主键
<generator class="identity">
</generator>
</id>
<property name="name" column="name"></property> 数据库对应表的属性
<property name="gender" column="gender"></property>
<property name="hobby" column="hobby"></property>
</class>
</hibernate-mapping>
4.在根目录下创建hibernate.cfg.xml文件 相当于jdbc文件 实现数据的连接 引入映射文件需要写引入映射文件:写全路径包名/ mapping可以写多个 空格会报错 ,检查一下
<?xml version="1.0" encoding="UTF-8"?>
<!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///struts1 </property> 数据库名字
<property name="hibernate.connection.username">java</property> 用户
<property name="hibernate.connection.password">java</property> 密码
<!--在控制台打印SQL -->
<property name="show_sql">true</property>
<!--指定hibernate方言 ,和数据库对应 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--对SQL语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 引入映射文件:写全路径包名/ mapping可以写多个 -->
<mapping resource="domain/Girl.hbm.xml"/> 数据库的第一个表对应的文件
<mapping resource="domain/Panda.hbm.xml"/> 数据库的第二个表对应的文件
</session-factory>
</hibernate-configuration>
5.创建util文件 来实现静态代码快 static代码块(静态代码块)只执行一次,保证了SessionFactory的唯一 ,不用每次都重写,只需调用这个文件即可
package utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Configuration cfg;
private static SessionFactory sf;
public static Transaction tx;
static{
cfg=new Configuration().configure();
sf=cfg.buildSessionFactory();
}
public static Session getSession(){
Session session=null;
session=sf.openSession();
tx= session.beginTransaction();
return session;
}
}
5.创建。class文件 来实现增删改查
注意 调包是全是hibernate 的包
以删除为例 特殊点:1需要先查找才能删除 2.session.delete(girl) 在增 改 查 可省略 也能发挥作用 但在删除中只会单方面有效 (运行时正确,其实在数据库中没有完成删除操作)
@Test
public void delete(){
Session session=HibernateUtil.getSession();
Girl girl=session.load(Girl.class, 4);
session.delete(girl);
HibernateUtil.tx.commit();
session.close();
}
的发谁的大佛放的地辅导费方