hibernate生成表
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于hibernate生成表内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在hibernate生成表相关知识领域提供全面立体的资料补充。同时还包含 h6、hack、hadoop 的知识内容,欢迎查阅!
hibernate生成表相关知识
-
关于Hibernate的oracle主键id生成策略uuid、native和sequence 1.uuid是产生一个32位的字符串,所以在数据库主键字段的大小上必须要大于等于32位。另外如果之前在库表设置了触发器和sequence,那么即使是采用uuid主键生成策略,那么hibernate在做插入时,uuid将会失效,而是采用sequence中的值作为主键id。相当于先用uuid做主键id,但是在插入之前又被sequence中的值覆盖掉了。这点必须注意。删除掉该表的触发器即可恢复。 2.native 意味着主键生成机制的实现方式将交给hibernate决定。hibernate 将根据底层数据库适配器dialect 的定义,采用不同数据库特定的主键生成方式。(对于SQLServer和MySQL自动采用自增字段,对于oracle自动采用Sequence生成主键) 注意:在这种情形下,hibernate会默认使用名为hibernate_sequence的序列,如果oracle中没有设置,Console控制台将会产生“Hib
-
hibernate小记( mark )1.hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库 省略mysql-connect包导入以及hibernate 包导入 2.用户类创建 创建一个类User,各种get set方法 package shiyanlou.test.hibernate.entity; /** * Created by junfeng on 17/3/5. */ public class User { p
-
Hibernate Reverse Engineering反向生成Pojo类报错1、在myeclipse中使用hibernate进行“Hibernate Reverse Engineering”报如下错: An internal error occurred during: "Generating Artifacts". Path must include project and resource name: / 找到工程下的 .myhibernatedata # Mon Jan 09 22:06:02 CST 2012 genBasicCompId=false sessionFactoryName= profile= daoSFId= version=3.1 jndiPath= detectM2M=false reStrategyClass= springDaoFile= useJavaTypes=false keyGenerator=native libInstall
-
hibernate跟Mybatis/ ibatis 的区别,为什么选择?第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.NET,现在已经成为Jboss的一部分。 Mybatis 是另外一种优秀的O/R mapping框架。目前属于apache的一个子项目。 1.1 Hibernate 简介 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟
hibernate生成表相关课程
-
新版Kubernetes生产落地全程实践 本课程从集群部署到业务迁移、持续集成再到核心知识点梳理,既能快速入门k8s,又能提升k8s生产落地能力,助你少走弯路,避免踩坑。
讲师:刘果国 高级 2138人正在学习
hibernate生成表相关教程
- 2.1 主键生成器 主键是关系数据库中的概念,目的是唯一标识表中记录,保证实体数据的完整性。关系数据库中表与表中数据的关系描述需依赖主键实现 ;另有外键概念,所谓外键是在另一张表中对引用表的主键值的引用称呼。主外键关系指在不同的表中通过共同的字段信息建立起表中数据依赖(引用)关系。回到 Hibernate 的世界!先展示一段代码:Student student = new Student(2, "Configuration老二", "男");session.save(student);上面的代码功能:把应用程序中的数据写入到数据库中,没毛病呀!来!没毛病找点毛病出来:实际操作时,要求 Hibernate 把程序中 stuId 属性的值插入到表中同名的 stuId 主键字段中。主键有什么特点?唯一性!回答得对。请问在应用程序中构建数据时,如何确保赋值给 stuId 的值在表中不存在!这就是问题所在。如何解决?使用 Hibernate 主键生成器。所谓主键生成器其作用就是在 Hibernate 向表中插入数据时,负责生成表中数据记录的主键。Hibernate 主键生成器 API 介绍:Hibernate 的主键生成器(generator)都实现了 org.hibernate.id.IdentityGenerator 接口; public class IdentityGenerator extends AbstractPostInsertGenerator { …… }开发者可以遵循这个接口规范提供自己的主键生成方案;Hibernate 内置有较多主键生成器,主键生成器都有自己的实现类,并提供有快捷名称方便在注解或 XML 中引用。常用主键生成器一览:org.hibernate.id.IncrementGenerator(increment):对 long、short 或 int 的数据列生成自动增长主键;org.hibernate.id.IdentityGenerator(identity): 适用于 SQL server,MySql 等支持自动增长列的数据库,适合 long、short 或 int 数据列类型;org.hibernate.id.SequenceGenerator(sequecne):适用 oracle,DB2 等支持 Sequence 的数据库,适合 long、short 或 int 数据列类型;org.hibernate.id.UUIDGenerator(uuid):对字符串列的数据采用 128 - 位 uuid 算法生成唯一的字符串主键;org.hibernate.id.Assigned(assigned):由应用程序指定,也是默认生成策略。默认使用 assigned 生成器。这种方案要求开发者在应用程序中提供自己的主键生成算法:调用保存方法之前,先带着指定的值往数据库中跑一趟,检索是否存在重复,如果有,再试其它值;调用保存方法之前,先检索到表中 stuId 字段值的最大值,返回应用程序后递增 1,用于 stuId 新值。如果多个用户同时向数据中插入数据,这种方案会出问题,不适合并发操作环境。使用 assigned 生成器除非有一个很完美的解决方案,否则建议只用于学习或测试环境。本课程使用的是 Mysql 数据库,最佳选择 identity 生成器,主键值交给数据库的自动增长列自动生成。
- 2.3 主键生成器 使用注解 @GeneratedValue 指定生成器类型后,Hibernate 一般情况下会自动创建对应的生成器对象,如前面指定类型为 IDENTITY,则创建生成 org.hibernate.id.IdentityGenerator 对象。如果需要个性化定制生成器对象,则需要显示指定生成器对象,如为 Oracle 数据库指定主键生成器时,则配置可如下:XML 映射方式:<id name="stuId" type="Integer" column="stuId"> <generator class="sequence"> <param name="sequence">mySeq</param> </generator></id>注解映射方式:@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="mySeqIdGen")@SequenceGenerator(name="mySeqIdGen",sequenceName="mySeq")public Integer getStuId() { return stuId;}@SequenceGenerator 注解显示指明使用 org.hibernate.id.SequenceGenerator 生成器对象,并指定使用数据库中的命名为 mySeq 的序列化器。其它主键生成器的使用本文不再复述,抛砖引玉,学习者可自行深入!
- 2.2 使用主键生成器重构代码 在 Student 类的标识属性(stuId)上标注如下注解; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Integer getStuId() { return stuId; }简单得难以置信!空灵而干净!!使用 @GeneratedValue 注解确定主键生成器类型。GenerationType 是一个枚举类型,有如下几个选择:AUTO:Hibernate 区分数据库系统,自动选择最佳策略;IDENTITY: 适合具有自动增长类型的数据库,如 MySql……SEQUENCE: 适合如 Oracle 类型数据库;TABLE: 使用 Hibernate 提供的 TableGenerator 生成器,不常用。为了更好观察生成的新数据,重建数据库中的表。主配置文件中修改或添加如下配置信息; <property name="hbm2ddl.auto">create</property>执行插入数据实例; // 打开事务 try{ transaction = session.beginTransaction(); // 添加一条学生信息,此处没有指定学生编号 Student student = new Student("Hibernate 01", "男"); session.save(student); transaction.commit(); } catch(Exception e) { transaction.rollback(); } finally { session.close(); }进入 Mysql 系统查看,表结构中 stuId 自动设为主键,且为自动递增;查看表中数据,主键值自动生成;试着多加几条数据,别忘记修改如下配置信息。 <property name="hbm2ddl.auto">update</property>大功告成!!
- 2. Hibernate 是什么 简而言之:Hibernate 是一个 Java Jdbc 框架,用来简化 Java Jdbc 操作;Hibernate 也是一个ORM 框架,可以自动完成关系数据库中关系型数据到 Java 对象型数据的映射;当然,还可以说是一个持久化框架。以上说法其实是对完成同一件事情不同角度的诠释。Hibernate 的出现就是想让开发者的编码工作变得简单,这个简单指不需要在非核心逻辑编写上花费太多时间。
- 2.2 PO 之间映射表之间的关系 从编码层面上讲,就是如何在 Student 类 与 Address 类 之间体现出数据库表中数据之间的关系。先从 Student 类 中开始,在 Student 类 中添加一个属性字段。private Address address;address 属性是一个 Address 类类型,数据库不认得这玩意儿,Hibernate 表示开始要一个头两个大了,眩晕啦。null 你先进入学生表,然后根据学生表中的 addressId 进入到地址表,找到对应数据。Hibernate 又没有读心术,它如何知道你心里所想。所以,需要通过 XML 或注解语法把开发者的想法告诉 Hibernate:private Address address;@OneToOne(targetEntity = Address.class)@JoinColumn(name = "addressId")public Address getAddress() {return address;}@OneToOne 注解告诉 Hibernate :address 属性的值要麻烦您先找到 学生表的 addressId,再辛苦去一下 地址表,把对应的地址信息查询出来;@JoinColumn:告诉 Hibernate 带着 addressId 到地址表中查找。主配置文件中添加如下信息:<property name=*"hbm2ddl.auto"*>create</property><mapping class=*"com.mk.po.Student"* /><mapping class=*"com.mk.po.Address"* />在 Hibernate 创建完毕后,添加几条测试数据,操作完成后别忘记改回来。此处操作自动完成!相信聪明如你,一定没问题。<property name="hbm2ddl.auto">update</property>
- 2.4 数据库中生成模型表 接下来,我们需要使用 Django 给我们提供的两个命令来在数据库中生成 hello_app 应用下定义的数据模型。注意: Member 类映射的表名默认是【应用名_类名小写】,然而在前面的模型代码中我们通过 model 的 Meta 类中的 db_table 参数改写了数据库的具体名称,所以最后数据库中生成的表名为 member,而不是 hello_app_member。(django-manual) [root@server first_django_app]# python manage.py makemigrations hello_appMigrations for 'hello_app': hello_app/migrations/0001_initial.py - Create model Member(django-manual) [root@server first_django_app]# python manage.py migrate hello_appOperations to perform: Apply all migrations: hello_appRunning migrations: Applying hello_app.0001_initial... OK执行完成后,此时 hello_app 应用下的所有 model 就会被映射到 MySQL 数据库中,且会对应生成相应的模型表(此外还有一个迁移记录表 django_migrations):MySQL [django_manual]> show tables;+-------------------------+| Tables_in_django_manual |+-------------------------+| django_migrations || member || user |+-------------------------+3 rows in set (0.00 sec)我们还可以通过 show create table 表名 命令显示表的创建语句:MySQL [django_manual]> show create table member;+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| member | CREATE TABLE `member` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `age` varchar(30) NOT NULL, `sex` smallint(6) NOT NULL, `occupation` varchar(30) NOT NULL, `phone_num` varchar(14) NOT NULL, `email` varchar(254) NOT NULL, `city` varchar(30) NOT NULL, `register_date` datetime(6) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 |+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
hibernate生成表相关搜索
-
h1
h6
hack
hadoop
halt
hana
handler
hanging
hash
hashtable
haskell
hatch
hbase
hbuilder
hdfs
head
header
header php
headers
headerstyle