Hibernate实体规则

1.持久化类提供无参数构造

2.成员变量私有,提供getset访问,提供实行

3.持久化类属性,尽量使用包装类型

4.持久化类需要提供oid与数据库中的主键列对应

5.不要使用final修饰class

实体类创建的注意事项

主键类型:

  自然主键(少见):表的业务列中,有某项业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用

  代理主键(常见):创建一个无意义的列作为主键

主键生成策略:

<!-- generator 主键生成策略
identity:主键自增,由数据库来维护主键值,录入时不需要指定主键
increment(不用):主键自增,由hibernate来维护,每次插入会先查询表中最大值,+1做为主键值(多人同时插入时会导致数据丢失)
sequence:Oracle中的主键生成策略
hilo:高低位算法,数据库属性自增的算法,由hibernate来维护,与increment不一样,这个hilo算法能够保证数据库主键永远不一样
   native:hilo+sequence+identity三选一策略,检测到非oracle支持主键自增,那选择identity,检测到是oracle,选择sequence
自增的方法,hilo遇到不支持自增不支持sequence,市面目前没有这种数据库uuid:产生一个随机字符串作为主键 -->

<generator class="native">
</generator>

对象状态:

  对象分为三种状态:

    瞬时状态:没有id,没有与session关联

    持久化状态:有id,与session有关联

    托管状态:有id,没有与session关联

  

package com.littlepage.state;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.littlepage.entity.Customer; public class Demo {
public static void main(String[] args) {
Configuration conf=new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction(); Customer cus=new Customer();//没有id,没有与session关联=瞬时状态
cus.setName("Poly");//瞬时
cus.setAge();
session.save(cus);//持久化状态
tx.commit();
session.close();//游离状态
sf.close();
}
}

瞬时-->持久化-->托管

状态流程

进阶-一级缓存:

一级缓存提高数据库操作的效率。

缓存:暂时存储在内存上。第一次接触是在IO流里面,缓存的目的是为了提高效率。(预加载)

HQL查询语句:

     Configuration conf=new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
//1.书写HQL语句
String hql="from Customer where age=15";//查询所有Customer对象
//2.根据HQL语句创建查询对象
Query query=session.createQuery(hql);
//3.返回list结果
List<Customer> list=query.list();
for (Customer customer : list) {
System.out.println(customer);
} tx.commit();
session.close();//游离状态
sf.close();
     ?占位符查询
     //1.书写HQL语句
String hql="from Customer where age=?";//查询所有Customer对象
//2.根据HQL语句创建查询对象
Query query=session.createQuery(hql);
//设置参数
query.setInteger(, );
     命名占位符查询
     //1.书写HQL语句
String hql="from Customer where age=:age";//查询所有Customer对象
//2.根据HQL语句创建查询对象
Query query=session.createQuery(hql);
//设置参数
query.setParameter("age", );
        分页查询
//1.书写HQL语句
String hql="from Customer";//查询所有Customer对象
//2.根据HQL语句创建查询对象
Query query=session.createQuery(hql);
//设置分页信息
query.setFirstResult();//起始值索引
query.setMaxResults();//每页的多少
        Criteria查询
Criteria criteria=session.createCriteria(Customer.class);
List<Customer> list=criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
        约束条件
Criteria criteria=session.createCriteria(Customer.class);
criteria.add(Restrictions.eq("age", ));
List<Customer> list=criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}
        聚合函数查询
Criteria criteria=session.createCriteria(Customer.class);
criteria.setProjection(Projections.rowCount());
Long count=(Long)criteria.uniqueResult();
System.out.println(count);
        //原生SQL查询
String sql="select * from t_customer";
SQLQuery query=session.createSQLQuery(sql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
for (Object objects2 : objects) {
System.out.print(objects2+"\t");
}
System.out.println();
}
        //原生SQL查询2
String sql="select * from t_customer";
SQLQuery query=session.createSQLQuery(sql);
query.addEntity(Customer.class);
List<Customer> list=query.list();
for (Customer customer : list) {
System.out.println(customer);
}

分别在什么情况下进行使用

HQL查询:查询多表查询,不是复杂多表使用

Creteria查询:单表查询

SQL原生查询:复杂的业务查询

Hibernate注意项的更多相关文章

  1. 使用idea启动springMVC+Hibernate其他项目

    打开项目后打开Project Structure 点开左边的Libraries 加入依赖包 点开左边的Moudules 选中项目 新建Web,Spring,Hibernate三项 Hibernate添 ...

  2. MyEclipse Hibernate逆向工程的使用

    简介MyEclipse自带很多非常实用的工具,本次将介绍Hibernate工具的使用.1.首先打开MyEclipse的Hibernate视图 2.然后在左上角的DB Browser视图中,右键,新建数 ...

  3. JPA示例项(J采纳PA的hibernate实现版本号)

    (1).JPA介绍: JPA全名Java Persistence API ,Java坚持API这是Sun公司Java EE 5规范中提出的Java持久化接口. JPA吸取了眼下Java持久化技术的长处 ...

  4. Hibernate criteria 增加排序项

  5. Struts2+Spring+Hibernate框架整合总结详细教程

    一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...

  6. Struts+Spring+Hibernate项目的启动线程

    在Java Web项目中,经常要在项目开始运行时启动一个线程,每隔一定的时间就运行一定的代码,比如扫描数据库的变化等等.要实现这个功能,可以现在web.xml文件中定义一个Listener,然后在这个 ...

  7. Hibernate(二)__简单实例入门

    首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...

  8. Java程序员应该掌握的10项技能

    这篇文章主要介绍了作为Java程序员应该掌握的10项技能,包括java的知识点与相关的技能,对于java的学习有不错的参考借鉴价值,需要的朋友可以参考下   1.语法:必须比较熟悉,在写代码的时候ID ...

  9. 搭建SpringMVC+Spring+Hibernate平台

    一. 开发环境 1. 点击此查看并下载需要的 Eclipse IDE for Java EE Developers 开发工具,推荐选用32位   2. 点击此查看并下载需要的 MySQL Server ...

随机推荐

  1. linux中的pwd

    https://www.cnblogs.com/crazylqy/p/5818745.html

  2. [dpdk][sysfs][pci] 在dpdk程序中操纵PCI设备

    〇  需求 在DPDK程序运行时,希望能够实时的操纵PCI 网卡设备的驱动绑定与解绑. 本文的目的是为了调查满足以上需求的,kernel提供的,标准的API都有几种,分别是什么.以确定实施方案. 一  ...

  3. python 发送带附件的邮件

    特别注意的地方:filespart.add_header("Content-Disposition","attachment",filename=file_na ...

  4. 关于 vue 日期格式的过滤

    最近也在写公司几个单独页面,数据量比较,让前端来做,还不让angular,jquery? no no no~  对于一个前端来说绑数据那么麻烦的一款 “经典的老东西“ ,我才不用, SO~  vue ...

  5. qrcode插件生成二维码

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  6. Kestrel:Net Core的跨平台服务器

    概述 Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core项目默认使用Kestrel作为web服务器. 用户 ...

  7. AppFabric查询工作流实例

    安装 通过IIS查询工作流实例,可以操作挂起,首先打开WF+WCF的站点: 这里可以搜索工作流实例:例如根据工作流ID.创建日期.状态等查询 下方的搜索结果可以查看结果 资源 Windows Serv ...

  8. 关于SLG的产品市场判断

    SLG游戏是我自己主攻的未来产品方向,以下几个板块是我自己想着力挖掘的用户艺术: 1)经营能力(包括资源的规划,调配,成长性预期,以及投产比如何向用户选择向最大化) 2)统筹能力(包括自我资源的有效整 ...

  9. Redis单机配置以及集群(sentinel、jediscluster)配置

    最近一直在使用Redis作为缓存数据库,在使用当中,刚开始没有注意配置问题. 1.纯粹的注入单机模式 <bean id="jedisPoolConfig" class=&qu ...

  10. python多线程学习二

    本文希望达到的目标: 多线程同步原语:互斥锁 多线程队列queue 线程池threadpool 一.多线程同步原语:互斥锁 在多线程代码中,总有一些特定的函数或者代码块不应该被多个线程同时执行,通常包 ...