一个开源的对象关系映射框架,对JDBC进行了轻量级封装,将pojo与数据库表创建映射关系,是一个全自动的ORM(Object Relation Mapping,对象关系映射,经过操做对象操做表)框架,能够自动生成sql语句,自动执行。java
能够根据映射自动建表web
HIbernate配置sql
Hibernate Configuration:Customer.hbm.xml数据库
class标签:创建类与表的映射关系缓存
属性:安全
id标签:创建类中的属性和表中主键对应关系session
property标签:普通属性和表中字段对应关系app
Hibernate核心配置:框架
必须配置:ide
可选配置:
编写测试类:
Configuration类:
Hibernate的配置对象,以及对它进行启动。定位映射文档,读取配置,建立SessionFactory对象。
做用:加载核心配置文件,加载映射文件
SessionFactory接口:
负责初始化Hibernate,建立Session对象,用到了工厂模式。
做用:内部维护了Hibernate链接池和Hibernate的二级缓存(不讲,通常用Redis替换)。线程安全的,一个项目建立一个对象就能够。
配置成c3p0链接池(了解):
工具类测试:
相似链接对象Connection,负责执行被持久化对象的CRUD操做,是与数据库交互的桥梁。
因为是非线程安全对象,因此不能定义成全局的,须要定义在方法内部,不然有线程安全问题。
Session中的API:
保存:Serializable save(obj)
查询:T get(Class c ,Serializable id) , T load(Class c ,Serializable id)
修改: void update(obj)
//直接建立对象进行修改,没有被set的属性会被置为null,不推荐
//先查询再修改(推荐方式)
删除:void delete(obj)
//直接建立对象进行删除
//先查询再删除(推荐方式,Hibernate下面有个级联删除,前提 是先查询再删除)
保存或更新:void saveOrUpdate(obj)
查询全部:
//接收HQL,Hibernate Query Language 面向对象的查询语言
Query query = session.createQuery("from Customer");
//接收sql
SQLQuery query2 = session.createSQLQuery("select * from cst_customer");
代码:
package com.Hidemo1; import java.util.Arrays; import java.util.List; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.HiUtils.HibernateUtils; /** * Hibernate入门 * */ public class HibernateDemo1 { @Test //保存客户的需求 public void demo1(){ //1 加载核心配置文件 Configuration configuration = new Configuration().configure(); //2 建立一个SessionFactory对象,至关于JDBC链接池 SessionFactory sessionFactory = configuration.buildSessionFactory(); //3 经过SessionFactory获取到Session对象:相似于JDBC重Connection Session session = sessionFactory.openSession(); //4 手动开启事务 Transaction transaction = session.beginTransaction(); //5 编写代码 Customer customer = new Customer(); customer.setCust_name("王可可"); session.save(customer); //6 事务提交 transaction.commit(); //7资源释放 session.close(); } @Test /* *Hibernate工具类测试 */ public void demo2(){ Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer customer = new Customer(); customer.setCust_name("工具类测试"); session.save(customer); tx.commit(); session.close(); } @Test /* * 查询操做 */ public void demo3(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //使用get方法 // Customer customer = session.get(Customer.class, 1l); //使用load方法查询 Customer customer = session.load(Customer.class, 1l); System.out.println(customer); transaction.commit(); session.close(); }
@Test /* * 修改操做 */ public void demo4(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //直接建立对象进行修改,没有被set的属性会被置为null,不推荐 /*Customer customer = new Customer(); customer.setCust_id(1l); customer.setCust_name("wangkeke"); session.update(customer);*/ //先查询再修改(推荐方式) Customer customer = session.get(Customer.class, 1l); customer.setCust_name("王改改"); session.update(customer); transaction.commit(); session.close(); }
@Test /* * 删除操做 */ public void demo5(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //直接建立对象进行删除,不推荐 /* Customer customer = new Customer(); customer.setCust_id(1l); session.delete(customer);*/ //先查询再删除(推荐方式) Customer customer = session.get(Customer.class, 2l); session.delete(customer); transaction.commit(); session.close(); }
@Test /* * 保存或者更新 */ public void demo6(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); Customer customer = new Customer(); customer.setCust_id(3l); customer.setCust_name("王改改"); session.saveOrUpdate(customer); transaction.commit(); session.close(); }
@Test /* * 查询全部 */ public void demo7(){ Session session = HibernateUtils.openSession(); Transaction transaction = session.beginTransaction(); //接收HQL,Hibernate Query Language 面向对象的查询语言 Query query = session.createQuery("from Customer"); List<Customer> list = query.list(); for (Customer customer : list) { System.out.println(customer); } //接收sql SQLQuery query2 = session.createSQLQuery("select * from cst_customer"); List<Object[]> list2 = query2.list(); for (Object[] objects : list2) { System.out.println(Arrays.toString(objects)); } transaction.commit(); session.close(); } }
Hibernate中管理事务的对象。
commit()
rollback()