hibernate入门

一、什么是hibernate

1.对象与关系型数据之间的映射管理框架
2.ORM框架/持久层框架

ORM (Object Relational Mapping) : 对象关系映射

优点:跨数据库的无缝移植 (SqlServet、Oracle、MySql)

二、如何在项目中添加hibernate(5.2.12.Final)支持(手动添加)

  1. 添加hibernate相关依赖
  2. 在resource目录下添加hibernate.cfg.xml(核心配置文件)
    2.1. 添加DTD支持
    2.2. 添加Hibernate的配置 mysql的jar使用5.x即可
    2.2.1 数据库相关
    (connection.username|connection.password|connection.url|connection.driver_class|dialect)
    2.2.2 调试相关(show_sql|format_sql)
    2.2.3 实体相关(实体类必须事先Serializable接口)
  • 实体映射文件一定要加到核心配置文件 (hibernate.cfg.xml(1)/*.hbm.xml(N))一对N

hibernate.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>
  <!--1. 数据库相关 -->
  <!-- connection.username| connection.password| connection.url| connection.driver_class| 
   dialect -->
  <property name="connection.username">root</property>
  <property name="connection.password">123</property>
  <property name="connection.url">jdbc:mysql://localhost:3306/j2ee?useUnicode=true&amp;characterEncoding=UTF-8</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <!-- 2.调试相关 -->
  <property name="show_sql">true</property>
  <property name="format_sql">true</property>
  <!-- 开启二级缓存 -->
  <property name="hibernate.cache.use_second_level_cache">true</property>
  <!-- 开启查询缓存 -->
  <property name="hibernate.cache.use_query_cache">true</property>
  <!-- EhCache驱动 -->
  <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
  <!-- 3.实体类映射文件 -->
  <mapping resource="entity/User.hbm.xml" />
  <mapping resource="entity/Order.hbm.xml" />
  <mapping resource="entity/OrderItem.hbm.xml" />
  <mapping resource="entity/Book.hbm.xml" />
  <mapping resource="entity/Category.hbm.xml" />
 </session-factory>
</hibernate-configuration>

User.cfg.xml

<!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="entity.User" table="t_user">
  <id name="id" column="id" type="java.lang.Integer">
   <generator class="increment"></generator>
  </id>
  <version name="version" type="java.lang.Integer"></version>
  <property name="userName" column="user_name" type="java.lang.String"></property>
  <property name="userPwd" column="user_pwd" type="java.lang.String"></property>
  <property name="realName" column="real_name" type="java.lang.String"></property>
  <property name="sex" column="sex" type="java.lang.String"></property>
  <property name="birthday" column="birthday" type="java.sql.Date"></property>
  <property insert="false" update="false" name="createDatetime" column="create_datetime" type="java.sql.Timestamp"></property>
  <property name="remark" column="remark" type="java.lang.String"></property>
 </class>
</hibernate-mapping>

三、如何使用hibernate完成CRUD操作

  1. 读取配置
  2. 创建SessionFac
  3. 打开Session
  4. 开启事务
  5. CURD
  6. 提交事务/回滚事
  7. 关闭Session

注意事项
8. hibernate默认使用的是手动事务,因此必须显示的开启和提交事务
9. 删除/修改操作时,必须先查再删

四、工具类SessionFactoryUtil

package utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class SessionFactoryUtil {
 public static Configuration configuration;
 public static SessionFactory sessionFactory;
 public static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
 static {
  configuration = new Configuration();
  configuration.configure("hibernate.cfg.xml");
  sessionFactory = configuration.buildSessionFactory();
 }
 /**
  * 获取与数据交互的session对象
  * 
  * @return
  */
 public static Session getSession() {
  // 从线程找session
  Session session = threadLocal.get();
  // 没有找到就在sessionFactory里得到一个session
  if (null == session) {
   session = sessionFactory.openSession();
   threadLocal.set(session);
  }
  return session;
 }
 /**
  * 关闭会话
  */
 public static void closeSession() {
  // 从线程找session
  Session session = threadLocal.get();
  // 没有找到就在sessionFactory里得到一个session
  if (null != session) {
   session.close();
   threadLocal.set(null);
  }
 }
 public static void main(String[] args) {
  Session session = SessionFactoryUtil.getSession();
  System.out.println(session.isConnected());
  SessionFactoryUtil.closeSession();
  System.out.println(session.isConnected());
 }
}

五、主键生成策略
hibernate的主键生成器:

  • generator元素:表示了一个主键生成器,它用来为持久化类实例生
    成唯一的标识 。
    主键生成器要求:
  1. assigned: 数据类型不限、保存前必须赋值
  2. identity: 数字,无需赋值
  3. sequence: 数字,无需赋值, 默认使hibernate_sequence这个序列,
    也可以通过sequence/sequence_name参数赋值
  4. increment: 数字,无需赋值
  5. uuid/uuid.hex (是由容器自动生成的一个32位的字符串,.hex代表的是十六进制):32位的字符串,无需赋值
  6. native:identity+sequence
    自定义主键生成器
  7. *.hbm.xml(实体映射文件)指定主键生成器类:(class中放全路径名)
  8. 创建主键生成器类:实现org.hibernate.id.IdentifierGenerator接口即
    可,并还可以实现org.hibernate.id.Configurable接口来读取一些配置信息(PersistentIdentifierGenerator.TABLE,
    PersistentIdentifierGenerator.PK)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值