欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hibernate笔记1

程序员文章站 2022-06-24 11:26:53
hibernate简介 ORM框架 对象关系映射(Object Relational Mapping,简称ORM) 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 Object :对象,java对象,此处特指JavaBean对象 Relational:关系,二维表,数据库中的 ......
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方法的区别

Hibernate笔记1

Hibernate笔记1

query查询对象

hql