Hibernate笔记1
hibernate简介
orm框架
对象关系映射(object relational mapping,简称orm)
是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
object :对象,java对象,此处特指javabean对象
relational:关系,二维表,数据库中的表
mapping:映射
什么是hibernat
hibernate是一个开放源代码的对象关系映射框架,他对jdbc进行了非常轻量级的对象封装
它将pojo与数据库表建立映射关系,是一个全自动的orm框架
pojo简单的java对象,实际就是普通javabeans
hibernate可以自动生成sql语句,自动执行,使得程序员可以随心所欲的使用对象编程思维来操作数据库
hibernate可以应用在任何使用jdbc的场合,既可以在java的客户端程序使用,也可以在servlet/jsp的应用中使用
hibernate的简单使用
读取配置文件hibernate.cfg.xml和hibernate.properties的方法
configuration cfg = new configuration();//读取配置文件hibernate.properties
configuration cfg = new configuration().configure();//读取配置文件hibernate.cfg.xml
添加表的映射文件方法:
1.在hibernate.cfg.xml中配置mapping
<!-- 2、配置javabean与表的映射文件 --> <mapping resource="com/xxxx/hibernate/domain/user.hbm.xml"/>
2.调用configuration对象addresource
cfg.addresource("com/xxxx/hibernate/domain/user.hbm.xml");
3.调用configuration对象的addclass方法
cfg.addclass(user.class);
sessionfactory
session作用:用于操作数据库,从sessionfactory中获取
sessionfactory相当于java web连接池,用于管理所有session
获得sessionfactory 方式:config.buildsessionfactory();
sessionfactory 还用于缓存配置信息(数据库配置信息,映射文件,预定义的hql语句)
sessionfactory线程安全,多个线程同时访问时,不会出现线程并发访问问题
session会话的获取
factory.opensession() 获取一个全新的session
factory.getcurrentsession() 获取一个与当前线程绑定的session
要开启当前线程绑定的session需要在hibernate.cfg.xml中配置
<property name="hibernate.current_session_context_class">thread</property>
public void test1(){ //保存用户数据 //1.获取核心 配置文件对象,默认是加载src的hibernate.cfg.xm文件 configuration cfg = new configuration().configure(); //2.创建会话工厂 sessionfactory factory = cfg.buildsessionfactory(); //获取session对象 session session1 = factory.opensession(); session session2 = factory.opensession(); system.out.println(session1.hashcode()); system.out.println(session2.hashcode()); //获取当前线程 session session3 = factory.getcurrentsession(); session session4 = factory.getcurrentsession(); system.out.println(session3.hashcode()); system.out.println(session4.hashcode()); //2005169944 //2134607032 //1278677872 //1278677872
注意:如果通过opensession方法session要自己关闭,通过getcurrentsession方法获取session,会自动关闭
session的api
save 保存 get通过id查询,如果没有 null load 通过id查询,没有抛出异常 update更新 delete删除
@test public void test1(){ //获取配置文件对象 configuration cfg = new configuration().configure(); //创建会话工厂 sessionfactory factory = cfg.buildsessionfactory(); //获取session对象 session session = factory.opensession(); //get方法 user user = (user)session.get(user.class, 4);//会寻找user对应的表,获取id为4的数据 system.out.println(user); session.close(); factory.close(); }
public void test1(){ //获取配置文件对象 configuration cfg = new configuration().configure(); //创建会话工厂 sessionfactory factory = cfg.buildsessionfactory(); //获取session对象 session session = factory.opensession(); //开启事务 session.gettransaction().begin(); //delete删除数据的两种方式 //第一种:先获取删除对象,然后在调用delete方法 //user user = (user)session.get(user.class, 4);//会寻找user对应的表,获取id为4的数据 //session.delete(user); //第二种方式:创建一个user.设置id.然后在动用delete //user user = new user(); //user.setuid(3); //session.delete(user); //session的update 更新数据两种方式 //第一种:先获取数据,调用set方法,事务提交 //user user = (user)session.get(user.class, 2); //user.setpassword("789"); //第二种: user user = new user(); //user.setuid(1); user.setusername("古娜力扎"); user.setpassword("12345"); session.saveorupdate(user);//如果有id就会更新id的数据,执行update语句,没有id就会插入数据执行insert语句 session.gettransaction().commit(); session.close(); factory.close(); }
get和load方法的区别
query查询对象
hql
上一篇: spring boot定义错误界面