zoukankan      html  css  js  c++  java
  • Hibernate第二天

    今天继续学习hibernate

    Hibernate中主要存在三大对象Configuration对象SessionFactory对象Session对象

    一.Configuration对象

    Configuration对象用于加载配置文件,使用Configuration对象中的configure()方法加载src下名为hibernate.cfg.xml文件,配置Hibernate,根启动Hibernate,创建SessionFactory对象。

    如果配置文件不符合默认加载规则,我们可以调用

    (1)new Configuration().configure(file);通过file加载

    (2)new Configuration().configure(path);通过path加载

    也可以使用Configuration对象加载映射文件(这种方式不推荐)

    >orm的映射文件与简单的类名一致

    >orm的映射文件需要与实体的类放在同一包下

    推荐hibernate.cfg.xml使用mapping属性导入映射文件

    加载核心配置文件代码:Configuration cfg=new Configuration().configure();

    二.SessionFactory对象

    可以根据Configuration的配置信息创建SessionFactory,SessionFactory创建Session,初始化Hibernate,充当数据存储源的代理,创建Session对象。

    SessionFactory sf=cfg.buildSessionFactory();

    三.Session对象

    Session对象是用于操作数据库的,负责保存、更新、删除、加载和查询对象。

    Session se=sf.openSession();//创建一个新的session对象,需要我们手动关闭Session

    getCurrentsession();//获取当前session对象

    获取当前session对象,需要将Session对象和线程进行绑定,只有在hibernate.cfg.xml中配置hibernate.current_session_context.class属性,才可以getCurrentSession。

    hibernate.cfg.xml:

    <property name="hibernate.current_session_context_class">thread</property>

    当开启了一个session对象时,同时新建两个session对象,并获取当前session对象赋值给两个新的对象,则这两个session对象相等。

    Session se1=sf.getCurrentSession();

    Session se2=sf.getCurrentSession();

    System.out.println(se1==se2);//true

    对数据库的增删改查的操作

    1.插入方法 对数据库的进行插入一条数据,可以调用Session中的save()方法,将一条数据插入数据库中

    Student stu=new Student();

    stu.setSno(1);

    stu.setSname("a");

    stu.setSgrade(1);

    Session.save(stu);

    2.对数据库的查询方法

    有五种方式进行查询

    方法一  get方法      get(对象的类名,id) 此方法被调用时,立刻发送sql语句进行查询

    Student s=(Student)se.get(Student.class,1);//获取id为1的Student表中的值

    System.out.println(s);

    方法二  load方法,被调用时,不立即查询,当我们需要使用该对象时才开始查询  

    Student s=(Student)se.load(Student.class,14);//获取id为14的Student表中的值

    System.out.println(s);

    方法三 HQL语句查询 createQuery传入HQL进行查询

    Query接口,封装HQL语句的对象,执行数据库查询

    Query中封装查询的细节api

    //查询所有的Student表中的数据

    Query query=se.createQuery("from com.zk.Student.Student");

    //查询结果

    List<Student> list=query.list();

    System.out.println(list);

    方法四 Criteria查询=>Hibernate独创的面向对象的查询=>无语句

    Criteria criteria=se.createCriteria(Student.class);

    List<Student> list=criteria.list();

    //返回查询一个结果

    //查询sno等于14的结果

    criteria.add(Restrictions.eq("sno",14));

    Student s=(Student)criteria.uniqueResult()

    System.out.println(s);

    //查询多个结果

    //查询sname中含有h的所有结果

    criteria.add(Restrictions.like("sname","%h%"));

    List<Student> l=criteria.list();

    System.out.println(l);

    //查询id大于1的用户

    //criteria与Query功能很像

    //> gt

    //< lt

    //= eq

    //<= le

    //>= ge

    //like

    //between

    criteria.add(Restrictions.gt("sno",1));

    List<Student> list=criteria.list();

    System.out.println(list);

    方法五:原生sql语句,原生sql语句不是面向对象的查询,所以list并不是Student的类型

    SQLQuery query=se.createQuery("select * from student where Sname='h'");

    //制定结果从第几个开始拿

    query.setFirstResult(0);

    //制定结果拿几个

    query.setMaxResults(1);

    //查询结果返回(方式一)

    query.addEntity(Student.class);

    List<Student> list=query.list();

    System.out.println(list);

    //查询结果返回(方式二)

    List<Object[]> list=query.list();

    for(Object[] obj:list){

    System.out.println(Arrays.toString(obj));

    }

    3.对数据库中数据进行修改的方法Update

    //首先获取id为1的对象

    Student stu=(Student)se.get(Student,1);

    //setXXX方法是数据库实体对象映射到Hibernate生成的Student类中的方法

    s.setSname("a");

    s.setSgrade(1);

    se.update(s);

    4.对数据库中的数据进行删除的操作delete

    Student  s=(Student)se.get(Student.class,1);

    se.delete(s);

    四.Transaction接口

    Transaction接口封装了对事物的操作,负责管理事务

    开启事务

    封装事务

    回滚事务

    Transaction tx=se.beginTransaction();

    当session执行完对数据库的增删改查的操作后,需要使用事务进行提交

    tx.commit();

    在所有操作完成之后,关闭session资源,并且关闭sessionFactory

    se.close();

    sf.close();

    至此,增删改查完成操作

  • 相关阅读:
    解决:微信小程序富文本识别不了空白p标签的方法
    微信小程序
    fastadmin
    微信小程序
    fastadmin使用笔记
    fastadmin使用笔记
    您有新的订单,请注意查收 提示音
    js获取视频第一帧生成图片
    解决JQ WeUI 的 Picker无法动态传值的问题
    微擎 人人商城小程序获取不到用户信息
  • 原文地址:https://www.cnblogs.com/longlyseul/p/9827223.html
Copyright © 2011-2022 走看看