当前位置: 移动技术网 > IT编程>开发语言>Java > Hibernate笔记1

Hibernate笔记1

2019年07月11日  | 移动技术网IT编程  | 我要评论
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方法的区别

img

img

query查询对象

hql

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网