真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何在Hibernate中實(shí)現(xiàn)CRUD操作

這篇文章給大家介紹如何在Hibernate中實(shí)現(xiàn)CRUD操作,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、商水網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為商水等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

一、Hibernate是什么

Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,它將POJO與數(shù)據(jù)庫(kù)表建立映射關(guān)系,是一個(gè)全自動(dòng)的orm框架,hibernate可以自動(dòng)生成SQL語(yǔ)句,自動(dòng)執(zhí)行,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫(kù)。 Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的JaveEE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任(這里引用百度的描述)

二、為什么要使用Hibernate

為什么要使用Hibernate,先不回答為什么要使用它,因?yàn)橐豁?xiàng)技術(shù)入世,一定有其應(yīng)用的場(chǎng)景。

那么Hibernate的優(yōu)點(diǎn)有哪些呢?

(1)標(biāo)準(zhǔn)的orm框架,程序員不需要編寫SQL語(yǔ)句

(2)具有良好的數(shù)據(jù)庫(kù)無(wú)關(guān)性,即數(shù)據(jù)庫(kù)發(fā)生變化的話,代碼無(wú)需再次編寫;

任何事情有利也有弊

那么Hibernate的缺點(diǎn)有哪些呢?

(1)學(xué)習(xí)門檻高,需要對(duì)數(shù)據(jù)關(guān)系模型有良好的基礎(chǔ),而且在設(shè)置OR映射的時(shí)候,需要考慮好性能和對(duì)象模型的權(quán)衡;

(2)程序員不能自主的去進(jìn)行SQL性能優(yōu)化;

那么Hibernate的應(yīng)用場(chǎng)景有哪些呢?

例如需求明確、業(yè)務(wù)固定的項(xiàng)目,比如OA項(xiàng)目、ERP、CRM等項(xiàng)目

三、Hibernate的基礎(chǔ)實(shí)例

記得很久之前在初學(xué)Hibernate時(shí),雖然網(wǎng)上有不少例子,但是我覺得都不是我想要的,因?yàn)楹軞埲辈皇翘貏e系統(tǒng),但是如果太系統(tǒng)化的話,必然會(huì)連載,但是我覺得對(duì)于初學(xué)者而言,有些時(shí)候看連載確實(shí)有點(diǎn)昏昏欲睡,沒意思。這次實(shí)例是以maven工程作為示例,maven是當(dāng)前最流行的項(xiàng)目管理工具之一。

接下來示例演示與說明:

1.導(dǎo)入maven依賴


 4.0.0
 cn.example
 hibernate-crud
 0.0.1-SNAPSHOT
 
  
    
    
      org.hibernate
      hibernate-core
      4.3.11.Final
    
    
    
      mysql
      mysql-connector-java
      5.1.44
    
    
    
      junit
      junit
      4.12
    
  
  
    
      
      
        org.apache.maven.plugins
        maven-compiler-plugin
        3.7.0
        
          1.8
          1.8
        
      
    
  

2.編寫hibernate的主要配置文件

hibernate.cfg.xml



  
    com.mysql.jdbc.Driver
    jdbc:mysql://localhost:3306/blog_test
    root
    1234
    org.hibernate.dialect.MySQLDialect
    true
    update
    thread 
    
  

數(shù)據(jù)庫(kù)四要素:加載驅(qū)動(dòng)、建立連接、用戶名、密碼。這些我就不多說了。

hibernate.dialect:數(shù)據(jù)庫(kù)方言 hibernate的良好的可移植性就在這里體現(xiàn),面對(duì)不同的數(shù)據(jù)庫(kù)只需改方言即可適用

hibernate.show_sql:是否打印SQL語(yǔ)句 開發(fā)環(huán)境建議 生產(chǎn)環(huán)境不建議

hibernate.hbm2ddl.auto: 一般建議使用update 而不是使用create

current_session_context_class:這里主要針對(duì)session對(duì)象,后面我會(huì)有針對(duì)性地講解

3.編寫實(shí)體

User.java

package cn.blog.entity;


import java.io.Serializable;
import java.util.Date;


public class User implements Serializable{

  private static final long serialVersionUID = 1L;

  /**
   * 用戶主鍵
   */
  private Integer userId;
  /**
   * 用戶編碼(登錄賬戶) 手機(jī)號(hào) 郵箱號(hào)
   */
  private String loginCode;
  /**
   * 用戶名
   */
  private String userName;
  /**
   * 密碼
   */
  private String password;
  /**
   * 性別
   */
  private Integer sex;
  /**
   * 身份證
   */
  private String identityCard;
  /**
   * 創(chuàng)建時(shí)間
   */
  private String createTime;
  /**
   * 創(chuàng)建人
   */
  private String createBy;
  /**
   * 更新時(shí)間
   */
  private String updateTime;
  /**
   * 更新人
   */
  private String updateBy;
  /**
   * 狀態(tài):0注冊(cè)新用戶 1郵件認(rèn)證用戶 2管理員 3黑名單
   */
  private Integer status;


  public Integer getUserId() {
    return userId;
  }

  public void setUserId(Integer userId) {
    this.userId = userId;
  }

  public String getLoginCode() {
    return loginCode;
  }

  public void setLoginCode(String loginCode) {
    this.loginCode = loginCode;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public Integer getSex() {
    return sex;
  }

  public void setSex(Integer sex) {
    this.sex = sex;
  }

  public String getIdentityCard() {
    return identityCard;
  }

  public void setIdentityCard(String identityCard) {
    this.identityCard = identityCard;
  }

  public String getCreateTime() {
    return createTime;
  }

  public void setCreateTime(String createTime) {
    this.createTime = createTime;
  }

  public String getCreateBy() {
    return createBy;
  }

  public void setCreateBy(String createBy) {
    this.createBy = createBy;
  }

  public String getUpdateTime() {
    return updateTime;
  }

  public void setUpdateTime(String updateTime) {
    this.updateTime = updateTime;
  }

  public String getUpdateBy() {
    return updateBy;
  }

  public void setUpdateBy(String updateBy) {
    this.updateBy = updateBy;
  }

  public Integer getStatus() {
    return status;
  }

  public void setStatus(Integer status) {
    this.status = status;
  }

 
  @Override
  public String toString() {
    return "User{" +
    "userId=" + userId +
    ", loginCode=" + loginCode +
    ", userName=" + userName +
    ", password=" + password +
    ", sex=" + sex +
    ", identityCard=" + identityCard +
    ", createTime=" + createTime +
    ", createBy=" + createBy +
    ", updateTime=" + updateTime +
    ", updateBy=" + updateBy +
    ", status=" + status +
    "}";
  }
}

4.編寫實(shí)體對(duì)應(yīng)的映射文件

User.hbm.xml





  
    
      
      
    
    
    
      
    
    
      
    
     
      
    

    
    
      
    
    
      
    
      
    
    
      
    
      
    
    
      
    
      
    
    
      
    
      
    
    
    
      
    
    
    
      
    
    
  

column中的name屬性作用:主要是使對(duì)象實(shí)體與表映射

type:實(shí)體屬性

length:長(zhǎng)度

not-null:是否為空 默認(rèn)為false 不為空

unique 獨(dú)特的唯一的

5.封裝工具類

HibernateUtils.java

package cn.blog.utils;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil extends Object{
  private static SessionFactory sessionFactory;
  static
  {
    try{
      Configuration configuration=new Configuration().configure();
      sessionFactory = configuration.buildSessionFactory();
     }catch (Throwable ex){
        throw new ExceptionInInitializerError(ex);
    }
  }
   private static final ThreadLocal threadLocal = new ThreadLocal();
  public static SessionFactory getSessionFactory() {
    return sessionFactory;
  }  
  public static Session getSession() throws HibernateException
  {
    Session session = (Session) threadLocal.get();
    if (session == null){
      session = sessionFactory.openSession();
      threadLocal.set(session);
    }
      return session;
  }
  public static void closeSession() throws HibernateException {
    Session session = (Session) threadLocal.get();
    if (session != null)
      session.close();
    threadLocal.set(null);
  }
  
  public static void shutdown(){
    getSessionFactory().close();
  }
  
}

6.編寫測(cè)試類

下面就是具體的crud操作 有部分注釋了,只需去除注釋即可測(cè)驗(yàn)效果。

package cn.blog.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import cn.blog.entity.User;
import cn.blog.utils.HibernateUtil;

public class BlogTest {

  public static void main(String[] args) {
    //刪除數(shù)據(jù)
    Session session = HibernateUtil.getSession();
    Transaction tx = session.beginTransaction();
    User user = new User();
    user.setUserId(2);
    user.setLoginCode("yc@163.com");
    user.setUserName("聰哥哥");
    user.setPassword("test123");
    user.setIdentityCard("1234");
    user.setCreateBy("系統(tǒng)");
    user.setCreateTime("2018-10-21 10:00");
    user.setUpdateBy("系統(tǒng)");
    user.setUpdateTime("2018-10-21 10:00");
    user.setSex(1);
    user.setStatus(1);
    session.delete(user);
    tx.commit();
    
    
  /** 
     根據(jù)主鍵查詢單條數(shù)據(jù)
    Session session = HibernateUtil.getSession();
    Transaction tx = session.beginTransaction();
    try {
        User user = (User) session.get(User.class, 1);
        System.out.println(user.getUserName());
        
        tx.commit();
    } catch (Exception e) {
      e.printStackTrace();
      tx.rollback();
    }finally {
      HibernateUtil.closeSession();
    }
   
    */
    
    
  /*  
    更新數(shù)據(jù)
    Session session = HibernateUtil.getSession();
    Transaction tx = session.beginTransaction();
    try {
      User user = new User();
      user.setUserId(2);
      user.setLoginCode("yc@163.com");
      user.setUserName("聰哥哥");
      user.setPassword("test123");
      user.setIdentityCard("1234");
      user.setCreateBy("系統(tǒng)");
      user.setCreateTime("2018-10-21 10:00");
      user.setUpdateBy("系統(tǒng)");
      user.setUpdateTime("2018-10-21 10:00");
      user.setSex(1);
      user.setStatus(1);
      
      session.saveOrUpdate(user);
      System.out.println("update succes");
      tx.commit();
        
    } catch (Exception e) {
      e.printStackTrace();
      tx.rollback();
       System.out.println("update fail");
    }finally {
      HibernateUtil.closeSession();
    }
    
    */
    
    
/*   
    模糊查詢數(shù)據(jù)
    Session session = HibernateUtil.getSession();
    Transaction tx = session.beginTransaction();
    
    String userName="Y";
    Criteria c= session.createCriteria(User.class);
    c.add(Restrictions.like("userName", "%"+userName+"%"));
    
    List user = c.list();
     for (User user2 : user) {
      System.out.println(user2.getUserName());
    }
    tx.commit();
  */
    
    
    /*

     新增數(shù)據(jù)
    Session session = HibernateUtil.getSession();
    Transaction tx = session.beginTransaction();
    try {
      
      User user = new User();
      user.setLoginCode("yc@163.com");
      user.setUserName("Y先生");
      user.setPassword("test123");
      user.setIdentityCard("1234");
      user.setCreateBy("系統(tǒng)");
      user.setCreateTime("2018-10-21 10:00");
      user.setUpdateBy("系統(tǒng)");
      user.setUpdateTime("2018-10-21 10:00");
      user.setSex(1);
      user.setStatus(1);
      session.save(user);
      System.out.println("insert data success");
      tx.commit();
    } catch (Exception e) {
      e.printStackTrace();
      tx.rollback();
      System.out.println("insert data fail");
    }finally {
      
      HibernateUtil.closeSession();
    }*/
  }
}

小結(jié):

本文代碼放置處為:https://github.com/youcong1996/study_simple_demo.git

分支為hibernate-crud分支

如果在復(fù)用我的這篇文章在實(shí)際遇到較多的問題而無(wú)法解決,可直接clone我的git倉(cāng)庫(kù)本地運(yùn)行

如圖所示:

如何在Hibernate中實(shí)現(xiàn)CRUD操作

關(guān)于如何在Hibernate中實(shí)現(xiàn)CRUD操作就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文題目:如何在Hibernate中實(shí)現(xiàn)CRUD操作
分享鏈接:http://weahome.cn/article/pocjdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部