Hibernate初学者---自动生成数据表

步骤:

1, 首先必须保证有POJO类,并且存在annotation注解

package com.bai.fan;
import javax.persistence.Entity;
import javax.persistence.Id;


@Entity
public class Cless {
    @Id 
    int id;
    String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


}

2,hibernate.cgf.xml文件中配置自动生成数据表的方式

<?xml version="1.0" encoding="utf-8"?>  

<!DOCTYPE hibernate-configuration PUBLIC  
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  

<hibernate-configuration>  
    <session-factory>  

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  

        <property name="connection.url">jdbc:mysql://localhost/hibernate</property>  

        <property name="connection.username">root</property>  

        <property name="connection.password">shwythnn00</property>  

        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>  

        <property name="show_sql">true</property>  

        <property name="hibernate.format_sql">true</property> 

        <property name="hibernate.hbm2ddl.auto">create</property>

        <property name=""></property>

        <mapping class="com.bai.fan.Cless"/>
    </session-factory>  
</hibernate-configuration>  

这里写图片描述

第一种值 : create
- 当一个Session被NEW出来时,删原表,建新表。
第二种值: create-drop
- 当一个Session被NEW出来 时,删原表建新表。Session结束,删此表。
第三种值:update
- 当Session被NEW并接收到参数后,与原数据表做equals比较,一致报异常,不一致则添加并更新。
第四种值 :validate
- 当Session被NEW并接收到参数后,与原数据表做equals比较,一致则通过,不一致则报异常。


3,根据数据库引擎设置对应方言文件。
查看数据库引擎方法:
——以mysql为例> show engines;
查看当前默认引擎方法:
——以mysql为例> show variables like ‘%storage_engine%’;

知道自己的数据库是什么引擎就好办了,指定对应数据库方言文件。

——以mysql5InnoDB为例>
这里写图片描述


4,测试

package com.bai.fan;

import org.apache.logging.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.bai.fan.Cless;
import org.apache.logging.log4j.LogManager;

public class TestClass {
    public static void main(String[] args) {

        @SuppressWarnings("unused")
        Logger logger = LogManager.getLogger(TestClass.class.getName());

        Cless cless = new Cless();
        cless.setId(1);

        cless.setName("王小萌");

        Configuration cg = new Configuration().configure();

        SessionFactory sf = cg.configure().buildSessionFactory();

        Session ss = sf.openSession();
        ss.beginTransaction();
        ss.save(cless);
        ss.getTransaction().commit();

        ss.close();
        sf.close();

    }
}

5,后台输出

这里写代码片

这里写图片描述

这里写图片描述


6, 另附JAR包

这里写图片描述

数据库对应方言 (转载)

DB2——— org.hibernate.dialect.DB2Dialect
DB2 AS/400——— org.hibernate.dialect.DB2400Dialect
DB2 OS390——— org.hibernate.dialect.DB2390Dialect
PostgreSQL——— org.hibernate.dialect.PostgreSQLDialect
MySQL5——— org.hibernate.dialect.MySQL5Dialect
MySQL5 with InnoDB——— org.hibernate.dialect.MySQL5InnoDBDialect
MySQL with MyISAM——— org.hibernate.dialect.MySQLMyISAMDialect
Oracle(any version)——— org.hibernate.dialect.OracleDialect
Oracle 9i——— org.hibernate.dialect.Oracle9iDialect
Oracle 10g——— org.hibernate.dialect.Oracle10gDialect
Oracle 11g——— org.hibernate.dialect.Oracle10gDialect
Sybase——— org.hibernate.dialect.SybaseASE15Dialect
Sybase Anywhere——— org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server 2000——— org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2005——— org.hibernate.dialect.SQLServer2005Dialect
Microsoft SQL Server 2008——— org.hibernate.dialect.SQLServer2008Dialect
SAP DB——— org.hibernate.dialect.SAPDBDialect
Informix——— org.hibernate.dialect.InformixDialect
HypersonicSQL——— org.hibernate.dialect.HSQLDialect
H2 Database——— org.hibernate.dialect.H2Dialect
Ingres——— org.hibernate.dialect.IngresDialect
Progress——— org.hibernate.dialect.ProgressDialect
Mckoi SQL——— org.hibernate.dialect.MckoiDialect
Interbase——— org.hibernate.dialect.InterbaseDialect
Pointbase——— org.hibernate.dialect.PointbaseDialect
FrontBase——— org.hibernate.dialect.FrontbaseDialect
Firebird——— org.hibernate.dialect.FirebirdDialect


使用MySQL 自家数据库操作软件Workbench,可以方便查看MySQL支持的引擎类型。
这里写图片描述

private static void printTableMetaInfo(Session session) { Connection connection = session.connection(); try { DatabaseMetaData metaData = connection.getMetaData(); ResultSet result = metaData.getColumns(null, null, NameOfTable, null); String strInJava = ""; String typeInJava; while (result.next()) { String columnName = result.getString(4); if ("stampTime".equalsIgnoreCase(columnName)) { continue; } int columnType = result.getInt(5); String nameFirstLetterLower = columnName.substring(0, 1).toLowerCase() + columnName.substring(1); switch (columnType) { case Types.VARCHAR: case Types.LONGVARCHAR: case Types.LONGNVARCHAR: case Types.NVARCHAR: case Types.CHAR: typeInJava = "String"; break; case Types.TINYINT: case Types.SMALLINT: case Types.INTEGER: typeInJava = useInteger ? "Integer" : "int"; break; case Types.TIMESTAMP: case Types.BINARY: typeInJava = "Calendar"; break; case Types.DECIMAL: typeInJava = "BigDecimal"; break; case Types.BIGINT: typeInJava = "BigInteger"; break; case Types.LONGVARBINARY: typeInJava = "byte[]"; break; case Types.DATE: typeInJava = "Calendar"; break; default: throw new Exception("Unknown type " + columnType + " and column is " + columnName); } strInJava += " private " + typeInJava + " " + nameFirstLetterLower + ";\n"; // strInHibernate += "\n"; } String str = "import javax.persistence.Entity;\n" + "import javax.persistence.Id;\n" + "import javax.persistence.Table;\n" + "import java.util.Calendar;\n\n"; str += "@Entity\n"; str += "@Table(name=\"$\")\n".replace("$", NameOfTable); str += "public class $ {\n".replace("$", NameOfTable.substring(2)); str += "\n @Id\n"; str += strInJava; str += "}"; System.out.println(str); StringSelection stringSelection = new StringSelection(str); Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); clpbrd.setContents(stringSelection, null); } catch (Exception e) { e.printStackTrace(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值