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&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");
SessionFactory:Session工厂
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);
查询所有