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 ...
随机推荐
- HTML、CSS知识点,面试开发都会需要--No.3 盒子模型
No.3 盒子模型 1.盒子模型属性 (1)包含的CSS属性:width.height.padding.border.margin. 1.盒子模型属性 (1)包含的CSS属性: width.heigh ...
- To be better —msup荣获平安科技“2018年度优秀合作伙伴”称号
2018年12月4日,平安科技在深圳平安金融中心举办了“2018年平安科技优秀培训合作伙伴交流会”,msup收到了邀请参与此次评选,并从80余家合作伙伴中脱颖而出,在交付量.满意度.师资内容.服务水准 ...
- [No0000193]Chrome浏览器控制台(console)花式调试
对前端开发者来说,Chrome Dev Tools(开发者工具,以下简称CDT)是一个不可或缺的开发调试工具,但是你可能只用过console.log(),却不知道console还有很多功能强大的调试方 ...
- 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用
https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...
- 树莓派3 之 USB摄像头安装和使用
需求 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头(有点贵).如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的USB 摄像头.你可能已经在PC上安装过了.我买的如图的这 ...
- 目标检测(二)SSPnet--Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognotion
作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun 以前的CNNs都要求输入图像尺寸固定,这种硬性要求也许会降低识别任意尺寸图像的准确度. ...
- SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑
SQL Server 2008中的CDC(Change Data Capture)功能使用及释疑 关键词:CDC 原文:http://www.cnblogs.com/chenxizhang/arc ...
- mac系统上mysql开启外网访问
1.首先本地连到数据库在"mysql"库下把user表里User=root的那一行,把Hosts从"locahost"改成"%" 2.然后在 ...
- C#基础加强(8)之委托和事件
委托 简介 委托是一种可以声明出指向方法的变量的数据类型. 声明委托的方式 格式: delegate <返回值类型> 委托类型名(参数) ,例如: delegate void MyDel( ...
- ionic3 在ios9.0 系统下 会出现ReferenceError:Can't find variable:Intl 错误提示
ionic3 框架开发app 在ios 9.0版本中 ReferenceError:Can't find variable:Intl 错误提示: 在index.html 文件中添加 <scri ...