当前位置:首页>开发>正文

hibernate如何根据需要创建新表 如何让hibernate的xml反向生成表

2023-06-26 10:34:53 互联网 未知 开发

 hibernate如何根据需要创建新表 如何让hibernate的xml反向生成表

hibernate如何根据需要创建新表

那就不能使用Hibernate的ORM特点了,只能自己用SQL实现,Hibernate也可以支持直接SQL语言操作。

不过,为每个用户创建一张表,这本来就很不合理,非常难以管理,当用户数成千上万时,就会有成千上万的表,数据库就不能支持这么多的表,性能会很低。但数据表里有上百万条的记录,数据库还是很轻松应付,所以不应该通过无限增加表的数量来实现,而是修改表结构,在有限的表里更高性能的存储更多用户数据。

如果用户数很多,而且每条记录的列数很多,应该是考虑表的横行切割(一部分记录行放在一个表,另一部分的记录行放在另一个表,减轻记录行太多,而引起的表负担)或纵切割(记录行里的一部分列放在一个表,另一部分的列放在另一个表,减轻一条记录太大,而引起的表负担),或是这两种的混合。
还有比较简单的方式,通过修改范式设计(例如通过一对一关键关联,把用户的数据分别放在两个表里),实现更高性能的数据存放

如何让hibernate的xml反向生成表

第一步:添加Hibernate jar包,hibernate.cfg.xml写好数据源.

hibernate.cfg.xml:

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">



jdbc:MySQL://localhost/test
com.mysql.jdbc.Driver
root
root
org.hibernate.dialect.MySQLDialect
true





第二步:编写实体类

package com.bc.bean

import java.util.Date

public class Business {
private Integer uId
private String uName
private Date hirDate
private int zStoreNum
private int zBranchNum
private int zTradNum
private int sStoreNum
private int sBranchNum
private int sTradNum
private int bStoreNum
private int bBranchNum
private int bTradNum
private int totalNum
private String home
public Business() {
super()
}
public Integer getuId() {
return uId
}
public void setuId(Integer uId) {
this.uId = uId
}
public String getuName() {
return uName
}
public void setuName(String uName) {
this.uName = uName
}
public Date getHirDate() {
return hirDate
}
public void setHirDate(Date hirDate) {
this.hirDate = hirDate
}
public int getzStoreNum() {
return zStoreNum
}
public void setzStoreNum(int zStoreNum) {
this.zStoreNum = zStoreNum
}
public int getzBranchNum() {
return zBranchNum
}
public void setzBranchNum(int zBranchNum) {
this.zBranchNum = zBranchNum
}
public int getzTradNum() {
return zTradNum
}
public void setzTradNum(int zTradNum) {
this.zTradNum = zTradNum
}
public int getsStoreNum() {
return sStoreNum
}
public void setsStoreNum(int sStoreNum) {
this.sStoreNum = sStoreNum
}
public int getsBranchNum() {
return sBranchNum
}
public void setsBranchNum(int sBranchNum) {
this.sBranchNum = sBranchNum
}
public int getsTradNum() {
return sTradNum
}
public void setsTradNum(int sTradNum) {
this.sTradNum = sTradNum
}
public int getbStoreNum() {
return bStoreNum
}
public void setbStoreNum(int bStoreNum) {
this.bStoreNum = bStoreNum
}
public int getbBranchNum() {
return bBranchNum
}
public void setbBranchNum(int bBranchNum) {
this.bBranchNum = bBranchNum
}
public int getbTradNum() {
return bTradNum
}
public void setbTradNum(int bTradNum) {
this.bTradNum = bTradNum
}
public int getTotalNum() {
return totalNum
}
public void setTotalNum(int totalNum) {
this.totalNum = totalNum
}
public String getHome() {
return home
}
public void setHome(String home) {
this.home = home
}

}

第三步:编写实体类映射文件

HomeBusiness.hbm.xml


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">



















第四步:Main执行创建

ExportDB.java

package com.test.bean.test

import org.hibernate.cfg.Configuration
import org.hibernate.tool.hbm2ddl.SchemaExport

public class ExportDB {

public static void main(String[] args) {
//读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure()
SchemaExport export = new SchemaExport(cfg)
export.create(true, true)
}
}

按照以上步骤,即可反向生成!

hibernate怎么根据实体类生成数据库表

楼主您好
用SchemaExport类即可实现,具体可以搜索下,类似这样
Configuration conf= new Configuration().addClass(User.class)

//生成并输出sql到文件(当前目录)和数据库
SchemaExport dbExport=new SchemaExport(conf)
dbExport.create(true, true)
}

hibernate中根据POJO类生成数据库表有几种方式?

只要在你的hibernate配置文件里加入:

update
Hibernate就可以根据定义的映射关系自动更新数据库表结构啦~

hibernate4注解生成表吗

可以的


    
        org.hibernate.dialect.OracleDialect
        true
        true
        update
    



其中hibernate.dialect是hibernate的方言

    hibernate.show_sql  在增删改查操作时 是否打印sql语句

    hibernate.format_sql是否对sql语句进行格式化,说白了就是美化sql

    hibernate.hbm2ddl.auto 当为update时根据java对象生成数据库里的表

最新文章

随便看看