hibernate 是一个全自动 ORM 框架,也是我们常说的 SSH 中的 H,这个框架帮我们封装了很多数据库的基本方法,我们基本上是不用写任何 SQL 语句,即可完成一些简单的查询工作,但是遇到一些复杂的查询,可能还是要写 SQL 语句才可以哦
一、快速入门 hibernate 框架
1.1 原生方法操作 hibernate
使用 Maven 快速构建一个 Java 项目,并添加 mysql 驱动和 hibernate 核心依赖
<dependencies>
<!--添加hibernate的核心依赖-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.12.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
</dependencies>
在 resources 目录创建 hibernate.cfg.xml 的文件,作为 hibernate 框架的配置文件,并添加如下内容 ```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">
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库信息修改成你的 -->
<property name="connection.url"><![CDATA[jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf-8]]></property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect ,定义数据库方言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
</session-factory>
3. 我们随便创建一个数据库,并加一个测试表 account

4. 使用 hibernate 逆向工程生成 entity 和 对应的配置文件(这个自行百度,有方法教程的)
实体类<br /><br />AccountEntity.hbm.xml 配置文件也要放到 resources 目录下
```xml
<?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="cn.gorit.entity.AccountEntity" table="account" schema="test">
<id name="id">
<column name="id" sql-type="int(11)" length="11"/>
<generator class="native"/>
</id>
<property name="name">
<column name="name" sql-type="varchar(40)" length="40"/>
</property>
<property name="money">
<column name="money"/>
</property>
</class>
</hibernate-mapping>
- 编写第一个测试程序 ```java package cn.gorit.test;
import cn.gorit.entity.AccountEntity; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration;
// hibernate 原始方式加载 public class Test { public static void main(String[] args) { // hibernate 配置对象 Configuration cf = new Configuration().configure(); // 通过配置对象建立 session 的工厂 SessionFactory sf = cf.buildSessionFactory(); // 通过 session 的工厂得到 session Session session = sf.openSession(); AccountEntity account = new AccountEntity(12,”张三”,1232.4); // hibernate 的事物不是隐式事物,需要手动提交 // 开启事物 Transaction t = session.beginTransaction(); // 保存 session.save(account); // 提交事物 t.commit(); // 关闭资源 session.close(); } }
当你看到如下字样,就说明添加数据成功了。<br />
<a name="cn17m"></a>
### 1.2 借用工具类操作 hibernate
1. 我们编写一个操作 hibernate 的工具类,并命名为 HibernateUtils
```java
package cn.gorit.util;
import org.hibernate.Session;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static org.hibernate.SessionFactory sessionFactory;
private static Configuration configuration = new Configuration();
private static StandardServiceRegistry serviceRegistry;
static {
try {
configuration.configure("hibernate.cfg.xml");
serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* 获取session,所有的hibernate操作均基于session进行
* @return
*/
public static Session getSession(){
return sessionFactory.openSession();
}
}
- 编写方法测试 ```java package cn.gorit.test1;
import cn.gorit.entity.AccountEntity; import cn.gorit.entity.DbUserEntity; import cn.gorit.util.HibernateUtils; import netscape.security.UserTarget; import org.hibernate.Session; import org.hibernate.Transaction;
public class test {
public static void main(String[] args) {
Session session = HibernateUtils.getSession();
// Transaction t = session.beginTransaction(); // 查询不需要事物
AccountEntity accountEntity = new AccountEntity();
// 根据 ID 主键获取信息
accountEntity = session.get(AccountEntity.class, 1);
// t.commit();
System.out.println(accountEntity);
session.close();
}
}
```