hibernate基礎增刪查改簡單實例


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
        }
    }

}

 

本次是以帖代碼為主,不講原理,如果你懂一點,看的話,會非常容易上手做項目。我做東西就是的,原理似懂非懂,上網搜代碼,下來改改,就能用了。還好我的環境對代碼質量和性能要求不是太嚴格。一切以工具能運行即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM