Hibernate学习基本配置

Posted wangrongchen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate学习基本配置相关的知识,希望对你有一定的参考价值。

hibernate是一个持久层框架,是一个ORM(object,relattional mapping)对象关系映射框架,对jdbc进行了轻量级对象框架。

所谓的对象关系映射是指,一个java对象和关系型数据库里的表简历一种映射关系,从而操作对象就可以操作表。

 

入门学习


所需jar包

技术图片

 

创建实体类

技术图片

 

创建映射

映射需要通过XML的配置文件来完成,这个配置文件可以任意命名。尽量统一命名规范(类名.hbm.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 package="com.gream">
    <!-- <建立类与表的映射> -->
    <class name="com.gream.Cstomer" table ="cst_customer" >
        <!--表主键和类关联  -->
        <id name="cust_id" column="cust_id" >
        <!--主键生成策略 -->
            <generator class="increment"  />
        </id>
        <!-- 普通的对象属性和表属性对应 -->
        <property name="cust_name" column="cust_name"  />
        <property name="cust_source" column="cust_source"  />
        <property name="cust_industry" column="cust_industry"  />
        <property name="cust_level" column="cust_level"  />
        <property name="cust_phone" column="cust_phone"  />
        <property name="cust_mobile" column="cust_mobile"  />
    </class>

</hibernate-mapping>

 

创建一个Hibernate的核心配置文件

Hibernate的核心配置文件的名称:hibernate.cfg.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 5     <hibernate-configuration>
 6         <session-factory>
 7         <!--连接数据库基本参数  -->
 8             <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 9             <!--  2种写法,防止插入数据库出现乱码 -->
10             <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=utf8</property>
11 <!--         <property name="hibernate.connection.url"><![CDATA[jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8]]></property> -->            
12             <property name="hibernate.connection.username">root</property>
13             <property name="hibernate.connection.password">root</property>
14             <!--配置hibernate方言  -->
15             <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16             <!--打印sql -->
17             <property name="hibernate.show_sql">true</property>
18             <!-- 格式化sql -->
19             <property name="hibernate.format_sql">true</property>
20             <!-- 自动创建表 -->
21             <property name="hibernate.hbm2ddl.auto">update</property>
22             
23             <!-- 配置C3P0连接池 -->
24         <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
25         <!--在连接池中可用的数据库连接的最少数目 -->
26         <property name="c3p0.min_size">5</property>
27         <!--在连接池中所有数据库连接的最大数目  -->
28         <property name="c3p0.max_size">20</property>
29         <!--设定数据库连接的过期时间,以秒为单位,
30         如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
31         <property name="c3p0.timeout">120</property>
32          <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
33         <property name="c3p0.idle_test_period">3000</property>
34             
35             <!-- 设置事物隔离级别  -->
36             <property name="hibernate.connecton.isolation">8</property>
37             <!-- 设置当前线程绑定session  -->
38             <property name="hibernate.current_session_context_class">thread</property>
39             <!-- 记载配置文件 -->这里一定要配置好,不然找不到实体类对象映射文件
40             <mapping resource="com/gream/Cstomer.hbm.xml" />
41             
42         </session-factory>
43     </hibernate-configuration>

测试代码

 1 package com.gream;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.hibernate.Transaction;
 6 import org.hibernate.cfg.Configuration;
 7 import org.junit.Test;
 8 
 9 public class Demo01 
10     
11     @Test
12     public static void main(String[] args) 
13         // TODO Auto-generated method stub
14         //保存客户案例
15         //1、加载hibernate核心配置文件
16         Configuration cg = new Configuration().configure();
17         //2、创建sessionfactory对象,类似jdbc
18         SessionFactory sf = cg.buildSessionFactory();    
19         //3、通过sessionfactory获取session对象,类似jdbc中connection
20         Session session = sf.openSession();
21         //4、开启事物
22         Transaction tt = session.beginTransaction();
23         //5、编写代码
24         Cstomer co = new Cstomer();
25         co.setCust_name("王2");
26         //保存
27         session.save(co);
28         //事物提交
29         tt.commit();
30         session.close();
31     
32 
33 

 

 Hibernate的映射的配置

实体类对象映射的配置

class标签的配置】

标签用来建立类与表的映射关系

 属性:

name :类的全路径

table :表名(类名与表名一致,table可以省略)

catalog :数据库名

id标签的配置】

标签用来建立类中的属性与表中的主键的对应关系

 属性:

name :类中的属性名

column :表中的字段名(类中的属性名和表中的字段名如果一致,column可以省略)

length :长度

type :类型

property标签的配置】

标签用来建立类中的普通属性与表的字段的对应关系

属性:

name :类中的属性名

column :表中的字段名

length :长度

type :类型

not-null :设置非空

unique :设置唯一

 

核心文件的配置

必须的配置

连接数据库的基本的参数:

驱动类

url路径

用户名

密码

方言

可选的配置

显示SQL hibernate.show_sql

格式化SQL hibernate.format_sql

自动建表 hibernate.hbm2ddl.auto

none :不使用hibernate的自动建表

create :如果数据库中已经有表,删除原有表,重新创建,如果没有表,新建表。(测试)

create-drop :如果数据库中已经有表,删除原有表,执行操作,删除这个表。如果没有表,新建一个,使用完了删除该表。(测试)

update:如果数据库中有表,使用原有表,如果没有表,创建新表(更新表结构)

validate:如果没有表,不会创建表。只会使用数据库中原有的表。(校验映射和表结构)。

映射文件的引入

引入映射文件的位置,位置写全

 <mapping resource="com/gream/Cstomer.hbm.xml" />



核心API

Configuration:加载核心配置

2种加载方法:

1、加载hibernate核心配置文件
Configuration cg = new Configuration().configure();

 2、手动加载映射

configuration.addResource("com/itheima/hibernate/demo1/Customer.hbm.xml");

 SessionFactorySession工厂

 

SessionFactory内部维护了Hibernate的连接池和Hibernate的二级缓存(不讲)。是线程安全的对象。一个项目创建一个对象即可

 

 

创建sessionfactory对象,类似jdbc
SessionFactory sf = cg.buildSessionFactory();

 

Session:类似Connection对象是连接对象

 

Session代表的是Hibernate与数据库的链接对象。不是线程安全的。与数据库交互桥梁。

 

Session中的API

 

 保存方法:

 

Serializable save(Object obj);

 

查询方法:

 

T get(Class c,Serializable id);

 

T load(Class c,Serializable id);

get和load方法的区别:

get是立即执行,返回数据,当他查不到对象的时候返回null。load是懒执行,只有到最后提交事务的事务才会执行,当他查不到对象的时候报异常。

修改方法:

void update(Object obj);

技术图片

 

 删除方法:

void delete(Object obj);

技术图片

 

 

保存或更新

void saveOrUpdate(Object obj);

技术图片

查询所有

技术图片

 

以上是关于Hibernate学习基本配置的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate框架学习之注解配置关系映射

小白学习之Hibernate 学习总结

hibernate框架学习之核心配置文件

hibernate框架学习之核心API

思考记录

SSH进阶之路Hibernate基本原理