Hibernate(jdbc冬眠—数据库细节看不到了)数据层框架
一、基本配置
二、建表
三、实现增删改查
1.创建JUnit Test Cate
2.写增删改查方法
a.创建对象,传递参数
b.读取配置文件
c.创建session工厂对象,创建session对象
d.创建session对象,添加事务处理Transaction:
开启事务-增删改查-事务提交-事务回滚-关闭
查看sql语句,hibernate.cfg.xml配置文件增加属性,show_sql,format_sql
四、ORM(Object/Relation Mapping)对象/关系 映射
Hibernate
优点:
提高了开发效率
使开发更具对象化
使应用具有可移植性
轻量级框架,无需继承任何父类,无侵入性
缺点:
不使用数据库的特性语句,使调优困难
不适用于大批量的数据更新
不适用于大量的统计查询
Hibernate的基本组件
Hibernate的核心接口
Hibernate的对象
1.Configuration类负责配置
a.XML文件(hibernate.cfg.xml)3.0
Configuration cfg=new Configuration().configure();
b.属性文件(hibernate.properties)
Configuration cfg=new Configuration();
2.SchemaExport(输出设计表)
SchemaExport export=new SchemaExport(cfg);
export.create(true,true);是否显示sql语句,是否覆盖原来的内容
3.SessionFactory(会话工厂)
SessionFactory factory=cfg.buildSessionFactory();
4.Session代表应用与数据库系统的一次操作
Session session=factory.openSession();
session.close();
5.Transaction事务
五、基本映射
vo类映射文件
表名table
字段column 长度length
字段唯一not-null=”true”
字段不为空unique=”true”
六、主键映射
generator主键生成策略
七、持久化对象的生命周期
新建HibernateUtil工具类优化代码
瞬时状态,持久状态,脱管状态
八、get和load
get任何情况都会发sql语句
load用到对象才会发sql语句
load支持lazy loading延迟加载
企业中,应用服务器与数据服务器是分离的在不同的机器中,跨机器操作开销很大,用load节省资源
九、many2one
User实体类加属性:private Company company;
User配置文件加属性:<many-to-one name=”company” column=”com_id” cascade=”save-update”/>
级联:保存用户信息,顺便保存公司信息
(级联的四个属性:save-update,delete,all,none)
Test类中加company属性
十、one2many
Company类添加Set<User> users属性
Company配置文件加属性:
<set name=”users”/>属性
<key column=”com_id”/>字段
<one-to-many class=”vo/User”/>类
保存班级信息,先保存学生信息,防止瞬时状态异常
用for(User u:Users){}输出学生信息
(一对多效率比较低,可以添加翻转属性inverse=”true”,由学生类控制维护,相当于转换成多对一)
十一、many2many
十二、查询机制
标准化对象查询(Criteria Query)×很少
Hibernate查询语言(Hibernate Query Language,HQL)用得最多
Native SQL Queries(原生SQL查询)
HQL支持所有的关系数据库操作
连接(Joins,包括inner/outer/full joins)
投影(Projection)
聚合(Aggregation,如max,sum)和分组(Group)
排序(Ordering)
子查询(Subqueries)
调用原生SQL函数(SQL function calls)
HQL分页查询
List students=session.createQuery(“from Student”)
.setFirstResult(1) //起始记录位置,从0开始计数
.setMaxResults(2) //返回的记录个数
.list();
update与delette
update:
Query query =session.createQuery
(“update Student set name=’zhang’ where name=’Zhang’ ”);
query.executeUpdate();
delete:
session.createQuery(“delete Student where name=’Zhang’ ”).executeUpdate();
只支持insert into…select…形式,不支持insert into…values…形式
原生SQL查询
session.createSQLQuery(“selete *from t_student”).list();
返回List<Object[]>
十三、一级缓存
在一个session内,打开与关闭之间来查。用得比较少,效率低。
十四、二级缓存
跨session的缓存
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123