Hibernate第二篇【API讲解、执行流程图】
前言
从上一篇中已经大致介绍了Hibernate并且有了一个快速入门案例的基础了,….本博文主要讲解Hibernate API
我们看看快速入门案例的代码用到了什么对象吧,然后一个一个讲解
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
配置管理类:主要管理配置文件的一个类
它拥有一个子类AnnotationConfiguration,也就是说:我们可以使用注解来代替XML配置文件来配置相对应的信息
configure方法
configure()方法用于加载配置文件
- 加载主配置文件的方法
- 如果指定参数,那么加载参数的路径配置文件
- 如果不指定参数,默认加载src/目录下的hibernate.cfg.xml
buildSessionFactory方法
buildSessionFactory()用于创建Session工厂
SessionFactory
SessionFactory–>Session的工厂,也可以说代表了hibernate.cfg.xml这个文件…hibernate.cfg.xml的就有<session-factory>这么一个节点
openSession方法
创建一个Session对象
getCurrentSession方法
创建Session对象或取出Session对象
Session
Session是Hibernate最重要的对象,Session维护了一个连接(Connection),只要使用Hibernate操作数据库,都需要用到Session对象
通常我们在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执行流程图
Hibernate第二篇【API讲解、执行流程图】的更多相关文章
- SSH框架之Hibernate第二篇
1.1 持久化类的编写规则 1.1.1 什么是持久化类? 持久化类 : 与表建立了映射关系的实体类,就可以称之为持久化类. 持久化类 = Java类 + 映射文件. 1.1.2 持久化类的编写规则 ( ...
- jsoncpp第二篇------API
更多API参考jsoncpp头文件 1 jsoncpp的api简要说明 1,解析(json字符串转为对象) std::string strDataJson; Json::Reader JReader ...
- Auty自动化测试框架第二篇——读取与执行脚本列表
[本文出自天外归云的博客园] 在Auty中的文件结构,lib目录下的read_selection.py和execute_selection.py文件:
- 第二篇 Nosql讲解之windows下memcache的安装(一)
memcached基本概念 1.Memcached是danga的一个项目,最早是LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用. 官方网站: ...
- hibernate系列笔记(2)---Hibernate的核心API
Hibernate的核心API 一般我们通过hibernate进行操作的时候,都会遵循下面的流程,那么接下来我对每一个步骤进行讲解: 1 public void testInsert() { 2 // ...
- hibernate框架(2)---Hibernate的核心API
Hibernate的核心API 一般我们通过hibernate进行操作的时候,都会遵循下面的流程,那么接下来我对每一个步骤进行讲解: 1 public void testInsert() { 2 // ...
- EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念
目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application ...
- ASP.NET Web API 控制器执行过程(一)
ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...
- 【OpenGL】第二篇 Hello OpenGL
---------------------------------------------------------------------------------------------------- ...
随机推荐
- 关于php文件读取的一些学习记录
初学PHP的时候使用了一些文件读取API,但是没有真正弄清楚各API的区别以及差异,于是找了一篇学习了一下,贴在这里,引用自IBM社区的一篇文章, 整体整理测试如下 <?php /** * Cr ...
- Cause: net.sf.cglib.beans.BulkBeanException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
2017-03-13 15:40:15,003 ERROR [com.hisense.hitv.service.dotexc.impl.DotExcPolicyServiceImpl.updateD ...
- nmon 使用
官网:http://nmon.sourceforge.net/pmwiki.php 步骤 1. 下载nmon到linux上: 2. 解压tar包,根据使用的linux版本选择使用的文件,并对其加上使用 ...
- 工作中git常用命令
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 16.0px; font: 14.0px "PingFang SC" } ...
- PyQt QFontDialog显示中文
QApplication 加载Translator app = QtWidgets.QApplication(sys.argv) translator = QtCore.QTranslator() i ...
- MySQL查询1
1.将下列语句复制到sqlyog的询问栏 /*!40101 SET NAMES utf8 */; create table `t_student` ( `id` double , `stuName` ...
- C语言排序
排序算法 快速排序 C语言快速排序qsort(数组,长度,元素大小,cmp函数(*,*))//注意函数cmp的参数为指针 #include <stdio.h> #include <s ...
- 【ASP.NET MVC】View与Controller之间传递数据
1 概述 本篇文章主要从操作上简要分析Controller<=>View之间相互传值,关于页面之间传值,如果感兴趣,可参考我另外一篇文章ASP.NET 页面之间传值的几种方式 . Co ...
- Eclipse注释模板设置方法
设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素 ...
- input[type="button"]与<button>的区别
<button>标签 浏览器支持 所有主流浏览器都支持<button>标签. 重要事项:如果在HTML表单中使用button元素,不同的浏览器会提交不同的值.IE将提交& ...