Hibernate Api

|-- Configuration       配置管理类对象

config.configure();    加载主配置文件的方法(hibernate.cfg.xml)

默认加载src/hibernate.cfg.xml

config.configure(“cn/config/hibernate.cfg.xml”);   加载指定路径下指定名称的主配置文件

config.buildSessionFactory();   创建session的工厂对象

|-- SessionFactory     session的工厂(或者说代表了这个hibernate.cfg.xml配置文件)

sf.openSession();   创建一个sesison对象

sf.getCurrentSession();  创建session或取出session对象

|--Session       session对象维护了一个连接(Connection), 代表了与数据库连接的会话。

Hibernate最重要的对象: 只用使用hibernate与数据库操作,都用到这个对象

session.beginTransaction(); 开启一个事务; hibernate要求所有的与数据库的操作必须有事务的环境,否则报错!

更新:

session.save(obj);   保存一个对象

session.update(emp);  更新一个对象

session.saveOrUpdate(emp);  保存或者更新的方法:

à没有设置主键,执行保存;

à有设置主键,执行更新操作;

à如果设置主键不存在报错!

主键查询:

session.get(Employee.class, 1);    主键查询

session.load(Employee.class, 1);   主键查询 (支持懒加载)

HQL查询:

HQL查询与SQL查询区别:

SQL: (结构化查询语句)查询的是表以及字段;  不区分大小写。

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

查询的是对象以及对象的属性。

区分大小写。

Criteria查询:

完全面向对象的查询。

本地SQL查询:

复杂的查询,就要使用原生态的sql查询,也可以,就是本地sql查询的支持!

(缺点: 不能跨数据库平台!)

|-- Transaction    hibernate事务对象

共性问题1:

ClassNotFoundException…., 缺少jar文件!

问题2:

如果程序执行程序,hibernate也有生成sql语句,但数据没有结果影响。

问题一般是事务忘记提交…….

遇到问题,一定看错误提示!

Hibernate crud


public class EmployeeDaoImpl implements IEmployeeDao{

@Override

public Employee   findById(Serializable id) {

Session session = null;

Transaction tx = null;

try {

// 获取Session

session = HibernateUtils.getSession();

// 开启事务

tx = session.beginTransaction();

// 主键查询

return (Employee)   session.get(Employee.class, id);

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

@Override

public List<Employee>   getAll() {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

// HQL查询

Query q = session.createQuery("from Employee");

return q.list();

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

@Override

public List<Employee>   getAll(String employeeName) {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

Query q =session.createQuery("from Employee where empName=?");

// 注意:参数索引从0开始

q.setParameter(0, employeeName);

// 执行查询

return q.list();

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

@Override

public List<Employee> getAll(int index, int count) {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

Query q = session.createQuery("from Employee");

// 设置分页参数

q.setFirstResult(index);  // 查询的其实行

q.setMaxResults(count);   // 查询返回的行数

List<Employee> list = q.list();

return list;

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

@Override

public void save(Employee emp) {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

// 执行保存操作

session.save(emp);

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

@Override

public void update(Employee emp) {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

session.update(emp);

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

@Override

public void delete(Serializable id) {

Session session = null;

Transaction tx = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

// 先根据id查询对象,再判断删除

Object obj = session.get(Employee.class, id);

if (obj != null) {

session.delete(obj);

}

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tx.commit();

session.close();

}

}

}

时间: 2024-09-28 16:14:17

Hibernate Api的相关文章

Hibernate框架 初识 ORM概念 搭建Hibernate环境 Hibernate Api

ORM概念 在学习 Hibernate 之前,我们先来了解ORM   对象关系映射 O, Object  对象 R,Realtion 关系  (关系型数据库: MySQL, Oracle…) M,Mapping  映射 ORM, 解决什么问题? 存储:   能否把对象的数据直接保存到数据库? 获取:   能否直接从数据库拿到一个对象? 想做到上面2点,必须要有映射!   总结:          Hibernate与ORM的关系?             Hibernate是ORM的实现,简化对

(转)Hibernate框架基础——Hibernate API及Hibernate主配置文件

Hibernate的学习路线图 Hibernate API简介 Configuration Configuration类负责管理Hibernate的配置信息,包括如下内容: Hibernate运行的底层信息:数据库的URL.用户名.密码.JDBC驱动类,数据库Dialect,数据库连接池等(对应hibernate.cfg.xml文件). 持久化类与数据表的映射关系(*.hbm.xml文件). 创建Configuration的两种方式: 属性文件(hibernate.properties) Con

Hibernate初探之单表映射——通过Hibernate API编写访问数据库的代码

编写一个Hibernate例子 第五步:通过Hibernate API编写访问数据库的代码 初始化方法要实现以下功能: 原文地址:https://www.cnblogs.com/songsongblue/p/9523201.html

Hibernate API详解

hibernate体系结构 PO:persistent Object 持久对象,javabean+hbm.xml,习惯称呼为PO类 Configuration Configuration hibernate 提供用于存放所有配置信息对象 构造方法 new Configuration(),加载配置文件,hibernate.properties文件.但一般情况没有编写. 参考的配置文件:%h%project/etc/hibernate.properties  api config.configure

(四)Hibernate API详解

一.Configuration类 用来加载默认文件路径下的配置文件(hibernate.properties). 调用configure()方法会加载默认文件路径下的xml格式的配置文件(hibernate.cfg.xml)推荐使用. 如果配置文件在不默认文件路径下或者配置文件名不符合默认规则 可以使用 new Configuration().configure(file) 加载指定文件 new Configuration().configure(path) 加载指定路径下的文件 如果使用pro

通过Hibernate API编写访问数据库的代码

private Configuration config;// 1.声明私有配置对象类private ServiceRegistry serviceRegistry;// 2.声明私有服务注册对象类private SessionFactory sessionFactory;// 3.声明私有会话工厂对象类private Session session;// 4.声明私有会话对象类private Transaction transaction;// 5.声明私有事务对象类 @Beforepubli

Hibernate的Api以及三种查询方式

Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml config.configure("cn/config/hibernate.cfg.xml");   加载指定路径下指定名称的主配置文件 config.buildSessionFactory();   创建session的工厂对象 |--

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

—— —— hibernate常用API详解 —— ——

根据个人使用Hibernate的经验,介绍一下Hibernate的多种不同的查询和CUD操作,这些东西在日常开发中非常常用,希望对大家有所帮助. 以下示例均以两张表为例:member和userinfo,member帐号信息表外键关联userinfo用户基本信息表,主键自动生成即可 然后映射出的POJO如下: public class Userinfo  implements Serializable{ // primary key private java.lang.Integer id; //