zoukankan      html  css  js  c++  java
  • 自动在数据库中创建表

    配置.hbm.xml 文件:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="demo.test.autocreateDB">
        <class name="Student" table="student001">
            <id name="id" column="s_id">
                <generator class="native"/>
            </id>
            <property name="name" column="s_name"/>
        </class>
    </hibernate-mapping>
    <!-- 
        自动创建数据库:
        根据package找到对应的包名,再从包中找到对应的类.
        table:创建数据库的名字
        generator:设置主键,native:根据本地设置主键
        property : 列名
    主键生成策略
     1,assigned(*):手动设置主键值
      如果不设置主键:ids for this class must be manually assigned before calling save()
     
     2,uuid:使用UUID来生成主键
       1,主键的类型必须是string;
       2,主键的值是hibernate框架帮我们生成的;
        优势:框架帮我们生成, 不重复
        劣势:没有顺序, 数据量稍大
     
     3,increment
       1,主键类型需要是数字(int, double, long...), 只要可以做算数的加法匀速那即可;
       2,首先查询出当前表最大的id,id+1再设置为当前对象的主键值;
       3,hibernate会把每一个类型的increment值缓存起来,提高性能;
      
     4,identity:使用数据库本身的自增主键生成方式;
       1,对于MYSQL来说,其实我们使用native的时候,就是使用了identity方式;
       2,要使用identity,必须要求数据库支持自增的方式
       3,有的数据库不支持(比如Oracle -> sequence), 有的支持(如:SQL SERVER)
         不支持数据库的迁移(换数据库, 但是同时把数据同步过去);
     
     5,native(*):native就是使用数据库支持的主键生成方式;
       对于MYSQL来说,使用identity;
       对于ORACLE来说,使用sequence;
      
     6,TableGenerator(*:org.hibernate.id.TableGenerator):
      使用一个额外的表(hibernate_sequences)来模拟序列生成器;
       1,如果没有其他配置,hibernate会使用一个叫做default的序列生成器为所有的对象生成主键;
       2,可以设置segment_value来为每一个对象单独创建一个序列生成器;
       3,默认情况下,每生成一个主键需要两个SQL,性能不高(1,select:获取当前id;2,update:更新next_val)
       4,性能提升,increment_size:设置一次可以取多少个值;
    -->

    将.hbm.xml配置到.cfg.xml中,同时写出创建表的语句

    <!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql:///test</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
        <!-- 打印sql语句 测试 -->
            <property name="show_sql">true</property>
            <!-- 自动创建表的语句  -->
            <property name="hbm2ddl.auto">create</property>
        <!-- 
            引入映射文件,这是domain中绑定的employee.hbm.xml路径
         -->    
        <mapping resource="demo/test/autocreateDB/Student.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    创建对象模型:

    package demo.test.autocreateDB;
    
    public class Student {
        private long id;
        private String name;
        public Student() {}
        public Student(long id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + "]";
        }
    
    }

    创建测试类:

    package demo.test.autocreateDB;
    
    import org.hibernate.Session;
    import org.junit.Test;
    
    import demo.test.utiltool.UtilTool;
    
    public class TestStudent {
        @Test
        public void TestSave() {
            //调用工具类的方法
            Session session = UtilTool.getInstance().getSession();
            session.beginTransaction();
            Student stu = new Student(1, "惠轲");
            session.save(stu);
            session.getTransaction().commit();
            session.close();
            //Hibernate: insert into student001 (s_name) values (?)
        }
    }
  • 相关阅读:
    Apache虚拟主机配置
    【笔记】php常用函数
    【笔记】linux x86漏洞利用
    【笔记】ubuntu如何切换到root用户&&linux如何关闭各种保护
    【实验吧】登陆一下好吗???
    渗透相关website
    【实验吧】Reverse400
    ajax+jquery+ashx如何实现上传文件
    使用Jquery解析Json基础知识
    C#中把Datatable转换为Json的5个代码实例
  • 原文地址:https://www.cnblogs.com/huike/p/6561607.html
Copyright © 2011-2022 走看看