Hibernate学习(一) Hibernate ORM(对象关系映射) 使用Hibernate操作数据库 Hibernate的运行实例 Hibernate查询操作 Hibernate的基本使用(HQL语句) where子句、占位符 命名参数、封装参数 聚合函数 分页、子查询

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询


Hibernate相当于对JDBC做了一层封装。

ORM:对象关系映射,更加方便的处理模型数据。一套标准的,简单的,易于被传递的,关于对象和关系的映射。

JDBC的缺点:

  • 开发效率低
  • 重复性工作多
  • 代码冗余(pstmt的setXX方法,方法参数冗余的getXX()方法,如果POJO的属性很多,代码增加)

一个开源的对象关系映射框架
对JDBC进行了非常轻量级的对象封装
将JavaBean对象和数据库的表建立对应关系。

Hiberntate的优势

Hibernate是一个优秀的Java持久化层解决方案。
是当今主流的对象——关系映射工具。
Hibernate简化了JDBC繁琐的编码。
Hibernate将数据库的连接信息都存放在配置文件中。

持久化

将程序中数据在瞬时状态和持久状态间转换的机制。

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

持久化层

JDBC就是一种持久化机制
将程序数据直接保存成文本文件也是持久化机制的一种实现。
在分层结构中,DAO层(数据访问层)也被称为持久化层。

持久化完成的操作

将对象保存到关系型数据库中,
将关系型数据库中的数据读取出来以对象的形式封装。

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询


ORM(对象关系映射)

ORM(Object Relational Mapping),对象关系映射。

  • 编写程序的时候,以面向对象的方式处理数据。
  • 保存数据的时候,却以关系型数据库的方式存储。

ORM解决方案包含下面四个部分:

  • 在持久化对象上执行基本增、删、改、查操作的API。
  • 用于对持久化对象或属性查询的一种语言或者API.
  • 用于实体关系映射的工具。
  • 能够与事务对象交互、执行检查、延迟加载以及其他优化功能。

使用Hibernate操作数据库

使用Hibernate操作数据库需要七个步骤

(1)读取并解析配置文件
Configuration conf = new Configuration().configure();
(2)读取并解析映射信息,创建SessionFactory
SessionFactory sf = conf.buildSessionFactory
(3)打开Session
Session session = sf.openSession();
(4)开始一个事物(增删改操作必须,查询操作可选)
Trabsaction tx = session.begin Transaction();
(5)数据库操作
session.save(user);
(6)提交事务
tran.commit();
(7)关闭Session
session.close();

增删改需要开启事物,查询不需要

添加操作:
/*      User user = new User();
        user.setName("aaa");
        user.setPwd("123");
        //5.数据库操作
        session.save(user);*/
更新数据:
/*      User user = new User();
        user.setId(3);
        user.setName("bbb");
        user.setPwd("sss");
        session.update(user);*/
删除操作:
    /*  User user = new User();
        user.setId(3);
        session.delete(user);*/
查询操作:
        User user=(User)session.get(User.class, 2);
        System.out.println(user);

Hibernate的运行实例

首先,将Jar包导入,lib文件导入根目录下。
然后右键,Build Path 添加进系统虚拟机运行文件之中。

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

然后,在包com.jredui.entity下,新建一个实体类User;并创建hibernate映射文件(User.hbm.xml)。

– package对应实体类的包 –>
– 每一个实体类对应一个hibernate映射文件 –>
– Mybatis每一个Dao层文件对应一个映射文件 –>

Hibernate的配置文件:
Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

Hibernate.cfg.xml配置文件配置数据库的连接信息等;

  • 用于配置数据库连接;
  • 运行时所需的各种属性;
  • 默认文件名为”hibernate.cfg.xml”

创建Hibernate配置文件
Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询


Hibernate查询操作

Hibernate支持两种主要的查询方式

HQL(Hibernate Query Language,Hibernate查询语言)查询;

是一种面向对象的查询语言,其中没有表和字段的概念。,只有类,对象和属性的概念。
HQL是应用较为广泛的方式

Criteria查询

又称为“对象查询”,它用面向对象的方式将构造查询的过程做了封装。

为什么使用HQL?

使用HQL可以避免使用JDBC查询的一些弊端;

  • 不需要再编写繁复的SQL语句,针对实体类机器属性进行查询
  • 查询结果是直接存放在List中的对象,不需要再次封装。
  • 独立于数据库,对不同的数据库根据Hibernate dialect属性的配置自动生成不同的SQL语句执行。

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

使用HQL需要四步

  • 得到Session
  • 编写HQL语句
  • 创建Query对象(Query接口是HQL查询接口,它提供了各种的查询功能;)
  • 执行查询,得到结果

设置别名(alias)

from Street as as === from Street s
s是Street的别名,通过as关键字指定,关键字as是可选的。

Hibernate的基本使用(HQL语句)

HQLTest.java
    @Test
    public void test() {
        //1.编写HQL语句
        String hql="from User";
        //2.创建Query对象
        Query query = session.createQuery(hql);
        //3.执行查询,得到结果
        List<User> list = query.list();
        System.out.println(list);
    }

where子句、占位符

where子句

where子句指定限定条件:
(通过与SQL相同的比较操作符指定条件)
如:

  • =、<>、<、>、>=、<=
  • between and、not between and
  • in、not in
  • is、like

(通过and、or等逻辑连接符组合各个逻辑表达式)
-
Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

占位符

?  占位符
  • 使用?作占位符,可以先设定查询参数
  • 通过setType()方法设置指定的参数
  • 必须保证每个占位符都设置了参数值
  • 必须依照?所设定顺序设定
  • 下标从0开始,而不是使用PrepareStatement对象时的从1开始

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询


命名参数、封装参数

命名参数

:name即命名参数
标识了一个名为“name”的查询参数
根据此参数进行参数值设定
不需要依照特定的顺序

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询
语法:

:参数名字
@Test
    public void test2(){
        //命名参数,语法     :参数名字
        String hql="select u.name from User u where u.id=:id";
        Query query = session.createQuery(hql);
        query.setParameter("id", 2);
        List<User> list=query.list();
        System.out.println(list);
    }

封装参数

  • 动态设置查询参数
  • 将参数封装为一个bean
@Test
    public void test3(){
        //封装参数
        String hql="select u.name from User u where 1=1";
        User user = new User();
        user.setId(1);
        if(user.getId()>0){
            hql+="and id=:id";
        }
        if(user.getName()!=null){
            hql+="and name=:name";
        }
        Query query=session.createQuery(hql);
        //传参
        query.setProperties(user);
        List<User> list = query.list();
        System.out.println(list);
    }

聚合函数

count():统计函数
max()和min():最大值和最小值函数
avg()和sum():平均值和求和函数

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询
排序:(默认升序:ASC 降序:DESC )

  • order by子句实现对查询结果的排序
  • 默认情况下按升序顺序排序
  • 排序策略(asc升序、desc降序)

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

分组

  • 通过group by子句实现
  • 并使用having子句对group by返回的结果集进行筛选

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询


分页、子查询

分页

Query对象提供了简便的分页方法
    setFirstResult(int firstResult)方法
        设置第一条记录的位置
    setMaxResults(int maxResults)方法
        设置最大返回的记录条数(pageSize)

Hibernate学习(一)
Hibernate
ORM(对象关系映射)
使用Hibernate操作数据库
Hibernate的运行实例
Hibernate查询操作
Hibernate的基本使用(HQL语句)
where子句、占位符
命名参数、封装参数
聚合函数
分页、子查询

子查询:

  • ·子查询是SQL中非常重要的功能
  • HQL同样支持此机制
  • Hibernate子查询必须用圆括号包围且必须出现在where子句中