Hibernate概述
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将`POJO(javabean)`与数据库表建立映射关系,是一个全自动的`orm`框架,`hibernate`可以自动生成`SQL`语句,自动执行,使得`Java`程序员可以随心所欲的使用对象编程思维来操纵数据库。 `Hibernate`可以应用在任何使用`JDBC`的场合,既可以在`Java`的客户端程序使用,也可以在`Servlet/JSP`的`Web`应用中使用,最具革命意义的是,`Hibernate`可以在应用`EJB`的`J2EE`架构中取代`CMP`,完成数据持久化的重任。ORM框架概述
ORM(对象关系映射)1. ORM映射:Object Relational Mapping
* O:面向对象领域的Object(JavaBean对象)
* R:关系数据库领域的Relational(表的结构)
* M:映射Mapping(XML的配置文件)
2. 简单一句话:Hibernate使程序员通过操作对象的方式来操作数据库表记录
Hibernate的运行环境
1.Hibernate.jar包下载链接:[Hibernate下载链接][1]2.将下载的jar包解压
3.导入mysql驱动jar包
4.导入hibernate文件下面的lib包中的required的所有jar包
5.导入日志包
导入三个jar:
- log4j-1.2.16.jar 日志接口具体实现
- slf4j-api-1.7.2.jar hibernate推荐使用的日志接口规范jar
- slf4j-log4j12-1.7.2.jar 日志接口和日志实现的桥梁
jar包截图:
6.创建javabean
7.在javabean的目录下创建一个xml文件,文件名为javabean名称.hbm.xml
8.找到hibernate的core核心jar包下的org.hibernate.xsd.hibernate-mapping-3.0.dtd`(或者xsd,默认不向下兼容)文件打开注解上面有hibernate配置文件的约束
<?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">
约束配置截图:
9.javabean映射数据库xml配置
<hibernate-mapping>
<!--配置类和表结构的映射-->
<!--
name: 配置javabean的全路径
table:数据库中的数据表名
-->
<class name="com.demo.domain.Customer" table="cst_customer">
<!--配置id(数据库中的主键映射javabean中的属性)-->
<!--
后续配置中的属性
name: javabean中的属性
column: 表结构中的字段
如果javabean中的属性和字段相同可以只写name
-->
<id name="cust_id" column="cust_id">
<!--主键的生成策略-->
<generator class="native"></generator>
</id>
<!--配置其他的属性-->
<property name="cust_name" column="cust_name" />
<property name="cust_user_id" column="cust_user_id" />
<property name="cust_create_id" column="cust_create_id" />
<property name="cust_source" column="cust_source" />
<property name="cust_industry" column="cust_industry" />
<property name="cust_level" column="cust_level" />
<property name="cust_linkman" column="cust_linkman" />
<property name="cust_phone" column="cust_phone" />
<property name="cust_mobile" column="cust_mobile" />
</class>
</hibernate-mapping>
样式:
hibernate核心配置
1.配置hibernate核心配置文件(数据库驱动)在项目的src目录下new一个hibernate.cfg.xml文件
添加约束
找到hibernate和core核心jar包下的org.hibernate.xsd.hibernate-configuration-3.0.dtd`(或者xsd,默认不向下兼容)文件打开注解上面有hibernate配置文件的约束
<!DOCTYPE html
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
2.如果没有网络xml文件中的不会出现代码提示需要配置本地
没有网络配置本地:
先复制(约束中的uri)http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd --> window --> preferences --> 搜索xml --> 选择xml catalog --> 点击add --> 现在URI --> 粘贴复制的地址 --> 选择location,选择本地的DTD的路径
<!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标签,一个数据库对应一个session-factory标签-->
<session-factory>
<!--必须要配置的五个参数,4大参数 mysql驱动配置,数据库的方言(需要去hibernate文件下面的project/ect/hibernate.properties找),-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc.mysql:///数据库名称</property>
<property name="hibernate.connection.username">账户</property>
<property name="hibernate.connection.password">密码</property>
<!--数据库的方言(其他数据库的语句生成为指定数据的语句)-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--可选的配置-->
<!--映射配置文件 需要引入映射的配置文件 指向映射的配置文件地址-->
<mapping resource="comdemodomainCustomer.hbm.xhtml"/>
</session-factory>
</hibernate-configuration>
样式:
hibernate.cfg.xml的五大参数可以去hibernate的解压的文件夹中的project/etc/hibernate.properties查看(自己是什么数据选择什么数据)
样式:
[关于xml文件的可选配置可以点击查看][12]
基本使用
1.加载一个配置文件Configuration config = new Configuration() {};
默认加载src目录下的hibernate.cfg.xml的配置文件,如果使用的是properties配置文件就不需要调用configure()函数,需要调用一个addResource("配置文件路径"),手动加载;
config.configure();
2.创建SessionFactory对象
SessionFactory sessionfactory = config.buildSessionFactory();
3.创建一个Session对象
Session session = sessionfactory.openSession();
4.开启事务
Transaction tr = session.beginTransaction();
5.编写保存代码
Customer c = new Customer();
// 不需要设置javabean对应数据表的主键,主键是自动递增的 hibernate已经帮我们去管理主键了(在配置中设置,不能写)
c.setCust_name("测试");
6.操作数据,操作对象就相当于操作数据库的表结构`
需要对数据表进行什么操作调用什么方法
- session.save(c); 将javabean中的数据放入数据表中insert
- session.delete(c); 删除
- session.get(c); 查询
- session.update(c); 修改
- session.saveOrUpdate(c); 保存或者修改(如果没有数据,保存数据。如果有,修改数据)
- session.createQuery(); HQL语句的查询的方式
7.提交事务
tr.commit();
8.释放资源
session.close();
sessionfactory.close();
hibernate回滚事务函数:
session.beginTransaction().rollback();