Hibernate
shangboerds
淡薄以明志,宁静而致远
展开
-
Hibernate 通过 JDBC 访问数据库
– Start什么是 Hibernate 呢?它能用来干什么呢?回答这个问题之前我们先看一个通过 JDBC 访问数据库的例子。package shangbo.hibernate.demo1;/** * 通过 JDBC 访问数据库 */public class App { public static void main(String[] args) throws Exception ...原创 2019-06-07 20:17:27 · 1035 阅读 · 0 评论 -
Hibernate 级联操作
– Start我们已经知道了表与表之间的关系,如果我们对一个表进行操作,同时自动对相关表进行同样的操作,这时我们可以配置表的级联操作,级联操作的类型定义在枚举类 CascadeType 中。package shangbo.hibernate.demo029;import javax.persistence.CascadeType;import javax.persistence.Enti...原创 2019-07-07 18:51:10 · 632 阅读 · 0 评论 -
Hibernate 表关联 -- 一对多
– Start通常表与表之间有三种关系,一对多(多对一),一对一,多对多。下面我们通过例子看一下如何配置表的一对多关系。package shangbo.hibernate.demo020;import java.util.ArrayList;import java.util.List;import javax.persistence.Entity;import javax.pers...原创 2019-06-26 20:31:35 · 228 阅读 · 0 评论 -
Hibernate 表关联 -- 双边多对多2
– Start还有一种方式可以配置双边多对多,可以把它们配置成两个多对一。package shangbo.hibernate.demo026;import java.io.Serializable;import java.util.Objects;import javax.persistence.Entity;import javax.persistence.Id;import ...原创 2019-07-02 19:42:29 · 152 阅读 · 0 评论 -
Hibernate 事务管理
– Start我们先看一个例子,这个例子保存 Customer 和 Address 在单独的事务中。package shangbo.hibernate.demo019;public class App { public static void main(String[] args) throws Exception { try(DataService dataService = ne...原创 2019-07-08 20:02:28 · 131 阅读 · 0 评论 -
Hibernate 列映射 – 解决其他类型映射命名冲突2
– Start接着上个例子,如果有多个 Address 时,如何解决名字冲突问题?一种是通过注解 @AttributeOverride,另一种是通过 ImplicitNamingStrategyComponentPathImplpackage shangbo.hibernate.demo018;import org.hibernate.Session;import org.hiberna...原创 2019-06-24 20:00:38 · 126 阅读 · 0 评论 -
Hibernate 表关联 -- 双边多对一(一对多)
– Start我们已经知道了如何配置多对一和一对多,我们也可以同时配置多对一和一对多,使它们可以相互引用。package shangbo.hibernate.demo021;import java.util.ArrayList;import java.util.List;import javax.persistence.Entity;import javax.persistence...原创 2019-06-27 20:03:30 · 208 阅读 · 0 评论 -
Hibernate 基本增查改删
– Start我们已经学会了如何将表和对象映射起来,下面我们通过例子来看看如何进行基本的增查改删。package shangbo.hibernate.demo027;public class App { public static void main(String[] args) throws Exception { try (DataService dataService = ne...原创 2019-07-03 17:54:40 · 150 阅读 · 0 评论 -
Hibernate SQL
– Start除了 HQL/JPQL 和 Criteria 外,Hibernate 还提供了一个查询接口 NativeQuery 用来执行 SQL 语句。package shangbo.hibernate.demo034;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hiberna...原创 2019-07-12 20:42:37 · 173 阅读 · 0 评论 -
Hibernate 表关联 -- 单边一对一
– Start一对一实际上是一种特殊的多对一。下面我们通过例子看一下如何配置表的一对一关系。package shangbo.hibernate.demo022;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.pers...原创 2019-06-28 19:39:54 · 139 阅读 · 0 评论 -
Hibernate HQL ad JPQL
– Start就如数据库提供 SQL 来查询数据库,JPA 规范提供了 JPQL (Java Persistence Query Language),Hibernate 提供了 HQL(Hibernate Query Language) 来查询数据库。其实它们的语法非常类似的。HQL 的核心接口是 org.hibernate.query.Query,通过它我们还可以直接调用 SQL 语句或存储过...原创 2019-07-09 20:57:24 · 403 阅读 · 0 评论 -
Hibernate 表关联 -- 双边一对一
– Start下面我们通过例子看一下如何配置双边一对一关系,使它们可以相互引用。package shangbo.hibernate.demo023;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import ...原创 2019-06-29 09:02:57 · 173 阅读 · 0 评论 -
Hibernate JAP 元模型(Metamodel)
– Start为了使用查询接口 Criteria,我们需要生成实体类的元模型(Metamodel),怎么生成呢?最常用的是通过 Maven 来自动生成。 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> &...原创 2019-07-13 20:55:55 · 1305 阅读 · 0 评论 -
Hibernate 持久化上下文
– Start其实所谓的 Hibernate 持久化上下文指的是 Session 接口或 JPA 的 EntityManager 接口,我们对数据库进行操作都是通过它来实现的。刚创建的实体类对象的转态是 transient通过调用 session 的 persist 或 save 方法,实体类对象由 session 管理,它的转态变为了 persistent,此后对该对象的修改操作都会调用...原创 2019-07-04 18:22:00 · 311 阅读 · 0 评论 -
Hibernate 命名 HQL
– Start如果你想重用 HQL 语句,我们还可以使用命名 HQL。package shangbo.hibernate.demo032;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax...原创 2019-07-10 18:09:53 · 208 阅读 · 0 评论 -
Hibernate 表关联 -- 单边多对多
– Start多对多需要一个关联表来关联它们之间的关系。package shangbo.hibernate.demo024;import java.util.List;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationT...原创 2019-06-30 19:08:11 · 148 阅读 · 0 评论 -
Hibernate Criteria 查询接口
– Start除了 HQL 和 JPQL 外,Hibernate 还提供了一个查询接口 Criteria ,不过老的查询接口(org.hibernate.Criteria) 已经不推荐使用了,推荐我们使用新的接口(javax.persistence.criteria.CriteriaQuery)。package shangbo.hibernate.demo033;import javax....原创 2019-07-11 18:13:32 · 466 阅读 · 0 评论 -
Hibernate 列映射 – 解决其他类型映射命名冲突
– Start接着上个例子,如果有多个 Address 时,如何解决名字冲突问题?一种是通过注解 @AttributeOverridepackage shangbo.hibernate.demo017;import javax.persistence.AttributeOverride;import javax.persistence.AttributeOverrides;import...原创 2019-06-23 15:26:46 · 198 阅读 · 0 评论 -
Hibernate 表关联 -- 双边多对多
– Start多对多需要一个关联表来关联它们之间的关系。我们也可以配置双边多对多,使它们可以相互引用。package shangbo.hibernate.demo025;import java.util.List;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax....原创 2019-07-01 17:55:25 · 137 阅读 · 0 评论 -
Hibernate 表关联 --多对一
– Start通常表与表之间有三种关系,一对多(多对一),一对一,多对多。下面我们通过例子看一下如何配置表的多对一关系。package shangbo.hibernate.demo019;import javax.persistence.Entity;import javax.persistence.ForeignKey;import javax.persistence.Generat...原创 2019-06-25 20:26:48 · 162 阅读 · 0 评论 -
Hibernate 列映射 --枚举类型映射
– StartJava 类和数据库表有很多不同,其中之一是字段与列的数据类型不一致。如何映射 Java 枚举类型呢?有三种方法。第一种方式是使用注解 @Enumeratedpackage shangbo.hibernate.demo010;import javax.persistence.Entity;import javax.persistence.EnumType;import j...原创 2019-06-18 20:41:40 · 355 阅读 · 0 评论 -
Hibernate 通过 Hibernate 访问数据库
– Start下面我们来看一下如何通过 Hibernate 访问数据库。通过与 JDBC 对比我们发现,通过 Hibernate 访问数据库可以使我们以面向对象的方式访问数据库,Hibernate 是如何做到的呢?中心思想就是把表和对象映射起来,我们只需要面向对象进行操作,Hibernate 会转成 SQL 对数据库进行操作,这就是所谓的 ORM (Object/Relational Mappi...原创 2019-06-08 19:47:16 · 622 阅读 · 0 评论 -
Hibernate 列映射 -- 日期时间类型映射
– StartJava 类和数据库表有很多不同,其中之一是字段与列的数据类型不一致。Java 提供了很多日期时间类型,如何映射这些类型呢?我们可以使用注解 @Temporalpackage shangbo.hibernate.demo012;import java.util.Date;import javax.persistence.Entity;import javax.persi...原创 2019-06-19 07:43:49 · 785 阅读 · 0 评论 -
Hibernate 通过注解配置ORM 映射
– Start除了通过 xml 的方式,我们还可以通过注解配置 ORM 映射。package shangbo.hibernate.demo003;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Tab...原创 2019-06-09 20:07:38 · 601 阅读 · 0 评论 -
Hibernate 环境设置
– Start在开始学习 Hibernate 之前,你需要先创建一个 Maven 项目,然后添加下面的依赖。 <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</arti...原创 2019-06-03 20:40:09 · 255 阅读 · 0 评论 -
Hibernate 精萃
– Start– 声 明:转载请注明出处– Last Updated on 2019-06-03– Written by ShangBo on 2019-06-03– End原创 2019-06-03 20:31:52 · 718 阅读 · 0 评论 -
Hibernate 复合主键映射(@EmbeddedId)
– StartHibernate 推荐我们使用自动生成的序列为主键,但 Hibernate 也支持复合主键,这时我们需要定义一个主键类,并用 @EmbeddedId 或 @IdClass 修饰。主键类需要有个无参数构造函数,实现序列化接口,并实现 equals() 和 hashCode() 方法。package shangbo.hibernate.demo005;import javax....原创 2019-06-15 11:03:04 · 829 阅读 · 0 评论 -
Hibernate 复合主键映射(@IdClass)
– Start除了 @EmbeddedId,我们还可以通过 @IdClass 来定义复合主键。package shangbo.hibernate.demo006;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.IdClass;@Entity@IdClass(B...原创 2019-06-15 11:10:36 · 5722 阅读 · 0 评论 -
Hibernate 通过 SEQUENCE 生成主键
– Start对于 Oracle 数据库来说,通过我们通过 SEQUENCE 生成主键。package shangbo.hibernate.demo007;public class App { public static void main(String[] args) throws Exception { DataService dataService = new DataSer...原创 2019-06-15 11:26:25 · 1380 阅读 · 0 评论 -
Hibernate 列映射 --自动生成值
– Start有些列的值是自动生成的,如何配置这种字段呢?有很多种方法,可以由数据生成值,也可以由 Java 生成值,下面是一个简单的例子。你还可以参考 @CreationTimestamp,自定义一个注解和 ValueGenerator,完全自定义生成值。package shangbo.hibernate.demo013;import java.util.Date;import j...原创 2019-06-19 21:23:01 · 646 阅读 · 0 评论 -
Hibernate 列映射 --名字映射
– StartJava 类和数据库表有很多不同,其中之一是类名/字段名与表名/列名可能不一致。如果名字一致,我们无需特殊设置。如果名字不一致,可以使用注解 @Table 和 @Column 手动映射它们之间的关系,我们也可以实现一个命名策略,这样我们就不需要手动配置每个类。package shangbo.hibernate.demo008;public class App { publi...原创 2019-06-16 11:55:41 · 619 阅读 · 0 评论 -
Hibernate 列映射 -- 基本数据类型映射
– StartJava 类和数据库表有很多不同,其中之一是字段与列的数据类型不一致。我们可以使用 @Type 来定义它们的映射关系。你可以查看**官方文档**来查看它们的映射关系。package shangbo.hibernate.demo009;import javax.persistence.Column;import javax.persistence.Entity;import...原创 2019-06-16 12:06:03 · 523 阅读 · 0 评论 -
Hibernate 列映射 --转换值
– Start如果数据库的值和 Java 中的值不一样,我们还可以通过 @ColumnTransformer 定义转换规则。package shangbo.hibernate.demo014;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.G...原创 2019-06-20 21:32:19 · 680 阅读 · 0 评论 -
Hibernate 实体类
– Start我们把与表对应的类称之为实体类,用 @Entity 修饰类名与表名可以不一致,如果不一致,需要使用 @Table 设置每个表都有主键,我们需要用 @Id 修饰主键字段列名和字段名可以不一致,如果不一致,需要使用 @Column 设置如果列和字段类型不匹配,我们需要通过 @Type 告诉 Hibernate 如何进行类型转换如果一个字段在数据库中没有对应的列,需要用 @T...原创 2019-06-11 20:19:10 · 1361 阅读 · 0 评论 -
Hibernate 列映射 -- 生成列
– Start我们还可以在 Java 中根据其他列生成一个虚拟列而不需要有对应的数据库列。package shangbo.hibernate.demo015;import java.util.Date;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persis...原创 2019-06-21 20:09:37 · 346 阅读 · 0 评论 -
Hibernate 列映射 -- 其他类型映射
– Start假设我们有如下表。如何把一个任意的 Java 类型(Address)和数据库多列映射呢?Customer (customer_Name, city, street, customer_Id)package shangbo.hibernate.demo016;import javax.persistence.Entity;import javax.persistence....原创 2019-06-22 08:03:11 · 181 阅读 · 0 评论 -
Hibernate 与 Spring 整合
– Start下面的例子演示了如何与 Spring 整合。<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:...原创 2019-07-19 21:51:26 · 136 阅读 · 0 评论