JavaWeb_(Hibernate框架)Hibernate配置文件hibernate.cfg.xml

 

 

hibernate.cfg.xml配置文件——链接数据库

  hibernate.cfg.xml一定要配置在/src文件目录下

  

    --数据库驱动,url,用户名,密码

    --方言org.hibernate.dialect.MySQL5InnoDBDialect

    --显示并格式化sql语句

    --配置自动生成表

    --orm文件位置

<hibernate-configuration>
    <!-- 负责初始化     -->
    <session-factory>
 
        <!-- 连接数据库驱动 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库地址 -->
        <property name="hibernate.connection.url">jdbc:mysql:///hibernatest</property>
        <!-- 数据库用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 数据库密码 -->
        <property name="hibernate.connection.password">123456</property>
        <!-- 配置数据库的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <mapping resource= "com/Gary/domain/User.hbm.xml"/>
         
    </session-factory>

</hibernate-configuration>

 

<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 数据库地址 -->
        <property name="hibernate.connection.url">jdbc:mysql:///hibernatest</property>
        <!-- 数据库用户名 -->
        <property name="hibernate.connection.username">root</property>
        <!-- 数据库密码 -->
        <property name="hibernate.connection.password">123456</property>
        
        <!-- 配置数据库的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        
        <mapping resource= "com/Gary/domain/User.hbm.xml"/>
            
    </session-factory>


</hibernate-configuration>
hibernate.cfg.xml

 

  显示sql语句

        <!-- 将hibernate生成的SQL语句打印到控制台上 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化hibernate生成的sql语句 -->
        <property name="hibernate.format_sql">true</property>

 

 

  自动生成表

        <!-- hibernate自动创建表 
            create:            自动创建表,每次框架运行都会创建一张新的表,原来的数据将丢失(开发)
            create-drop:    自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
            update(推荐):        自动生成表,如果表已经存在,则更新数据,如果表不存在,就会创建一张新的表
            validate:               加载hibernate时,验证创建数据库表结构
        
        -->
        <property name="hibernate.hbm2ddl.auto">create</property>

 

 create:
  每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

 create-drop :
  每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。


 update:
  最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。


 validate :
  每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

 

 

  orm文件实体User.java和User.hbm.xml两个都放置在domain实体层下

  数据库user表,表中的属性都是string类型,id为主键

 

 

   

  User,java

    private String id;
    private String username;
    private String password;
    private String name;
    private String email;
    private String telephone;

 

  User.hbm.xml

<hibernate-mapping>

   <class name="com.Gary.domain.User" table="user">
   <!-- id元素
               name:实体中的属性
               colum(可选):数据库的列名
               type(可选):    填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
            length(可选):配置数据库中列的长度.
                         默认值:使用数据库类型的最大长度
    -->
           <id name="id" column="id">
               <!-- 主键生成策略(手动生成) (最后讲)  5种
                   identity:主键自增
                   sequence:oracle中主键生成的策略
                   native:identity+sequence (hibernate会根据连接的数据库自动选择(identity,sequence))
                   uuid:产生随机字符串作为主键,主键必须为String
                   
                   assigned:我们要手动去指定
                -->
                <generator class="assigned"></generator>
           </id>
           
           <!-- 
               property:除了id之外的普通属性
               name:实体中的属性
               colum(可选):数据库的列名
               type(可选):    填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
            length(可选):配置数据库中列的长度.
                         默认值:使用数据库类型的最大长度
            not-null(可选):配置该属性(列)是否不能为空. 默认值:false
            -->
           
           <property name="username" column="username"></property>
           <property name="password" column="password"></property>
           <property name="name" column="name"></property>
           <property name="email" column="email"></property>
           <property name="telephone" column="telephone"></property>
   </class>
   
</hibernate-mapping>

 

package com.Gary.domain;

public class User {

    private String id;
    private String username;
    private String password;
    private String name;
    private String email;
    private String telephone;
    
    
    public String getId() {
        return id;
    }
    public void setId(String 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 String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getTelephone() {
        return telephone;
    }
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
    
    
    
}
User.java

 

<?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="com.Gary.domain.User" table="user">
   <!-- id元素
               name:实体中的属性
               colum(可选):数据库的列名
               type(可选):    填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
            length(可选):配置数据库中列的长度.
                         默认值:使用数据库类型的最大长度
    -->
           <id name="id" column="id">
               <!-- 主键生成策略(手动生成) (最后讲)  5种
                   identity:主键自增
                   sequence:oracle中主键生成的策略
                   native:identity+sequence (hibernate会根据连接的数据库自动选择(identity,sequence))
                   uuid:产生随机字符串作为主键,主键必须为String
                   
                   assigned:我们要手动去指定
                -->
                <generator class="assigned"></generator>
           </id>
           
           <!-- 
               property:除了id之外的普通属性
               name:实体中的属性
               colum(可选):数据库的列名
               type(可选):    填写列(属性)的类型.hibernate会自动检测实体的属性类型.
                        每个类型有三种填法: java类型|hibernate类型|数据库类型
            length(可选):配置数据库中列的长度.
                         默认值:使用数据库类型的最大长度
            not-null(可选):配置该属性(列)是否不能为空. 默认值:false
            -->
           
           <property name="username" column="username"></property>
           <property name="password" column="password"></property>
           <property name="name" column="name"></property>
           <property name="email" column="email"></property>
           <property name="telephone" column="telephone"></property>
   </class>
   
</hibernate-mapping>
User.hbm.xml

 

  uuid: 通用唯一识别码(Universally Unique Identifier)的缩写,让每个人都可以创建不与其它人冲突的UUID,在这样的情况下,就不需考虑数据库创建时的名称重复问题。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-13 13:35  Cynical丶Gary  阅读(386)  评论(0编辑  收藏  举报