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