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. Oracle考试题作业

    新建一张学员信息表(student),要求:1. 字段如下:学号(sid),姓名(name),性别(sex),年龄(age),地址(address).2. 分别为字段添加约束:学号为主键,姓名为非空, ...

  2. 找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.应用程序类必 须扩展javafx.application.Application”

    用eclipse写代码的时候,写了一个简单的程序,编译的时候突然出现“错误: 在类 com.test.demo 中找不到 main 方法, 请将 main 方法定义为: public static v ...

  3. Vue事件总线(eventBus)$on()会多次触发解决办法

    项目中使用了事件总线eventBus来进行两个组件间的通信, 使用方法是是建立eventBus.js文件,暴露一个空的Vue实例,如下: import Vue from 'vue'export def ...

  4. Chrome扩展程序——TabCopy:一键复制网页标题和网址

    Chrome扩展程序——TabCopy:一键复制网页标题和网址 - Erik_ly的博客 - CSDN博客 https://blog.csdn.net/u012318074/article/detai ...

  5. 43-3-STM32的CAN外设

    1.STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN), 它支持 CAN 协议 2.0A 和2.0B 标准. 2.外设中具有 3 个发送邮箱,发送报文的优先级可以使 ...

  6. Open_stack 有虚拟机端口不通的问题

    原因:流量表 解决办法:not修改流量表(容易出错,出错后果更严重):is迁移虚拟机这样会对应生成新的流量表,然后问题就解决了.

  7. linux安装lamp/lamp/lanmp

    wdcp安装lamp/lanp/lanmp 和宝塔(centOS)1. yum install -y wget  //yum安装wegt2. wget http://dl.wdlinux.cn/fil ...

  8. MD5在线加密的应用

    MD5是message-digest algorithm 5(信息-摘要算法)的缩写.被广泛用于加密和解密技术上,是文件的“数字指纹”.可以对用户的密码进行加密操作,是不可逆的,所以用户输入的密码经过 ...

  9. OfficeOpenXml:World、Excel导出导入库

    基础库:EPPlus 根据模版:OfficeOpenXml.Entends

  10. linux 创建用户和添加到组

    1.添加用户 先用root用户登录 useradd -m testuser #这样的做会在/home下创建目录 2.指定shell #cat /etc/passwd  #查看用户指定shell roo ...