一、基本环境搭建

1.创建一个maven项目

2.导入hibernate需要依赖的jar包(这里使用的是hibernate连接oracle)

<!--数据库连接包-->

<!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.4.0-atlassian-hosted</version>

<scope>compile</scope>

</dependency>

<!-- Hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-entitymanager</artifactId>

<version>${hibernate.version}</version>

</dependency>

要连接数据库这两个是必须的,一个hibernate包一个数据库驱动包。其他的根据需要配置。

3.添加hibernate配置文件

  1. 点击File选中ProjectStucture
  2. 选择Facets,后选择+号,再选择hibernate
  3. 选中后,选中当前项目,点击OK
  4. ok后再选择+号,进行添加
  5. 选择版本号,这里建议使用推荐的4.x版本的就行
  6. 点击ok后,这时候项目下的resouces下会多出来一个hibernate.cfg.xml的文件。

4.编写测试类测试一下

public class OracleJdbc {

@Test
public void testOracle() {
Connection conn = null;// 创建一个数据库连接
PreparedStatement ps = null;// 创建预编译语句对象,用这个不用Statement
ResultSet resultSet = null;// 创建一个结果集对象
try {
Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序,不用DriverManager
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";// Oracle地址
String user = "scott";// 数据库用户名
String password = "123456";// 数据库密码
conn = DriverManager.getConnection(url, user, password);// 获取连接
String sql = "select * from emp ";// 预编译语句,“?”代表参数
ps = conn.prepareStatement(sql);// 实例化预编译语句
//ps.setString(1, "小李");// 设置参数,前面的1表示第一个问号(第二个问号就用2)
resultSet = ps.executeQuery();// 执行查询
while (resultSet.next()) {// 当结果集不为空时
System.out.println(resultSet.getString("ename"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 从小到大释放. resultSet < Statement < Connection
            // 释放时调用close方法即可. 如果其中一个对象的关闭 出现了异常. 也要保证其他的对象关闭方法被调用.
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}

容易出现的错误如下

ORA-28000: the account is locked - 账户已经被锁定

解决:通过system用户登录修改

alter user SCOTT account unlock;

ORA-28001: the password has expired - 密码过期

解决:通过system用户登录修改

alter user SCOTT identified by 123456;

再次连接测试一下,基本上就能连接成功了。初步测试完成。

二、完整环境搭建

1.把配置文件修改成

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <!--  Oracle用户名  -->
<property name="hibernate.connection.username">scott</property>

<!--  Oracle密码  -->
<property name="hibernate.connection.password">123456</property>

<!--  Oracle驱动  -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

<!--  Oracle连接URL  -->
    <!--建议:Oracle的url最好是这样写上,如果要连接远程Oracle,只需要把127.0.0.0.1的改为远程Oracle地址即可-->
<property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--  显示sql语句  -->
<property name="show_sql">true</property>
<!--  格式化sql语句  -->
<property name="format_sql">true</property>
</session-factory>
</hibernate-configuration>

2.使用idea自动生成hibernate实体类

使用intellij idea的database数据库进行连接数据库。

填写账号,密码,ip地址,数据库名等

填写完之后会提示没有驱动,点击Driver项进入驱动配置界面这里选择11.*版本,版本太高会导致连接失败。

连接成功之后选择

这里数据库连接选择刚刚创建的连接,把Package设置为自己创建的实体类包,实体类后缀根据自己需要配置。

勾选一张表生成一个实体类,勾选一个字段生成一个属性。默认外键不勾选,自己手动勾选一下就行了。

在这里最好勾上Generate Single Mapping XML这一项,这个是帮我们自动配置配置文件的,不然等一下实体类生成完了之后要自己手动配置配置文件,就比较麻烦。

在cfg.xml中进行类配置(如果上一步勾选了Generate Single Mapping XML可以省略这一步,因为已经自动配置好了)

在配置文件中加上

<!--添加刚刚生成的映射类-->
<mapping class="com.hibernate.entity.EmpEntity"></mapping>

3.创建测试类进行测试

public class TestEmp {

private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;

// 测试开始
    @Before
public void init(){
//创建会话工厂
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
configuration.configure();
sessionFactory = configuration.buildSessionFactory();

// 开启会话
        session =sessionFactory.openSession();
//开启事务
        transaction = session.beginTransaction();
}

// 测试结束
    @After
public void destory(){
//关闭事务
        transaction.commit();
//关闭对话
        session.close();
// 关闭会话工厂
        sessionFactory.close();
}
//    下面是测试用例
    @Test
public void testStudent(){
EmpEntity emp = new EmpEntity();
emp.setEmpno(7938);
emp.setComm((long) 500);
emp.setEname("张三");
emp.setHiredate(new Time(new Date().getTime()));
emp.setJob("CLERK");
emp.setMgr((long) 7902);
emp.setSal((long) 7500);
emp.setEmpno(10);
session.save(emp);
}
}

Q.E.D.