1. Hibernate通过实体类与hbm创建表

Hibernate通过实体类与hbm.xml创建表


开始尝试了很多次,都没能成功创建表,问题在于

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
or
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

生成的语句不同(见6)

老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM)。MySQL 5.1为向下兼容而支持这个语法,但TYPE现在被轻视,而ENGINE是首先的用法。

MySQLDialect ->“type=MyISAM”

MySQL5Dialect->“engine=MyISAM”

应该使用MySQL5Dialect


  1. 项目结构

    在这里插入图片描述

  2. 创建实体类

    Student.java

    public class Student implements Serializable {
        private int id;
        private String name;
        private int age;
    	...//getter setter
    }
    
  3. 创建映射

    扫描二维码关注公众号,回复: 4427939 查看本文章

    Student.hbm.xml

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="learn.hibernate.entity.Student" table="stu_tab" >
            <id name="id" column="stu_id">
                <generator class="native"/>
            </id>
            <property name="name" column="stu_name"/>
            <property name="age" column="stu_age"/>
        </class>
    </hibernate-mapping>
    
  4. 配置

    hibernate.cfg.xml

    <hibernate-configuration>
        <session-factory>
            
            <!--配置数据库连接-->
            <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
            <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
            <property name="connection.username">root</property>
            <property name="connection.password">123</property>
          
            <!--显示sql语句-->
            <property name="show_sql">true</property>
            <property name="format_sql">true</property>
          
            <!--设置映射-->   
            <mapping resource="learn/hibernate/entity/Student.hbm.xml"/>
            <!-- DB schema will be updated if needed -->
            <!-- <property name="hbm2ddl.auto">update</property> -->
        </session-factory>
    </hibernate-configuration>
    
  5. 测试类

    StudentTest.java

    public class StudentTest {
        //测试在数据库中根据Student类以及Student.hbm.xml创建表
        @Test
        public void createTable(){
            ServiceRegistry sr = new StandardServiceRegistryBuilder().configure().build();
            Metadata md=new MetadataSources(sr).buildMetadata();
            SchemaExport se=new SchemaExport();
            se.create(EnumSet.of(TargetType.DATABASE), md);
        }
    }
    
  6. 控制台输出

    • MySQL5Dialect

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

      可以成功创建表,语句如下

      Hibernate: 
          drop table if exists stu_tab
      
      Hibernate: 
          create table stu_tab (
             stu_id integer not null auto_increment,
              stu_name varchar(255),
              stu_age integer,
              primary key (stu_id)
          ) engine=MyISAM
      
    • MySQLDialect

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

      无法创建,语句如下

      Hibernate: 
          drop table if exists stu_tab
      
      Hibernate: 
          create table stu_tab (
             stu_id integer not null auto_increment,
              stu_name varchar(255),
              stu_age integer,
              primary key (stu_id)
          ) type=MyISAM
      

猜你喜欢

转载自blog.csdn.net/Hi_maxin/article/details/83656835
今日推荐