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 samba建立共享文件夹

    sudo  apt-get install samba 1.  mkdir  /home/lgs/samba_share    (/home/lgs为自己的家目录) 2.  find    -name ...

  2. ASP返回JQuery EasyUI树形要求的JSON格式

    根据http://blog.csdn.net/apollokk/article/details/41382479中提供的数据将结果格式化为JQuery EasyUI树形要求的JSON格式 <% ...

  3. 用java代码解决excel打开csv文件乱码问题

      Java 读取csv文件后,再保存到磁盘上,然后直接用Excel打开,你会发现里面都是乱码. 贴上代码: public class Test { public static void main(S ...

  4. java框架之Hibernate(3)-一对多和多对多关系操作

    一对多 例:一个班级可以有多个学生,而一个学生只能属于一个班级. 模型 package com.zze.bean; import java.util.HashSet; import java.util ...

  5. iot-web增加apis-namespace组件

    1  文件夹复制 apis 2 增加 3 增加module

  6. 【Common】NO.81.Note.1.Common.1.002-【文章摘要】

    1.0.0 Summary Tittle:[Common]NO.81.Note.1.Common.1.002-[文章摘要] Style:Common Series:Common Since:2018- ...

  7. 本地node启动服务步骤

    启动node服务: 1.git bash here (node server-run.js) 2.如果第一次启动node服务,要根据提示装依赖文件npm install 依赖文件名 3.启动成功提示: ...

  8. MySQL Backup mysqldump备份流程学习

    我们都知道MySQL逻辑备份工具mysqldump可以保证备份数据的一致性,但是它是怎么保持一致性的? 本文不讨论mysqldump具体的选项和用法,一直对mysqldump的工作机制梳理的不太清楚, ...

  9. hadoop执行 报错

    Error: java.io.IOException: Initialization of all the collectors failed. Error in last collector was ...

  10. 记mysql中时间相关的一个奇怪问题

    发现mysql中类型为时间的字段,在查询时显示的时间是什么是依赖于客户端的,不同的客户端查同一个时间,可能在客户端显示的时间是不一样的.至于这个在哪里配置,以及服务端如何依据这个配置为客户端返回结果, ...