Hibernate注意项
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注意项的更多相关文章
- 使用idea启动springMVC+Hibernate其他项目
打开项目后打开Project Structure 点开左边的Libraries 加入依赖包 点开左边的Moudules 选中项目 新建Web,Spring,Hibernate三项 Hibernate添 ...
- MyEclipse Hibernate逆向工程的使用
简介MyEclipse自带很多非常实用的工具,本次将介绍Hibernate工具的使用.1.首先打开MyEclipse的Hibernate视图 2.然后在左上角的DB Browser视图中,右键,新建数 ...
- JPA示例项(J采纳PA的hibernate实现版本号)
(1).JPA介绍: JPA全名Java Persistence API ,Java坚持API这是Sun公司Java EE 5规范中提出的Java持久化接口. JPA吸取了眼下Java持久化技术的长处 ...
- Hibernate criteria 增加排序项
- Struts2+Spring+Hibernate框架整合总结详细教程
一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...
- Struts+Spring+Hibernate项目的启动线程
在Java Web项目中,经常要在项目开始运行时启动一个线程,每隔一定的时间就运行一定的代码,比如扫描数据库的变化等等.要实现这个功能,可以现在web.xml文件中定义一个Listener,然后在这个 ...
- Hibernate(二)__简单实例入门
首先我们进一步理解什么是对象关系映射模型? 它将对数据库中数据的处理转化为对对象的处理.如下图所示: 入门简单实例: hiberante 可以用在 j2se 项目,也可以用在 j2ee (web项目中 ...
- Java程序员应该掌握的10项技能
这篇文章主要介绍了作为Java程序员应该掌握的10项技能,包括java的知识点与相关的技能,对于java的学习有不错的参考借鉴价值,需要的朋友可以参考下 1.语法:必须比较熟悉,在写代码的时候ID ...
- 搭建SpringMVC+Spring+Hibernate平台
一. 开发环境 1. 点击此查看并下载需要的 Eclipse IDE for Java EE Developers 开发工具,推荐选用32位 2. 点击此查看并下载需要的 MySQL Server ...
随机推荐
- linux中的pwd
https://www.cnblogs.com/crazylqy/p/5818745.html
- [dpdk][sysfs][pci] 在dpdk程序中操纵PCI设备
〇 需求 在DPDK程序运行时,希望能够实时的操纵PCI 网卡设备的驱动绑定与解绑. 本文的目的是为了调查满足以上需求的,kernel提供的,标准的API都有几种,分别是什么.以确定实施方案. 一 ...
- python 发送带附件的邮件
特别注意的地方:filespart.add_header("Content-Disposition","attachment",filename=file_na ...
- 关于 vue 日期格式的过滤
最近也在写公司几个单独页面,数据量比较,让前端来做,还不让angular,jquery? no no no~ 对于一个前端来说绑数据那么麻烦的一款 “经典的老东西“ ,我才不用, SO~ vue ...
- qrcode插件生成二维码
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- Kestrel:Net Core的跨平台服务器
概述 Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core项目默认使用Kestrel作为web服务器. 用户 ...
- AppFabric查询工作流实例
安装 通过IIS查询工作流实例,可以操作挂起,首先打开WF+WCF的站点: 这里可以搜索工作流实例:例如根据工作流ID.创建日期.状态等查询 下方的搜索结果可以查看结果 资源 Windows Serv ...
- 关于SLG的产品市场判断
SLG游戏是我自己主攻的未来产品方向,以下几个板块是我自己想着力挖掘的用户艺术: 1)经营能力(包括资源的规划,调配,成长性预期,以及投产比如何向用户选择向最大化) 2)统筹能力(包括自我资源的有效整 ...
- Redis单机配置以及集群(sentinel、jediscluster)配置
最近一直在使用Redis作为缓存数据库,在使用当中,刚开始没有注意配置问题. 1.纯粹的注入单机模式 <bean id="jedisPoolConfig" class=&qu ...
- python多线程学习二
本文希望达到的目标: 多线程同步原语:互斥锁 多线程队列queue 线程池threadpool 一.多线程同步原语:互斥锁 在多线程代码中,总有一些特定的函数或者代码块不应该被多个线程同时执行,通常包 ...