Hibernate 學習筆記一
今天學習了hibernate的一點入門知識,主要是配置domain對象和表的關系映射,hibernate的一些常用的配置,以及對應的一個向數據庫插入數據的小例子。期間碰到了兩個Exception。
我們在使用hibernate的時候需要引入許多jar包,如果jar包少引入了或者版本老舊就會報錯,下面是我遇到的兩個Exception ,第一個是因為項目缺少slf4j-api.jar和slf4j-log4j12.jar這兩個jar包。第二個是因為缺少log4j.jar這個包。一般這種問題只要百度一下報錯就可以找到原因,只要下載相應的包,導入項目就可以解決問題。
**1. Exception in thread "main" java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class **org.slf4j.LoggerFactory
2. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
我親測無誤的使用到的開發包 點我下載
項目的結構圖
運行結果
控制台里可以看到最后一行是執行的sql語句。
數據庫中可以看到插入了Jawen112這個雇員。
主要代碼和配置
測試后沒問題的代碼。
test.java
向數據庫插入一個Employee對象
package com.vv.view;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.*;
import com.vv.domain.Employee;
import com.vv.service.EmpoyeeService;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//我們使用hibernate完成crud操作[這里我們只見對象不見表]
//現在不使用servcie,直接測試
//1.創建Configuration , 該對象用於讀取"hibernate.cfg.xml" 並完成初始化
Configuration configuration=new Configuration().configure("hibernate.cfg.xml");
//2.創建sessionfactory[],這是一個會話工廠,是一個重量級的對象
//后面做成單態,只能有一個
SessionFactory sessionFactory=configuration.buildSessionFactory();
//3.創建Session 相當於jdbc中的connection 一個會話
Session session=sessionFactory.openSession();
//4.對hibernate而言,要求程序員,在進行增加,刪除,修改的時候使用事務提交
Transaction transaction=session.beginTransaction();
//添加一個雇員
Employee employee1=new Employee();
employee1.setName("Jawen112");
employee1.setEmail("995625851@qq.com");
employee1.setHirdate(new Date());
//保存
session.save(employee1);//save(employee1) 就是持久化該對象(把對象保存到了數據庫中) ->insert into.... [被hibernate封裝]
//提交
transaction.commit();
session.close();
}
}
和 Employee 對應的數據庫
Employee.java
Employee->雇員類(屬性id,年齡,郵箱,入職日期)
package com.vv.domain;
import java.util.Date;
//建議domain對應名稱首字母大寫
//domain對象 javabean pojo(plain old/ordinary java object) 簡單的java對象
public class Employee {
private Integer id;
private String name;
private String email;
private Date hirdate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getHirdate() {
return hirdate;
}
public void setHirdate(Date hirdate) {
this.hirdate = hirdate;
}
}
Emploee.hbm.xml
這里配置domain對象和表的關系映射
<?xml version="1.0" encoding="utf-8"?>
<!-- 映射文件需要dtd來指定格式 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 該文件用於配置domain對象和表的關系映射 -->
<hibernate-mapping package="com.vv.domain">
<class name="Employee" table="employee">
<!-- id元素用於指定主鍵屬性 -->
<id name="id" column="id" type="java.lang.Integer">
<!-- 該元素用於指定主鍵值生成策略 hilo native increment sequence uuid-->
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<!--數據庫中的列 -->
<column name="name" not-null="false"/>
</property>
<property name="email" type="java.lang.String">
<column name="email" not-null="false"/>
</property>
<property name="hirdate" type="java.util.Date">
<column name="hirdate" not-null="false"/>
</property>
</class>
</hibernate-mapping>
hibernate.cfg.xml
這里配置一些和數據庫有關的配置(驅動,用戶,密碼,url,管理的對象映射文件即Emploee.hbm.xml 等等)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- hibernate 設計者給我們提供了一些常用的配置 -->
<!-- 配置使用的driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 配置使用的用戶 -->
<property name="connection.username">xiaozhi</property>
<!-- 配置使用的密碼 -->
<property name="connection.password">ycJWr9hBmKTb</property>
<!-- 配置使用的url -->
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/vmalogo</property>
<!-- 配置dialect 方言,明確告訴hibernate連接的是哪種數據庫 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 顯示出sql語句 -->
<property name="show_sql">true</property>
<!-- 指定管理的對象映射文件 -->
<mapping resource="com/vv/domain/Emploee.hbm.xml" />
</session-factory>
</hibernate-configuration>