hibernate 基礎理論知識網上很多,可以百度和google.這里不做多的介紹,以一個User表來開展例子
建一個web-project
我這里用了junit單元測試環境來進行增刪查改的測試,別的不多說,導包就行
本次用到的所有jar包下載地址:
鏈接:http://pan.baidu.com/s/1skHrg0t 密碼:dbe2
1、hibernate配置文件(hibernate.cfg.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> <!--數據庫URL --> <property name="connection.url"> jdbc:oracle:thin:@127.0.0.1:1521:orcl </property> <!--數據庫用戶 --> <property name="connection.username">rent</property> <!--數據庫用戶密碼 --> <property name="connection.password">rent</property> <!--數據庫JDBC驅動 --> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <!--每個數據庫都有其對應的Dialect以匹配其平台特性 --> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <!--是否將運行期生成的SQL輸出到日志以供調試 --> <property name="show_sql">true</property> <!--是否格式化SQL --> <property name="format_sql">true</property> <mapping resource="com/cn/entity/User.hbm.xml" /> </session-factory> </hibernate-configuration>
2、映射文件(User.hbm.xml),主要是對象一表的映射
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.cn.entity.User" table="users" > <id name="id" column="id" type="java.lang.Integer"> <!-- 主鍵的生成策略 --> <generator class="assigned"/> </id> <property name="name" type="java.lang.String" column="name"/> <property name="password" type="java.lang.String" column="password"/> <property name="telephone" type="java.lang.String" column="telephone"/> <property name="username" type="java.lang.String" column="username"/> <property name="isadmin" type="java.lang.String" column="isadmin"/> </class> </hibernate-mapping> <!-- class ==== 表 對象 =====一行數據 屬性 ===== 列 屬性的類型 ==== 列的類型 -->
3、我的數據庫表結構。這里表結構與實體類中屬性的名稱和類型要保持一致
4、實體類(User.java)
package com.cn.entity; import java.io.Serializable; public class User implements Serializable { private Integer id; private String name; private String password; private String telephone; private String username; private String isadmin; public User(Integer id, String name, String password, String telephone, String username, String isadmin) { super(); this.id = id; this.name = name; this.password = password; this.telephone = telephone; this.username = username; this.isadmin = isadmin; } public User() { super(); // TODO Auto-generated constructor stub } 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 getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getIsadmin() { return isadmin; } public void setIsadmin(String isadmin) { this.isadmin = isadmin; } }
重要的事再說一遍:為避免以后可能遇到的問題和麻煩,強烈要求實體類屬性和類型與數據庫表中字段名稱和類型保持一致。實體類中的類型用包裝類的類型
5、建junit測試環境:新建junit文件
帖代碼:
package com.cn.test; import static org.junit.Assert.*; import java.io.Serializable; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.cn.entity.User; public class TestHibernate { @Test public void add() { // 讀取配置文件 Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); // 得到當前連接數據庫的session Session session = factory.openSession(); // 開啟事務 Transaction tx = session.beginTransaction(); try { User user = new User(15, "liujuan1", "123456", "13610249898", "admin", "yes"); Serializable id = session.save(user); if (id != null) { System.out.println("新增成功!"); tx.commit();// 提交事務 } else { tx.rollback();// 失敗回滾 } } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } } @Test public void select() { // 讀取配置文件 Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); // 得到當前連接數據庫的session Session session = factory.openSession(); // 開啟事務 Transaction tx = session.beginTransaction(); try { // 查詢get User user = (User) session.get(User.class, 15); System.out.println("查詢結果:" + user.getName()); tx.commit(); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } } @Test public void update() { // 讀取配置文件 Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); // 得到當前連接數據庫的session Session session = factory.openSession(); // 開啟事務 Transaction tx = session.beginTransaction(); try { // 第1種:update持久化修改:先查詢,與數據庫有關聯 /* User user = (User) session.get(User.class, 15); user.setName("duheyu"); user.setPassword("duheyu"); session.update(user); tx.commit();*/ //第2種:瞬時狀態下修改,會set全部字段,不修改的字段全部清空了 /*User user =new User(); user.setId(15); user.setName("duxinke"); user.setPassword("duxinke"); session.update(user); tx.commit();*/ //第3種,新增或修改,拿瞬時狀態來測試 User user =new User(); user.setId(15); user.setName("duxinke"); user.setPassword("duxinke"); session.saveOrUpdate(user); tx.commit(); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } } @Test public void delete(){ //讀取並解析配置文件hibernate.cfg.xml Configuration config=new Configuration().configure(); //讀取並解析映射信息,User.hbm.xml,創建SessionFactory SessionFactory factory = config.buildSessionFactory(); //打開一個連接數據庫的Session Session session = factory.openSession(); //開始一個事務,增刪除查改操作必須有,查詢操作可選 Transaction tx =session.beginTransaction(); //執行操作,都是用當前Session執行 try { User user =new User(); user.setId(15); session.delete(user); tx.commit(); } catch (Exception e) { // TODO: handle exception } } }
本次是以帖代碼為主,不講原理,如果你懂一點,看的話,會非常容易上手做項目。我做東西就是的,原理似懂非懂,上網搜代碼,下來改改,就能用了。還好我的環境對代碼質量和性能要求不是太嚴格。一切以工具能運行即可。