Hibernate的基本API的用法
来源:互联网 发布:vb前景色怎么设置 编辑:程序博客网 时间:2024/04/28 03:53
1、Configuration 配置对象
Configuration对象就是用来读取配置文件和orm映射文件的!
hibernate.cfg.xml 通常使用xml配置文件,可以配置内容更丰富。
hibernate.properties用于配置key/value 形式的内容,key不能重复的。配置有很多的局限性。一般不用。
1.提供构造 new Configuration() hibernate将自动加载 hibernate.properties文件
hibernate.properties文件必须存放在类路径(src)下。
2.提供方法 configure()将加载src下的hibernate.cfg.xml
3.扩展api
configure(String)加载指定目录下的 xml文件
4.手动加载配置文件
// 手动加载指定的配置文件
config.addResource("com/itheima/a_hello/User.hbm.xml");
// 手动加载指定类,对应的映射文件 User--> User.hbm.xml
config.addClass(User.class);
2、 SessionFactory工厂
SessionFactory相当于java web连接池,用于管理所有session
Session是Hibernate自己创建,放进工厂的。
所以程序员只需要关注如何创建工厂,和从工厂中取出Session对象就行了。
1、创建工厂 SessionFactory
1、需要configuration的配置信息
2、直接buildSessionFactory() 【然而这个方法已经过时了…】
3、获得Session【必须确保Session是同一个Session】
OpenSession:获得一个全新的Session对象 →一般测试的时候用这个
getCurruentSession 获得与当前线程绑定的Session对象,如果没有,就给你一个新的。→项目上线的时候用这个
特别的,使用getCurruentSession的时候需要再xml里面配置一个property。
以后学Spring的时候可以不用thread绑定,现在学Hibernate就是用thread绑定。
框架的优点就在这里,它封装了ThreadLocal放在getCurruentSession里面。
事务是包裹业务的,所有的业务操作结束后才关闭事务(提交或回滚)
用了一个 ThreadLocal<connection>类,线程本地化,来保证一个业务里面的所有connection是同一个。
3、Session 会话
Session 相当于 JDBC的 Connection-- 会话
【Hibernate中必须需要主键。它是通过主键来区别对象的。】
1、演示面向对象的增
只需要用setName这样的属性操作,然后用session.save(),然后关闭资源(session和factory都要关闭)即可。其他的sql语句之类的不用管。
2、查询
使用get方法。
3、修改【主要需要用tansaction事务来操作,这样可以及时修改】
必须先查询出要修改的对象,再进行修改。
4、删除
根据id删除。【这里只要set对象的主键就行了。】
5、查询【非常重要!】
1、get方法(上面演示过了):get方法被调用时,立刻发送sql语句查询。
2、load方法【代理对象原理】:调用laod的时候并没有查询数据,只有当我们需要使用该对象的时候,才查询数据。【延迟加载,提高Hibernate的执行效率】
3.1、查询所有对象 HQL语言
使用HQL查询,Hibernate Query Language,是一个面向对象的查询语言。
“from 类名”就是查询所有结果。
3.2还有一个是session.createCriteria方法:
它是Hibernate独创的面向对象的查询,特点是无语句查询。
3.3 支持原生的sql查询(这里不是面向对象的查询,所有list的泛型不能乱写了)
这里的打印不能再用syso了,必须用for循环打印,因为这个是用obeject封装数据信息的。
这里再使用query.addEntity方法将查询的结果封装到指定对象中。
SQLQueryquery=session.createSQLQuery(“select * from t_user”);
Query.addEntity(User.class);
List<User>list=query.list();
Syso(List);
4、Transaction 事务
开启事务beginTransaction()
获得事务getTransaction()
提交事务:commit()
回滚事务:rollback()
事务的基本操作://1加载配置Configuration conf = new Configuration().configure();//2 根据Configuration 配置信息创建 SessionFactorySessionFactory sf = conf.buildSessionFactory();//3 获得sessionSession session = sf.openSession();//-------------------------------//打开事务Transaction ts = session.beginTransaction();//获得已经打开的事务对象(很少用)session.getTransaction();//Transaction 控制如何关闭事务//提交ts.commit();//回滚ts.rollback();//-------------------------------session.close();sf.close();事务的细节:【重点!!!】//1加载配置Configuration conf = new Configuration().configure();//2 根据Configuration 配置信息创建 SessionFactorySessionFactory sf = conf.buildSessionFactory();//3 获得与当前线程绑定的sessionSession session = sf.getCurrentSession();//-------------------------------//事务关闭时,会自动把与当前线程关联的session关闭,并删除session.beginTransaction().commit();//在获得当前线程绑定的session时. 获得的是新的sessionSession session2 = sf.getCurrentSession();System.out.println(session==session2);//false//-------------------------------session.close();sf.close();
5、 Query对象
Query封装查询细节。
Query.list():执行hql语句,当返回结果是多行的情况,用这个。
Query.uniqueResult():只返回一个对象
分页:mysql用了limit idex,count。
Hibernate用了↓,查询结果用list接收,打印。
//指定结果从第几个开始拿
query.setFirstResult(0);
//指定拿几个结果
query.setMaxResults(2);
6、Criteria对象
这个方法用的不多,因为它有局限性,所以稍作了解即可。
//Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句Criteria criteria = session.createCriteria(User.class);// 查找name属性值为tom的 记录criteria.add(Restrictions.eq("name", "tom"));//返回一个查询结果User u = (User) criteria.uniqueResult();//Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句Criteria criteria = session.createCriteria(User.class);//查找名字中包含字母o的用户criteria.add(Restrictions.like("name", "%o%"));//返回一个查询结果List<User> list =criteria.list();System.out.println(list);//Criteria 查询 => Hibernate独创的面向对象的查询=> 无语句Criteria criteria = session.createCriteria(User.class);//查找id大于3的用户criteria.add(Restrictions.gt("id", 3));//返回一个查询结果List<User> list =criteria.list();System.out.println(list);
7、工具类
代码的重复性很强,所以封装成一个工具类就好了。
一次服务器开启期间,加载一次配置就好了。
Build相当于连接池,整个项目放一个连接池就够了。
所以这些都是进程级别的操作,所以应该放到static里面。
public class H3Utils {// 会话工厂,整个程序只有一份。private static SessionFactory factory;static{//1 加载配置Configuration config = new Configuration().configure();//2 获得工厂factory = config.buildSessionFactory();//3 关闭虚拟机时,释放SessionFactoryRuntime.getRuntime().addShutdownHook(new Thread(new Runnable() {@Overridepublic void run() {System.out.println("虚拟机关闭,释放资源");sf.close();}}));}/** * 获得一个新的session * @return */public static Session openSession(){return factory.openSession();}/** * 获得当前线程中绑定session * * 注意:必须配置 * @return */public static Session getCurrentSession(){return factory.getCurrentSession();}}
- Hibernate的基本API的用法
- JDBC API的基本用法
- hibernate inverse 的基本用法
- Hibernate的一些基本用法
- 【Hibernate】(1)Hibernate的基本用法
- Hibernate之HQL的基本用法
- 第5章 Hibernate的基本用法 5.2 Hibernate入门
- hibernate框架基本的作用及用法【1】
- Hibernate的在线API
- Hibernate 核心的API
- hibernate的常用api
- Hibernate:主要的API
- Hibernate的核心API
- Hibernate API的使用
- Hibernate的api使用
- Winsock基本的api
- 基本的osworkflow API
- 反射的基本API
- linux学习路线
- 古人的智慧之回文诗——《两相思》
- QT学习(六)QT之贪吃蛇
- caffe加自己的python形式的data出错问题总结
- 基础总结知识点-第二章:HTTP协议
- Hibernate的基本API的用法
- 量化投资学习【常见策略】海龟交易系统
- RAII和RTTI
- vb.net 教程 2-3 流程控制:循环语句 For...Next 2
- TCP/IP协议简述
- Linux第一次课笔记
- NoSQL入门概述
- java泛型和通配符
- ubuntu16.10+cuda8.0+cudnn+caffe+opencv3.2+anaconda2