【hibernate-笔记】

//1 创建,调用空参构造
Configuration conf = new Configuration().configure();
//2 根据配置信息,创建 SessionFactory对象
SessionFactory sf = conf.buildSessionFactory();

Session session = sf.openSession();//每次open session 获取的都不是同一个对象

Session session = sf.getCurrentSession();//同一个线程绑定的session是一个对象

// 控制事务
Transaction tx = session.beginTransaction();

session.save(object); //持久化状态

tx.commit();
session.close();

hibernate 主键自增策略下插入操作会先执行select count(*) 操作来获取最大的id值,用来获取插入本次save的主键

hibernate 的一级缓存机制

HQL:

String hql = " from Stu"; // 查询所有Customer对象

Query query = session.createQuery(hql);

List<Student> list = query.list(); // 返回list结果

query.uniqueResult();//接收唯一的查询结果

条件查询:

//HQL语句中,不可能出现任何数据库相关的信息的
// >        gt
// >        = ge
// <        lt
// <=        le
// ==        eq
// !=       ne
// in        in
// between and   between
// like       like
// is not null        isNotNull
// is null              isNull
// or       or
// and      and

Student criteria = session.createCriteria(Student.class);

//执行查询获得结果

List<Student> list = criteria.list();

//添加查询参数 => 查询cust_id为1的Stu对象
criteria.add(Restrictions.eq("stu_id", 1l));

Stu s = (Student) criteria.uniqueResult();

//创建criteria查询对象
Criteria criteria = session.createCriteria(Student.class);
//设置分页信息 limit ?,?
criteria.setFirstResult(1);
criteria.setMaxResults(2);
//执行查询
List<Srudent> list = criteria.list();

//查询总数

//创建criteria查询对象
Criteria criteria = session.createCriteria(Student.class);
//设置查询的聚合函数 => 总行数
criteria.setProjection(Projections.rowCount());
//执行查询
Long count = (Long) criteria.uniqueResult();

sql:

SQLQuery query = session.createSQLQuery("select * from stu");
List<Object[]> list = query.list();

SQLQuery query = session.createSQLQuery("select * from stu");

//指定将结果集封装到哪个对象中
query.addEntity(Student.class);
// 调用方法查询结果
List<Student> list = query.list();

//创建sql查询对象
SQLQuery query = session.createSQLQuery("select * from stu where stu_id = ?");
query.setParameter(0, 1l);
//指定将结果集封装到哪个对象中
query.addEntity(Student.class);
//调用方法查询结果
List<Studnet> list = query.list();

//创建sql查询对象
SQLQuery query = session.createSQLQuery("select * from stu limit ?,? ");
query.setParameter(0, 0);
query.setParameter(1, 1);
//指定将结果集封装到哪个对象中
query.addEntity(Student.class);
//调用方法查询结果
List<Studnet> list = query.list();

时间: 2024-10-27 11:42:39

【hibernate-笔记】的相关文章

Hibernate笔记①--myeclipse制动配置hibernate

Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. Hibernate笔记①--myeclipse制动配置hibernate

学习hibernate笔记

以前学习java的时候,一开始就学习了hibernate,那时候总觉得ssh非常高大上,所以就急忙看了下相关视频.不过因为实际需要不高,所以后来一直没有使用上hibernate组件.现在一年过去了,也疯狂学习了java一段时间了,做过几个不大的项目,但是总算对java有些了解.现在参加了工作,公司使用的就是ssh,所以这两天又重新开始捣鼓hibernate.这次学习直接使用editplus,直接开发.看了官网的demo,发现英语也没有想象中那么困难.哈哈,把自己的学习记录下来吧.这里主要记录三个

框架Hibernate笔记系列 基础 Session One

标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC来access DB,我们要先连接数据库,然后与数据库交互,然后关闭连接.使用了Hibernate之后,它实现了对JDBC的封装.跟数据库建立连接和关闭连接都由Hibernate来管理,我们只要写交互代码就可以了. 目前,使用mybatis的比较多.原因在于使用Hibernate效率不高.(In t

Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

本笔记继续使用dept部门表,emp员工表,一对多多对一双向映射. 1 条件查询 1.1    查询 员工表emp中 年龄eage小于30,月薪esal大于20000的员工姓名ename sql:select ename from emp where eage<? and esal >?; hql: select ename from Emp where eage<? and esal >? 1.2 问号的设置与别名 问号(?)的设置使用.setParameter(位置, 属性值)

Hibernate笔记3--多表操作-导航查询

一.一对多操作 1.构造实体类及编写配置文件:     一方: 1 // 一个Customer对应多个linkman 2 private Set<Linkman> linkmans = new HashSet<>(0); 配置: 1 <!-- inverse="true"代表放弃外键维护权 --> 2 <set name="linkmans" inverse="true"> 3 <!-- 配置

hibernate笔记(四)

目标: 一.hibernate查询 二.hibernate对连接池的支持 三.二级缓存 一.hibernate查询 1. 查询概述 1) Get/load主键查询 2) 对象导航查询 3) HQL查询,  Hibernate Query language                  hibernate 提供的面向对象的查询语言. 4) Criteria 查询,   完全面向对象的查询(Query By Criteria  ,QBC) 5) SQLQuery, 本地SQL查询 缺点:不能跨数

Hibernate笔记(一):入门

Hibernate简介 hibernate是面向java开发环境的对象/关系映射工具,用于把对象关系模型表示的对象映射到基于SQL的关系模型的数据结构中.hibernate还提供数据查询和数据获取的方法,可以大幅减少开发时人工使用SQL和JDBC处理数据的时间. hibernate入门demo 1. 开发环境的搭建: 1)导包:hibernate核心jar包 + 数据库连接池c3p0包 + MySQL数据库驱动jar包 2)编写hibernate的配置信息文件:hibernate.cfg.xml

Hibernate笔记②--hibernate类生成表、id生成策略、级联设置、继承映射

一.多表的一个关联关系 老师和学生是一对多的关系 student:tid属性 外键约束 对应teacher表中的id属性 teacher:id 在myeclipse的db窗口中选中两个表来生成类. ? 写一个CRUD //老师和学生实体保存 ????public void save(){ ????????Teacher t=new Teacher(); ????????t.setName("彭老师"); ???????? ????????Student s1=new Student()

hibernate笔记(二)

目标: 关联映射(hibernate映射) 1. 集合映射 2. 一对多与多对一映射 (重点) 3. 多对多映射 4. inverse/lazy/cascade 1. 集合映射 开发流程: 需求分析/数据库设计.项目设计/ 编码/测试/实施部署上线/验收 需求: 用户购买, 填写地址! 数据库: 代码: // javabean设计 public class User { private int userId; private String userName; // 一个用户,对应的多个地址 pr

hibernate笔记--基于主键的单(双)向的一对一映射关系

上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一映射关系应该这样配置: 新建一个IdCard实体类: public class IdCard { private int id; private String code; private Person p