Hibernate
1.hibnate是什么
1.Hibernate是一个开发源代码的对象关系映射框架(ORM);
2.对JDBC进行了轻量级的封装,可以将实体类和数据库中的表产生映射关系;
3.是一个全自动的ORM框架;hibernate能自动生成sql语句;
2.hibnate的概念
hibernate简要结构图,中间的hibernate.properties,可以让数据持久化,这里面我们换成***.cfg.xml,表与属性名对应
全面解决”的体系结构方案
3.Hibernate提供了5种检索对象的方式
1.导航对象图检索方式:根据已经加载的对象导航到其他对象
from Emp e group by e.dept.deptName 2.OID检索方式:按照对象的OID来检索对象 get/load 3.HQL检索方式:使用面向对象的HQL查询语言 from Student 4.QBC检索方式:使用QBC(Query By Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,\ 提供了更加面向对象的查询接口 5.本地SQL检索方式:使用本地数据库的SQL查询语句 createSqlQuery();1.2核心配置文件hibernate.cfg.xml
头文件
配置文件中的需要我们配置的重要内容:
01.连接数据库的四要素
02.管理各种hbm.xml映射文件
03.缓存的设置
04.是否显示sql语句
05.是否格式化sql语句
06.hbm2ddl的配置
3.1.关于核心API
1. Configuration 类
加载hibernate的核心配置文件,以及负责启动hibernate,创建SessionFactory对象
2. SessionFactory 接口
初始化Hibernate,是数据存储源的代理,负责创建Session对象!
一个项目中我们使用一个SessionFactory就足够了!
如果我们需要操作多个数据库时,建立每个数据库指定一个SessionFactory!
3. Session接口
负责执行持久化对象的CRUD操作!是线程不安全的!可以开启事务!创建Transaction对象!
Session ===>会话session
HttpSession ===>用户session
4. Transaction接口
针对于事务的操作!
5. Query接口
方便我们对数据库数据的查询,有两种方式来实现查询:
01.sql
02.hql
6. Criteria接口
和query接口非常相似!完全面向对象的思想去操作数据库!
2.Hibnate入门例子
让表中的属性名和数据库中的字段名一致,
2.1.创建hibernate,hbm.xml
?xml version="1.0"?>
2.2.创建实体类
public class teacher(){ private Intger Id;private String name;}
2.3创建hibnate.cfg.xml
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/t17 root true true update
注意要:
***.Hbm.xml一定要被**.cfg.xml管理!
建text测试类
public class TeacherTest { Transaction transaction=null; // 定义在这里 是为了 后续每个方法中使用 Session session=null; @Before public void before(){ //01.读取核心配置文件 configure()底层就是加载了/hibernate.cfg.xml Configuration configuration=new Configuration().configure(); //02.创建会话工厂 sessionFactory SessionFactory factory= configuration.buildSessionFactory(); //03.创建会话 session session=factory.openSession(); //04.开启事务 transaction = session.beginTransaction(); } @After public void after(){ //07.提交事务 transaction.commit(); // assigned 产生sql语句 //08.关闭会话 session.close(); } /** * 新增教师信息 */ @Test public void addTeacher(){ //05.创建新增的对象 Teacher teacher=new Teacher(); teacher.setId(1); teacher.setName("教师1"); //06.持久化操作 System.out.println("******************************"); session.save(teacher); //identity产生sql语句 System.out.println("******************************"); // factory.close(); }/** * 数据库有对应的数据产生2条sql * * 01.先根据对象的id 去数据库中查询 看有没有数据 * 02.如果存在根据id删除指定的信息 * 如果不存在 只做查询操作 */@Testpublic void deleteTeacher(){ //创建需要删除的对象 Teacher teacher=new Teacher(); teacher.setId(2); System.out.println("***********************"); //删除 session.delete(teacher); System.out.println("***********************");}@Testpublic void updateTeacher(){ //创建需要修改的对象 Teacher teacher=new Teacher(); teacher.setId(1); teacher.setName("小黑111"); System.out.println("***********************"); //修改 session.update(teacher); System.out.println("***********************");}
还有生成策略等,