继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Hibernate框架技术视频课程

安卓软件程序开发入门学习
关注TA
已关注
手记 289
粉丝 49
获赞 282


一、查询操作

1. Hibernate支持多种查询方式

2.分类

主键查询、HQL查询、Criteria查询、原生SQL查询、命名查询、JDBC操作

导航查询(根据关联关系自动查询)

二、主键查询

1. get方法

Session的get()

2. load方法

Session的load()

三、HQL查询

1. 简介

1.1 概念

HQL:Hibernate Query Language,Hibernate查询语言

是一种面向对象的查询语句,其中没有表和列的概念,只有类、对象和属性的概念

1.2 优点

  • 不需要编写复杂的SQL语句,而是针对实体类和属性进行查询

  • 查询结果是直接返回的List对象集合,不需要再次封装

  • 独立于数据库,根据dialect自动生成对应数据库的SQL语句

2. 基本用法

2.1 语法

[select/update/delete 属性名]
from 类名
[where]
[group by]
[having]
[order by]

类似于sql,对应关系

SQLHQL
表名类名
列名属性名
select id,name,pwd,age from t_userselect id,username,password,age from User

2.2 使用HQL需要四步

  1. 获取Session

  2. 编写HQL语句

  3. 创建Query对象

    Query接口是HQL查询接口,提供了各种查询功能

  4. 执行查询,得到结果

Session session = HibernateUtil.getSession();// String hql="from User"; //实体类名,类名区分大小写// String hql = "from day01.User"; // 也可写成类的全名// String hql = "select * from User"; // 报错:此处不能使用*星号String hql = "select u from User u"; // 设置别名Query query = session.createQuery(hql);List<User> list = query.list();System.out.println(list);HibernateUtil.close();

3. 实体查询

  • 实体查询1:查询所有用户

  • 实体查询2:带条件

  • 实体查询3:单个实体

4. 投影查询

投影查询就是只查询类的一个或多个属性,并不获取对象的全部属性,也称为属性查询

有如下三种形式:

  • 查询单个属性,将每条查询结果封装成Object对象

  • 查询多个属性

    • 将每条查询结果封装成Object数组

    • 将每条查询结果封装成Map集合(了解)

  • 将每条查询结果通过构造函数封装成对象

5. 参数绑定

5.1 ?参数占位符

使用?作为占位符,可以先设定查询参数,然后通过Query的setXxx()方法设置参数值

下标从0开始,与PreparedStatement有所不同(从1开始)

5.2 命名参数

使用:name标识一个名为name的查询参数,然后根据此参数名设置参数值

5.3 bean参数

将参数封装为一个bean,然后通过Query的setProperties(Object bean)方法设置参数值

6. 分页和聚合函数

6.1 分页

Query对象提供了简便的分页方法:

  • setFirstResult(int firstResult) 设置从第几条开始

  • setMaxResults(int maxResults) 设置读取最大记录数据

Hibernate会根据底层数据库自动生成相应的分页语句

6.2 聚合函数

常用聚合函数:count()、max()、min()、avg()、sum()

子查询

分组查询:group by .... having

四、Criteria查询

1. 简介

Criteria查询是Hibernate提供的一种完全面向对象的查询,它用面向对象的方式将构造查询的过程做了封装,又称为对象查询

详见文档 第15章 条件查询 Criteria

2. 基本用法

Restriction类提供了许多静态方法,用来限定查询条件

五、原生SQL查询

1. 简介

Hibernate对原生SQL查询也提供了支持,也称为本地SQL查询

通过SQLQuery也支持原生SQL查询

addEntity()将查询结果集中的关系数据映射为对象

2. 基本用法

String sql="select * from t_user";SQLQuery query = session.createSQLQuery(sql);query.addEntity(User.class); //将查询结果集中的关系数据映射为对象List<User> list = query.list();System.out.println(list);

六、命名查询

1. 简介

命名查询是指在映射文件中定义字符串形式的查询语句,即将查询语句写在hbm映射文件中

命名查询既可以是HQL查询语句,也可以是SQL查询语句

2. HQL语句的命名查询

在映射文件中使用<query>元素定义一个HQL查询语句,与<class>元素并列

3. SQL语句的命名查询

在映射文件中使用<sql-query>元素定义一个SQL查询语句,与<class>元素并列

七、JDBC操作

1. 简介

在Hibernate4.x中可以使用Session的doWork()方法进行JDBC操作,会将Connection暴露出来

2. 基本用法

Session session = HibernateUtil.getSession();final List<User> list=new ArrayList<User>();session.doWork(new Work() {  @Override  public void execute(Connection conn) throws SQLException {    ResultSet rs = conn.prepareStatement("select * from t_user")      .executeQuery();    while (rs.next()) {      User user = new User(rs.getInt("id"), rs.getString("name"),                           rs.getString("pwd"), rs.getInt("age"));      list.add(user);    }  }});System.out.println(list);HibernateUtil.close();

八、其他

1.  更新操作

使用Query的executeUpdate()方法对数据进行更新操作:增、删、改

Session session = HibernateUtil.getSession();TransactionManager.beginTransaction();// String hql="delete from User where id in (2,3,5,7,20) and password='123'";String hql = "update User u  set u.password='666666' where u.username='alice'";Query query = session.createQuery(hql);int count = query.executeUpdate(); // 受影响的行数System.out.println(count);TransactionManager.commit();System.out.println("更新成功");HibernateUtil.close();

2. formula属性

该属性可以利用SQL动态的生成实体属性,将SQL执行结果映射到实体属性上

要求:

  • 实体要存在相应的属性

  • sql语句必须用小括号()包裹起来

  • 如果操作列名,必须为表起别名

<!--    该属性不对应数据库表中的某列,对应的是sql查询的结果   --><property name="count" formula="(select count(u.id) from t_user u)"></property>

九、作业

1. 任务

  • 创建部门表t_dept(id,name)及对应的实体类和hbm文件

  • 创建员工表t_emp(id,name,dept_id)及对应的实体类和hbm文件

  • 创建班级表t_class(id,name)及对应的实体类和hbm文件

  • 创建学生表t_student(id,name,class_id)及对应的实体类和hbm文件

2. 预习

多对一、一对多、多对多、一对一

继承、组件、JPA

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP