Hibernate第二篇【API讲解、执行流程图】

前言

从上一篇中已经大体介绍了Hibernate而且有了一个快速入门案例的基础了,….本博文主要讲解Hibernate APIphp

咱们看看快速入门案例的代码用到了什么对象吧,而后一个一个讲解java

public static void main(String[] args) {

        //建立对象
        User user = new User();
        user.setPassword("123");
        user.setCellphone("122222");
        user.setUsername("nihao");

        //获取加载配置管理类
        Configuration configuration = new Configuration();

        //不给参数就默认加载hibernate.cfg.xml文件,
        configuration.configure();

        //建立Session工厂对象
        SessionFactory factory = configuration.buildSessionFactory();

        //获得Session对象
        Session session = factory.openSession();

        //使用Hibernate操做数据库,都要开启事务,获得事务对象
        Transaction transaction = session.getTransaction();

        //开启事务
        transaction.begin();

        //把对象添加到数据库中
        session.save(user);

        //提交事务
        transaction.commit();

        //关闭Session
        session.close();
    }

Configuration

配置管理类:主要管理配置文件的一个类sql

拥有一个子类AnnotationConfiguration,也就是说:咱们可使用注解来代替XML配置文件来配置相对应的信息数据库

这里写图片描述

configure方法

configure()方法用于加载配置文件markdown

  • 加载主配置文件的方法
    • 若是指定参数,那么加载参数的路径配置文件
    • 若是不指定参数,默认加载src/目录下的hibernate.cfg.xml

buildSessionFactory方法

buildSessionFactory()用于建立Session工厂session


SessionFactory

SessionFactory–>Session的工厂,也能够说表明了hibernate.cfg.xml这个文件…hibernate.cfg.xml的就有<session-factory>这么一个节点ui

openSession方法

建立一个Session对象spa

getCurrentSession方法

建立Session对象或取出Session对象hibernate


Session

Session是Hibernate最重要的对象,Session维护了一个链接(Connection),只要使用Hibernate操做数据库,都须要用到Session对象code

一般咱们在DAO层中都会有如下的方法,Session也为咱们提供了对应的方法来实现

public interface IEmployeeDao {

    void save(Employee emp);
    void update(Employee emp);
    Employee findById(Serializable id);
    List<Employee> getAll();
    List<Employee> getAll(String employeeName);
    List<Employee> getAll(int index, int count);
    void delete(Serializable id);

}

更新操做

咱们在快速入门中使用到了save(Objcet o)方法,调用了这个方法就把对象保存在数据库之中了。Session对象还提供着其余的方法来进行对数据库的更新

  • session.save(obj); 【保存一个对象】
  • session.update(obj); 【更新一个对象】
  • session.saveOrUpdate(obj); 【保存或者更新的方法】
    • 没有设置主键,执行保存;
    • 有设置主键,执行更新操做;
    • 若是设置主键不存在报错!

咱们来使用一下update()方法吧….既然是更新操做了,那么确定须要设置主键的,不设置主键,数据库怎么知道你要更新什么。将id为1的记录修改为以下:

user.setId(1);
        user.setPassword("qwer");
        user.setCellphone("1111");
        user.setUsername("zhongfucheng");

这里写图片描述


主键查询

经过主键来查询数据库的记录,从而返回一个JavaBean对象

  • session.get(javaBean.class, int id); 【传入对应的class和id就能够查询】
  • session.load(javaBean.class, int id); 【支持懒加载】

User重写toString()来看一下效果:

User user1 = (User) session.get(User.class, 1);
        System.out.println(user1);

这里写图片描述


HQL查询

HQL:hibernate query language 即hibernate提供的面向对象的查询语言

  • 查询的是对象以及对象的属性【它查询的是对象以及属性,所以是区分大小写的!】

SQL:Struct query language 结构化查询语言

  • 查询的是表以及列【不区分大小写】

HQL是面向对象的查询语言,能够用来查询所有的数据!

Query query = session.createQuery("FROM User");

        List list = query.list();
        System.out.println(list);

这里写图片描述

固然啦,它也能够传递参数进去查询

Query query = session.createQuery("FROM User WHERE id=?");

        //这里的?号是从0开始的,并不像JDBC从1开始的!
        query.setParameter(0, user.getId());

        List list = query.list();
        System.out.println(list);

这里写图片描述


QBC查询

QBC查询: query by criteria 彻底面向对象的查询

从上面的HQL查询,咱们就能够发现:HQL查询是须要SQL的基础的,由于仍是要写少部分的SQL代码….QBC查询就是彻底的面向对象查询…可是呢,咱们用得比较少

咱们来看一下怎么使用吧:

//建立关于user对象的criteria对象
        Criteria criteria = session.createCriteria(User.class);

        //添加条件
        criteria.add(Restrictions.eq("id", 1));

        //查询所有数据
        List list = criteria.list();
        System.out.println(list);

这里写图片描述


本地SQL查询

有的时候,若是SQL是很是复杂的,咱们不能靠HQL查询来实现功能的话,咱们就须要使用原生的SQL来进行复杂查询了!

可是呢,它有一个缺陷:它是不能跨平台的…所以咱们在主配置文件中已经配置了数据库的“方言“了。

咱们来简单使用一下把:

//将全部的记录封装成User对象存进List集合中
        SQLQuery sqlQuery = session.createSQLQuery("SELECT * FROM user").addEntity(User.class);

        List list = sqlQuery.list();

        System.out.println(list);

这里写图片描述

beginTransaction方法

开启事务,返回的是一个事务对象….Hibernate规定全部的数据库操做都必须在事务环境下进行,不然报错!


Hibernate执行流程图

这里写图片描述

相关文章
相关标签/搜索