面试-框架-hibernate
来源:互联网 发布:删除sql字段数据 编辑:程序博客网 时间:2024/06/06 01:48
1、为什么要使用hibernate开发项目?
优势1:封装了jdbc访问数据库的操作,大大减少了重复代码
优势2:很大程度的简化了dao层代码
优势3:支持各种数据库,支持一对一 一对多 多对多的复杂关系
优势4:对表的查询转换成对象的查询,多表联合查询非常方便
2、hibernate开发流程
Configuration conf=new Configuration().configure();// 读取配置文件 hibernate.cfg.xml SessionFactory sessionFactory=conf.buildSessionFactory();// 通过配置信息 建立会话工厂 Session session=sessionFactory.openSession();// 会话工厂 开启session会话对象 Transaction ts=session.beginTransaction();//开启事务 //操作.... ts.commit();//提交事务 session.close();//关闭session sessionFactory.close();//关闭session工厂
3、什么是延迟加载?
在真正需要数据的时候才进行数据的加载,避免一些没有必要的内存开销。
4、get和load的区别?
hibernate的get方法执行的时候,会确认一下该id的对象是否存在,先在session缓存中找,再在二级缓存中查找,如果没有则去数据库查找,如果没有,则返回null
hibernate的load方法执行时,判断lazy属性,如果是false,查找顺序与get一致,只是没有查到的时候,抛出异常ObjectNotFound,如果是true,则首先在session缓存中查找,如果不存在,则延迟加载,返回该对象的代理对象。等到具体使用的时候,再先从二级缓存中查找,再数据库查找,如果找不到,抛出异常ObjectNotFound
5、hibernate查询方式?
原生sql
session.createSQLQuery()
,Hql
session.createQuery()
命名查询
放在</class>后面 <query name="findEmpById"> <![CDATA[from Emp where * empno=?]]> </query> * * * <sql-query name="findEmpByIdSqlQuery"> <return alias="e" * class="entity.Emp"/> * <![CDATA[select {e.*} from emp e where empno=?]]> * </sql-query>session.getNamedQuery(name)
Criteria 复杂查询
6、hibernate分页查询
query.setFirstResult(start);起始行
query.setMaxResults(size);条数
criteria.setFirstResult(start);起始行
criteria.setFetchSize(size);条数
7、hibernate中对象的三种状态
瞬时态:
不在session缓存中,不与任何session相关联
不存在数据库记录中
持久态:
在session缓存中,与session相关联
存在数据库记录中
游离态:
不在session缓存中,不与任何session实例相关联
存在数据库记录中
8、inverse和cascade
<one-to-many>中,建议one 方inverse=”true”,由“many”方来进行关联关系的维护 <many-to-many>中,在任意一方设置inverse=true,另一方inverse=false。 Cascade,通常情况下都不会使用。特别是删除,一定要慎重
9、hibernate缓存
一级缓存session级别:同一个session,无需设置
二级缓存所有session:所有session,需要设置,保存在sessionFactory中
hibernate 3<property name="hibernate.cache.use_second_level_cache"> true </property> <!-- 设置二级缓存插件EHCache的Provider类--> <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property>
hibernate 4<property name="hibernate.cache.use_second_level_cache"> true </property> <!-- 设置二级缓存插件EHCache的Provider类--> <property name="hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.EhCacheRegionFactory </property>
查询缓存:
为Query的list准备,iterator没有效果。
// 查询缓存 /* * <property name="hibernate.cache.use_query_cache">true</property> * <property name="hibernate.cache.use_second_level_cache">true</property> * <!-- 设置二级缓存插件EHCache的Provider类--> * <property name="hibernate.cache.provider_class"> * org.hibernate.cache.EhCacheProvider </property> */ public static void chaxunhuancun() { Session session = getSessionFromUtil(); Query query = session.createQuery("from Emp where empno=7369"); query.setCacheable(true);// 开启查询缓存 query.list(); Session session2 = getSessionFromUtil(); Query query2 = session2.createQuery("from Emp where empno=7369"); query2.setCacheable(true); query2.list(); }
- 面试-框架-hibernate
- 三个框架面试之Hibernate
- 三大框架面试笔记-Hibernate
- Struts,Spring,Hibernate三大框架面试-笔试题
- Struts,Spring,Hibernate三大框架的面试
- Struts,Spring,Hibernate三大框架的面试 笔试题
- Struts,Spring,Hibernate三大框架的面试
- Struts,Spring,Hibernate三大框架面试参考
- Struts,Spring,Hibernate三大框架的面试
- 【面试之持久化框架】hibernate、mybatis、jpa规范
- hibernate面试
- Hibernate面试
- Hibernate面试
- Hibernate面试
- Hibernate面试
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- Java高级工程师面试题目汇集(关于Struts,Spring,Hibernate三大框架的面试)
- node服务器如何上传网络素材到微信服务器
- 错误,求大佬帮助
- Python常见用法
- C++数据结构之栈操作
- 日记—9.10
- 面试-框架-hibernate
- vue的 计算属性(computed)、methods、watched三者区别
- xlistview清单文件
- springmvc和struts2的区别
- 揭秘MySQL事务与锁的联系
- zookeeper学习之一
- leetcode 94. Binary Tree Inorder Traversal 二叉树中序递归遍历
- 深入理解JVM 系列JVM运行机制 JVM内存模(volatile,指令重排)
- spring 代码