- hibernate.cfg.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 name="session">
<!-- 1. 数据库相关 -->
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 用来生成具体的sql语句 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置c3p0 -->
<!-- 连接池提供商 -->
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<!-- 连接池中保留的最大连接数 -->
<property name="hibernate.c3p0.max_size">10</property>
<!-- 连接池中保留的最小连接数 -->
<property name="hibernate.c3p0.min_size">1</property>
<!-- 最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃 -->
<property name="hibernate.c3p0.maxIdleTime">60</property>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">5000</property>
<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对日志中输出的sql语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- hbm2ddl.auto的4个值,如果不需要设置为none,建议正式环境设置为none validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。 create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构 none 不执行检查 -->
<property name="hibernate.hbm2ddl.auto">none</property>
<!-- 事务隔离级别 -->
<property name="hibernate.connection.isolation">4</property>
<!-- 配置session绑定本地线程 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 要指定缓存的供应商 -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property>
<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
<!-- 配置本地事务(No CurrentSessionContext configured!) -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 2. 调试相关 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 3. 添加实体映射文件 -->
<mapping resource="com/zking/entity/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
- hibernate的主键生成器:
实现org.hibernate.id.IdentifierGenerator接口即可,并还可以实现 org.hibernate.id.Configurable接口来读取一些配置信息实现org.hibernate.id.IdentifierGenerator接口即可,并还可以实现 org.hibernate.id.Configurable接口来读取一些配置信息
PersistentIdentifierGenerator.TABLE
PersistentIdentifierGenerator.PK
<?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.zking.entity.User" table="t_hibernate_user">
<id name="id" type="java.lang.Integer" column="id">
<!-- class指的是表的主键对应的类 -->
<!-- hibernate控制 -->
<generator class="increment" />
<!-- assigned:程序员自己控制表中对应的数据 数据类型不限、保存前必须赋值-->
<!-- <generator class="assigned" /> -->
<!-- 数据库控制 数字,无需赋值-->
<!-- <generator class="identity" >
</generator>
-->
<!-- 数据库控制 数字,无需赋值-->
<!-- <generator class="increment" >
</generator>
-->
<!-- 数据库控制 数字,无需赋值, 默认使hibernate_sequence这个序列,
也可以通过sequence/sequence_name参数赋值 -->
<!-- <generator class="sequence" >
设置sequence 属性名
<param name="sequence_name">xxx</param>
</generator>
-->
<!-- 自动根据数据库类型来控制主键 等于identity+sequence-->
<!-- <generator class="native" >
</generator>
-->
<!-- 是由容器自动生成的一个32位的字符串,.hex代表的是十六进制)
32位的字符串,无需赋值 -->
<!-- <generator class="uuid" >
</generator>
-->
<!-- 自定义主键 -->
<!-- <generator class="com.zking.id.IdCreate" >
</generator>
-->
</id>
</class>
</hibernate-mapping>
3。 创建主键生成器类
package com.zking.id;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;
public class IdCreate implements IdentifierGenerator{
/**
* 根据自己要求生成主键
*/
@Override
public Serializable generate(SessionImplementor session, Object object) throws HibernateException {
return "user_" + new SimpleDateFormat("yyyy-mm-dd hh-mm-ss").format(new Date());
}
}