一、基本环境搭建
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配置文件
- 点击File选中ProjectStucture
- 选择Facets,后选择+号,再选择hibernate
- 选中后,选中当前项目,点击OK
- ok后再选择+号,进行添加
- 选择版本号,这里建议使用推荐的4.x版本的就行
- 点击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);
}
}