Hibernate 对象/关系映射框架
对jdbc进行轻量级封装
操纵数据库
java对象与对象之间的关系映射至数据库中表与表之间的关系
传统数据库面向过程方式:建立连接—操作数据—关闭连接
将数据库userTable表映射到java中UserTable对象,编程时
直接操作UserTable对象访问数据库
配置文件:hibernate.cfg.xml或hibernate.properties,完成
连接等配置信息
映射文件:*.hbm.xml,完成持久化对象。
hibernate会创建一个默认名为HibernateSessionfactory的工厂类
由它制造与数据库会话的Session对象
自动完成创建POJO对象类即为javaBean
Hibernate=JavaBean + JDBC
Hibernate主键生成策略,
Hibernate对id赋值:increment(自增)、uuid.hex(32)、uuid.string(16)
应用程序本身对id赋值:assigned
数据库对id赋值:native、identity
Session对象创建过程:
管理类Configuration—工厂类SessionFactory—Session实例
Hibernate核心接口:
Configuration、SessionFactory、Session、Transaction、Query
创建SessionFactory工厂类:
Configuration config=new Configuration().configure();
SessionFactory sessionFactory=config.buildSessionFactory();
其采用线程安全设计,可多线程并发调用。
创建Session实例:
Session session=sessionFactory.openSession();
(Session session=HibernateSessionFactory.getSession();)
拥有save、update、delete等方法,透明完成增删改查操作。
其是非线程安全的,只可有一个线程使用。
事务操作接口Transaction,进行事务操作
创建事务对象:
Transaction ts=sesssion.beginTransaction();
Query接口,执行HQL语句:
Query query=session.createQuery("from POJO where id=?");
Query.setParameter(0,"001");
//获得Object集合或Object数组集合
List list=query.list()
每一个Query实例对应一个查询对象
HQL(Hibernate Query Language)面向对象查询语言
查找所有的信息:
Session session=HibernateSessionFactory.getSession();//获得持久化对象
Transaction ts=session.beginTransaction();//创建事务对象
Query query=session.createQuery("from POJO");//拿到查询对象,
List list=query.list();//返回所有信息集合
ts.commit();//事务提交
HibernateSessionFactory.closeSession();//关闭session
……//遍历集合得到数据
查询单条信息:
Query query=session.createQuery("from POJO order by 字段名 desc");
query.setMaxResult(1);//设置最大检索数目为1
UserTable user=(UserTable)query.uniqueResult();//转载单个对象
查询满足条件的信息:
Query query=session.createQuery("from POJO where gender = 1");
List list=query.list();
查询范围内的信息:
Query query=session.createQuery("from POJO where(score between 80 and 90)and course in('value1','value2')");
List list=query.list();
查询符合比较结果的信息:
Query query=session.createQuery("from POJO where score>60 and name is not null");
List list=query.list();
查询字符匹配的信息:
Query query=session.createQuery("from POJO where course like '计算机%'");
List list=query.list();
分页查询:
Query query=session.createQuery("from POJO");
int pageNow=1;//设置当前显示页
int pageSize=5;//每页最大显示数
query.setFirstResult((pageNow-1)*pageSize);//设置开始查询的记录
query.setMaxResult(pageSize);
List list=query.list();
Hibernate关系映射略