hibernate配置文件的详解
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 6 <hibernate-configuration> 7 <session-factory> 8 <!-- 注册驱动 --> 9 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 10 <!-- mysql的用户名 --> 11 <property name="connection.username">root</property> 12 <!-- mysql的用户密码 --> 13 <property name="connection.password">123456</property> 14 <!-- 连接mysql的某库 --> 15 <property name="connection.url">jdbc:mysql://localhost:3306/user</property> 16 <!-- 控制台输出sql --> 17 <property name="show_sql">true</property> 18 <!-- 格式化输出的sql --> 19 <property name="format_sql">true</property> 20 <!-- 自动提交事务 --> 21 <property name="connection.autocommit">true</property> 22 <!-- 创建sql表 23 update:如果没有表,则创建一个。如果有表,而且表结构一致,那么不改变表。如果表结构不一样,会添加sql表缺少的列,多余的也不会删除。 24 create:不管sql表有没有存在,都会重新创建表。 25 create-drop:在create的基础上,每次关闭虚拟机时都会把表删除了。 26 validate:效验sql表,如果一致,则没有反应,如果不一致了,会抛出异常。 27 --> 28 <property name="hbm2ddl.auto">update</property> 29 <!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession --> 30 <property name="current_session_context_class">thread</property> 31 <!-- 数据库方言配置 --> 32 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 33 <!-- 导入映射文件 --> 34 <mapping resource="com/xiaostudy/demo/User.hbm.xml"/> 35 </session-factory> 36 </hibernate-configuration>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <!-- 导入bean所在的包路径,如果这里没有写,那么下面用到的类就要写全路径 --> 7 <hibernate-mapping package="com.xiaostudy.demo"> 8 <!-- 把bean中的类名和mysql中的表名对应, 9 dynamic-insert不写的话默认是false,这里设置为true,意思就是插入到数据库时,为null的数据就不要插入 10 dynamic-update不写的话也是默认false,这里设置为true,意思就是当改变数据库的数据时,不更改的列不用操作 11 --> 12 <class name="User" table="users" dynamic-insert="true" dynamic-update="true"> 13 <!-- bean中id和mysql中主键对应 --> 14 <id name="id" column="id"> 15 <!-- generator:主键生成策略 16 1.increment 数据库自己生成主键. 先从数据库中查询最大的ID值,将ID值加1作为新的主键 17 2.identity 依赖于数据的主键自增功能 18 3.sequence 序列,依赖于数据中的序列功能(Oracle). 19 4.hilo(纯了解,永远用不到) : Hibernate自己实现序列的算法,自己生成主键. (hilo算法 ) 20 5.native 自动根据数据库判断,三选一. identity|sequence|hilo 21 6.uuid 生成32位的不重复随机字符串当做主键 22 7.assigned 自己指定主键值. 表的主键是自然主键时使用. 23 24 --> 25 <generator class="native"></generator> 26 </id> 27 <!-- bean中的属性和mysql中的字段对应 --> 28 <property name="username" column="username"></property> 29 <property name="password" column="password"></property> 30 </class> 31 </hibernate-mapping>
HibernateUtils.java工具类
1 package com.xiaostudy.util; 2 3 import org.hibernate.SessionFactory; 4 import org.hibernate.cfg.Configuration; 5 import org.hibernate.classic.Session; 6 7 public class HibernateUtils { 8 // 定义一个SessionFactory 9 private static SessionFactory sessionFactory; 10 11 // 静态代码块,当类加载时,会只执行一次 12 static { 13 // 加载配置文件,这里没有参数,是因为hibernate.cfg.xml文件是默认放在src目录下 14 Configuration conf = new Configuration().configure(); 15 // 通过配置文件获取一个SessionFactory 16 sessionFactory = conf.buildSessionFactory(); 17 // 当退出java虚拟机时,自动关闭资源 18 Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 19 @Override 20 public void run() { 21 sessionFactory.close(); 22 } 23 })); 24 } 25 26 // 每次都获取新的一个Session 27 public static Session openSession() { 28 return sessionFactory.openSession(); 29 } 30 31 // 获取当前线程的Session,多用于处理事务 32 public static Session getCurrentSession() { 33 return sessionFactory.getCurrentSession(); 34 } 35 36 }
建议参考文章:https://www.cnblogs.com/konrad/p/6391962.html