Hibernate
MVC思想
1.model:模型
2.view:视图
3.controller:控制器
hibernate概述
什么是框架
使用框架之后,帮我们实现一部分功能,使用框架的好处就是,少些一部分代码实现功能
什么是hibernate框架
1.hibernate框架应用在javaee三成结构中的dao层
2.在dao层里面做对数据库crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate的好处就是,不需要写复杂的jdbc代码,不需要写sql实现。
什么是orm思想
1.hiber使用orm思想对数据库进行crud操作
2.在web阶段学的javabean,更正确的叫法是实体类
3.orm:Obejet Relational Mapping:对象关系映射
文字描述
1.让实体类和数据库一一对应关系,让实体类首先和数据库表对应,让实体类属性和数据库字段对应
2.不需要直接操作数据库表,而操作对应实体类对象
hibernate入门
搭建hibernate环境
第一步 导入hibernate的jar包
mysql驱动的jar包也要导入
第二步 创建实体类
使用hibernate的时候,不需要手动创建表,hibernate帮把表创建。
第三步 配置实体类和数据库表一一对应关系
使用配置文件实现映射关系
1.创建xml格式的配置文件
1.1 映射配置文件名称和位置没有固定要求
1.2 建议:在实体类所在包内创建,实体类名称hbm.xml
2.配置是xml格式,在配置文件中首先引入xml约束
2.1 学过约束dtd/schema/,在hibernate里面引入的约束时dtd约束
3.配置映射关系
<!-- 1 配置类和表对应
class标签
name属性:实体类全路径
table属性:数据库表名称 -->
<class name="实体类全路径" table="表名">
<!-- 2 配置实体类id和表id对应
hibernate要求实体类有一个属性唯一值
hibernate要求表有字段作为唯一值 -->
<!-- id标签
name属性:实体类里面id属性名称
column属性:生成的表字段名称-->
<id name="uid" column='uid'
<!-- 设置数据库表id增长策略
native:生成表id值就是主键自动增长-->
<generator class="native"></generator>
</id>
<!--配置其他属性和表字段对应
name属性:实体类属性名称
column属性:生成表字段名称-->
<property name="username" column="username"></property>
</class>
第四步 创建hibernate核心配置文件
1 核心配置文件格式为xml,但是核心配置文件名称和位置是固定的
位置:必须src下面
名称:必须hibernate.cfg.xml
2 引入dtd约束
3 hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
<property name="hibernate.connection,derverclass.com.mysql.jdbc.Driver"></property>
<property name="hibernate.connection.url">jdbc:mysql://数据库名</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
hibernate实现操作步骤
第一步 加载hibernate核心配置文件
第二步 创建SessionFactory对象
第三步 使用SessionFactory创建Session对象
第四步 开启事务
第五步 写具体逻辑crud操作
第六步 提交事务
第七步 关闭资源
hibernate映射配置文件
1.映射配置文件名称和位置没有固定要求
2.映射配置文件中,标签name属性值写实体类相关内容
2.1 class标签name属性值是实体类全路径
2.2 id标签和property标签name属性值
3.id标签和property标签,column属性可以省略
3.1不写值和name属性值一样
4.property标签type属性,设置生成表字段的类型,自动对应类型。
hibernate核心API
configuration
1.代码
Configuration cfg = new Configuration();
(1)到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)
SessionFactory
1.使用Configuration 对象创建SessionFactory对象
1.1创建SessionFactory过程中会做的事
根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
2.创建SessionFactory过程中,这个过程特别耗费资源
在hibernate操作中,建议一个项目一般创建一个SessionFactory
3.具体实现
3.1 写工具类,写静态代码块实现
静态代码块在类加载时候执行,执行一次。
static Configuration cfg = null;
static SessionFactory sessionFactory = null;
//静态代码块实现
static {//加载核心配置文件
cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
//提供方法返回sessionFactory
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
Session
1.session类似jdbc中connection
2.调用session里面不同的方法实现crud操作
2.1添加save方法
2.2修改update方法
2.3删除delete方法
2.4根据id查询get方法
3.session单线程对象
3.1session对象不能公用,只能自己使用
Transaction
1.事务对象
Tranction tx = session.beginTransaction();
2.事务提交和回滚方法
tx.commit();
tx.rollback();
3.事务概念
事务四个特性
原子性/一致性/隔离性/持久性
hibernate注解配置
常用的HibernateAnnotation标签
@Entity
将一个JavaBean类声明为一个实体的数据库表映射类,最好实现序列化。此时,默认情况下,所有的类属性都会映射到数据库的持久性字段,若在类中添加另外属性,而非映射数据库,要用下面的transient来注解。
@Table(name =”preson_info“)
持久类映射的表,@Table是类一级的注解,定义在@Entity下,在实体bean映射表
@Id
注释可以表明那种属性是该类中的独特标识符(即相当于数据表的主键)
@Generated Value
定义自动增长的主键的生成策略
@Transient
将忽略这些字段和属性,不用持久化到数据库,适用于在当前的持久类中,某些属性不是用于映射到数据库,而是用于其他的业务逻辑需要。
Hibernate查询方式
1.对象导航查询
根据id查询某个客户,再查询这个客户里面所有的联系人
2.ID查询
根据id查询某一条记录,返回对象
3.HQL查询
Query对象,写hql语句实现查询
4.QBC查询
Criteria对象