怎么用hibernate自动创建数据库表_hibernate 自动创建数据库-程序员宅基地

技术标签: 自动创建数据库表  hibernate  自动建表  

当当当~又来啦!这次想介绍一下怎么用hibernate自动创建数据库表

其实百度一下有很多但是在实现的过程中还是遇见了问题,包括现在也没解决,跪请各路大神帮忙指点

首先使用hibernate自动创建数据库表肯定是要先创建一个java项目啦,老生常谈直接上图

强调一下我这里用的是hibernate5.0.1,为什么强调他呢肯定是有原因的,因为新版本自动创建数据库表的方式已经跟以前不一样了嗷


1.导入相关的jar包

2.实体类

package demo;

public class User {
  private int id;
  private String username;
  private String password;
  private int age;
  public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public User(){
	  
  }
  
}

2.配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd 

">
<hibernate-configuration>
<session-factory>   
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  <property name="hibernate.connection.username">root</property>
 <property name="hibernate.connection.password"></property>
 
  <property name="show_sql">true</property>

  <property name="hbm2ddl.auto" >update</property>
    <mapping resource="demo/user.hbm.xml"/>
  
</session-factory>

</hibernate-configuration>
这里声明一下,在这个地方跟之前配置的不同就是加了一个标签,这是自动创建数据库的关键
<property name="hbm2ddl.auto" >update</property>

create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的类再重新来生成新表,这样很容易丢失数据库

 update: 第一次加载hibernate时会根据实体类自动建立表的结构,以后加载hibernate时根据 实体类自动更新数据库表

注意!敲黑板!hibernate只能自动创建数据库表不可以自动创建数据库嗷~

3.映射关系

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="demo.User" table="t_user">
    <id name="id" column="ID"  type="int">
      	<generator class="native"/>
    </id>
    <property name="username" column="username" type="java.lang.String"  />
    <property name="password" column="password" type="java.lang.String" />
    <property name="age" column="age" type="int"/>
  </class>

</hibernate-mapping>

4.测试类

package test;

import java.util.EnumSet;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.spi.MetadataImplementor;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;

import demo.User;

public class UserTest {
	public static void main(String[] args) {
		  Configuration conf = new Configuration().configure();//1、读取配置文件
	 	     StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
		        Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
		        SchemaExport schemaExport = new SchemaExport();
		    schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata)}


重点是加红部分的代码,由于用的是hibernate5.0版本所以创新数据库表的代码改变,旧版本创建数据库的代码是

 Configuration cfg = new Configuration().configure();  
     
        SchemaExport export = new SchemaExport(cfg);  
         
        export.create(true, true);  

5。运行


控制台显示

然后问题来了,控制台显示成功后数据库里并没找到表。。也就是创表成功但是找不到,百度了很久有说是方言问题的又说是数据问题的都调试过没有用,请大神指教小学渣。。。。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuguidian1114/article/details/80318190

智能推荐

请求模块urllib的基本使用_with open 保存图片-程序员宅基地

文章浏览阅读3.2k次,点赞54次,收藏78次。在实现网络爬虫的爬取工作时,就必须使用网络请求,只有进行了网络请求才可以对响应结果中的数据进行提取,urllib模块是python自带的网络请求模块,无需安装,导入即可使用。下面将介绍如果使用python中的urllib模块实现网络请求_with open 保存图片

Android底层JNI中的JavaVM和JNIEnv对象_jnivlzm-程序员宅基地

文章浏览阅读1.2k次。最近在做关于安卓安全方面的东西,需要对底层进行注入,在看雪论坛上看了不少资料,查阅了相关书籍了解了一下,需要用到JNI。利用JNI可以实现Java和底层的C/C++模块相互沟通(NDK的框架用到了该外观设计模式,Facade Pattern) 其具体步骤如下:(1)创建一个包含native本地方法的类;(2)利用javah工具生成C/C++语言的头文件;(3)创建.c源文件,使用C/C++实_jnivlzm

RSA算法进行 数据加解密 与 数字签名、哈希(Hash) 摘要_哈希算法与rsa算法-程序员宅基地

文章浏览阅读485次,点赞9次,收藏6次。RSA算法进行 数据加解密 与 数字签名;_哈希算法与rsa算法

HTML、CSS、JS实现轮播图效果:包含分页按钮及切换箭头_html轮播图添加左右箭头-程序员宅基地

文章浏览阅读3.2k次。HTML、CSS、JS实现轮播图效果:包含分页按钮及切换箭头_html轮播图添加左右箭头

Android渲染(一)------ Shader之SweepGradient用法(雷达扫描效果)_android sweepgradient-程序员宅基地

文章浏览阅读707次。Shader定义:官方的定义是这样的: Shader是返回水平跨度颜色的对象的基类,绘图期间。 Shader的子类安装在Paint调用中,paint.setShader(着色器)。 之后的任何对象(除了位图之外)都是使用该绘制绘制将从着色器获取其颜色。它有五个子类,分别是:SweepGradient、LinearGradient、BitmapShader、Compose..._android sweepgradient

no2222_通信emm substate-程序员宅基地

文章浏览阅读530次。222_通信emm substate

随便推点

Error:Internal error: (java.io.FileNotFoundException) D:\code\project\.idea\misc.xml (The sys-程序员宅基地

文章浏览阅读1.6k次。 Intellij idea找不到misc.xml文件,关闭当前项目IDE,重新打开idea, File -&gt; import project,即可重新生成该文件_error:internal error: (java.io.filenotfoundexception)

每日模板一练——并查集-程序员宅基地

文章浏览阅读129次。洛谷2814极度细(毒)节(瘤)的字符串处理,以及最后一步弄错。。。。。(水了70分?)【代码~】 #include&lt;bits/stdc++.h&gt;using namespace std;const int MAXN=5e4+10;map&lt;string,int&gt; name;map&lt;int,string&gt; id;map&lt;string...

生成报表(转)-程序员宅基地

文章浏览阅读123次。使用JasperReport+iReport进行WEB开发    一、JasperReport和iReport简介:   1、JasperReport简介   JasperReport是一个强大、灵活的报表生成工具,是开放源代码组织sf.net中的...

哈希表-程序员宅基地

文章浏览阅读3k次,点赞5次,收藏18次。初入数据结构的哈希表(Hash Table)这次我们来总结一下关于哈希表的知识,首先我们要了解什么是哈希表,哈希函数的构造思路有哪些?怎么解决哈希冲突?最后再去分析一下哈希查找算法。哈希表的概念 前提小知识什么是哈希表?哈希表的四个概念关键字、值、哈希函数、哈希地址、哈希表之间的关系?什么是哈希冲突常见的哈希函数构造方法 怎么样才是好的哈希函数?常见构建哈希函数的六个方法...

VS报错 error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 链接报错: 错误 33 error LNK2005: _DllMai_error lnk2005: _dllmain@12 已经在 msvcrtd.lib(dll_dll-程序员宅基地

文章浏览阅读584次。VS报错 error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义链接报错:错误 33 error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义 E:\客户问题\w_王鹏\EventLibTest_TibrvAlternative_Mult_error lnk2005: _dllmain@12 已经在 msvcrtd.lib(dll_dllmain_stub.obj) 中定义

什么是soap_soap是指什么-程序员宅基地

文章浏览阅读645次。SOAP (Simple Object Access Protocol) 顾名思义,是一个严格定义的信息交换协议,用于在Web Service中把远程调用和返回封装成机器可读的格式化数据。事实上SOAP数据使用XML数据格式,定义了一整套复杂的标签,以描述调用的远程过程、参数、返回值和出错信息等等。而且随着需要的增长,又不得增加协议以支持安全性,这使SOAP变得异常庞大,背离了简单的初衷。另一方面,各个服务器都可以基于这个协议推出自己的API,即使它们提供的服务及其相似,定义的API也不尽相同,这又导致.._soap是指什么