溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中Hibernate如何使用

發布時間:2021-06-25 16:48:58 來源:億速云 閱讀:181 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關Spring中Hibernate如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一 web配置

<?xml version="1.0" encoding="GBK"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"  version="3.1">  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener    </listener-class>  </listener>  <filter>    <filter-name>struts2</filter-name>    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>struts2</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

二 applicationContext.xml

<?xml version="1.0" encoding="GBK"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://www.springframework.org/schema/beans"  xmlns:p="http://www.springframework.org/schema/p"  xmlns:tx="http://www.springframework.org/schema/tx"  xmlns:aop="http://www.springframework.org/schema/aop"  xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">  <!-- 定義數據源Bean,使用C3P0數據源實現,并注入數據源的必要信息 -->  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"    destroy-method="close"    p:driverClass="com.mysql.jdbc.Driver"    p:jdbcUrl="jdbc:mysql://localhost/spring"    p:user="root"    p:password="32147"    p:maxPoolSize="40"    p:minPoolSize="2"    p:initialPoolSize="2"    p:maxIdleTime="30"/>  <!-- 定義Hibernate的SessionFactory,SessionFactory需要依賴數據源,注入dataSource -->  <bean id="sessionFactory"    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"    p:dataSource-ref="dataSource">    <!-- mappingResources用來列出全部映射文件 -->    <property name="annotatedClasses">      <list>        <!-- 以下用來列出所有的PO類-->        <value>org.crazyit.booksys.domain.Book</value>      </list>    </property>    <!-- 定義Hibernate SessionFactory的屬性 -->    <property name="hibernateProperties">      <props>        <!-- 指定Hibernate的連接方言 -->        <prop key="hibernate.dialect">          org.hibernate.dialect.MySQL5InnoDBDialect</prop>        <!--是否根據Hiberante映射創建數據表 -->        <prop key="hibernate.hbm2ddl.auto">update</prop>        <prop key="hibernate.show_sql">true</prop>        <prop key="hibernate.format_sql">true</prop>      </props>    </property>  </bean>  <!-- 定義Service組件,并將DAO組件注入Service組件 -->  <bean id="bookService" class="org.crazyit.booksys.service.impl.BookServiceImpl"    p:bookDao-ref="bookDao"/>  <!-- 定義DAO組件,并將SessionFactory注入DAO組件 -->  <bean id="bookDao" class="org.crazyit.booksys.dao.impl.BookDaoHibernate4"    p:sessionFactory-ref="sessionFactory"/>  <!-- 配置Hibernate的局部事務管理器,使用HibernateTransactionManager類 -->  <!-- 該類是PlatformTransactionManager接口針對采用Hibernate的特定實現類 -->  <!-- 配置HibernateTransactionManager需依賴注入SessionFactory -->  <bean id="transactionManager"    class="org.springframework.orm.hibernate4.HibernateTransactionManager"    p:sessionFactory-ref="sessionFactory"/><!-- 配置事務增強處理Bean,指定事務管理器 --><tx:advice id="txAdvice"  transaction-manager="transactionManager">  <!-- 用于配置詳細的事務定義 -->  <tx:attributes>    <!-- 所有以'get'開頭的方法是read-only的 -->    <tx:method name="get*" read-only="true"/>    <!-- 其他方法使用默認的事務設置,指定超時時長為5秒 -->    <tx:method name="*" isolation="DEFAULT"      propagation="REQUIRED" timeout="5"/>  </tx:attributes></tx:advice><!-- AOP配置的元素 --><aop:config>  <!-- 配置一個切入點 -->  <aop:pointcut id="myPointcut" expression="bean(bookService)"/>  <!-- 指定在myPointcut切入點應用txAdvice事務增強處理 -->  <aop:advisor advice-ref="txAdvice"    pointcut-ref="myPointcut"/></aop:config></beans>

三 Struts配置

<?xml version="1.0" encoding="GBK"?><!-- 指定Struts 2配置文件的DTD信息 --><!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>  <!-- 配置了系列常量 -->  <constant name="struts.i18n.encoding" value="GBK"/>  <constant name="struts.enable.DynamicMethodInvocation" value="false" />  <constant name="struts.devMode" value="true"/>  <package name="lee" extends="struts-default">    <action name="addBook" class="org.crazyit.booksys.action.BookAction"      method="add">      <!-- 添加圖書成功,列出所有圖書 -->      <result type="chain">listBooks</result>      <!-- 添加圖書失敗,跳轉到添加圖書的表單頁 -->      <result name="error">/WEB-INF/content/bookForm.jsp</result>    </action>    <action name="listBooks" class="org.crazyit.booksys.action.BookAction"      method="list">      <result>/WEB-INF/content/listBooks.jsp</result>    </action>    <action name="deleteBook" class="org.crazyit.booksys.action.BookAction"      method="delete">      <result type="chain">listBooks</result>    </action>    <!-- 讓用戶直接訪問該應用時列出所有視圖頁面 -->    <action name="*">      <result>/WEB-INF/content/{1}.jsp</result>    </action>  </package></struts>

四 視圖

1 bookForm.jsp

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %><%@taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <title>添加圖書</title></head><body><h4>添加圖書</h4><s:form action="addBook">  <s:textfield name="book.name" label="書名"/>  <s:textfield name="book.price" label="價格"/>  <s:textfield name="book.author" label="作者"/>  <tr align="center">    <td colspan="2">    <s:submit value="添加" theme="simple"/>    <s:reset value="重設" theme="simple"/>    </td>  </tr></s:form></body></html>

2 listBooks.jsp

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %><%@taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <title>全部圖書</title></head><body><h4>全部圖書</h4><table width="640" border="1">  <s:iterator value="books" var="b">    <tr>      <td><s:property value="name"/></td>      <td><s:property value="price"/></td>      <td><s:property value="author"/></td>      <td><a href="${pageContext.request.contextPath}/deleteBook?id=${b.id}" rel="external nofollow" >刪除</a></td>    </tr>  </s:iterator></table></body></html>

五 domain

package org.crazyit.booksys.domain;import javax.persistence.*;@Entity@Table(name="book_inf")public class Book{  @Id @Column(name="book_id")  @GeneratedValue(strategy=GenerationType.IDENTITY)  private Integer id;  @Column(name="book_name")  private String name;  private double price;  private String author;  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 double getPrice()  {    return price;  }  public void setPrice(double price)  {    this.price = price;  }  public String getAuthor()  {    return author;  }  public void setAuthor(String author)  {    this.author = author;  }}

六 action

package org.crazyit.booksys.action;import java.util.List;import org.crazyit.booksys.domain.Book;import org.crazyit.booksys.service.BookService;import com.opensymphony.xwork2.ActionSupport;public class BookAction extends ActionSupport{  private BookService bookService;  // 依賴注入BookService組件必須的setter方法。  // 該方法的方法名要與BookService的配置id對應  public void setBookService(BookService bookService)  {    this.bookService = bookService;  }  private Book book;  private List<Book> books;  private int id;  public Book getBook()  {    return book;  }  public void setBook(Book book)  {    this.book = book;  }  public List<Book> getBooks()  {    return books;  }  public void setBooks(List<Book> books)  {    this.books = books;  }  public int getId()  {    return id;  }  public void setId(int id)  {    this.id = id;  }  // 處理添加圖書的add()方法  public String add()  {    // 調用業務邏輯組件的addBook()方法來處理用戶請求    int result = bookService.addBook(book);    if(result > 0)    {      addActionMessage("恭喜您,圖書添加成功!");      return SUCCESS;    }    addActionError("圖書添加失敗,請重新輸入!");    return ERROR;  }  public String list()  {    setBooks(bookService.getAllBooks());    return SUCCESS;  }  public String delete()  {    bookService.deleteBook(id);    return SUCCESS;  }}

七 service

1 BookService.java

package org.crazyit.booksys.service;import java.util.List;import org.crazyit.booksys.domain.Book;public interface BookService{  // 添加圖書  int addBook(Book book);  List<Book> getAllBooks();  void deleteBook(int id);}

2 BookServiceImpl.java

package org.crazyit.booksys.service.impl;import java.util.List;import org.crazyit.booksys.dao.BookDao;import org.crazyit.booksys.domain.Book;import org.crazyit.booksys.service.BookService;public class BookServiceImpl implements BookService{  private BookDao bookDao;  public void setBookDao(BookDao bookDao)  {    this.bookDao = bookDao;  }  @Override  public int addBook(Book book)  {    return (Integer) bookDao.save(book);  }  @Override  public List<Book> getAllBooks()  {    return bookDao.findAll(Book.class);  }  @Override  public void deleteBook(int id)  {    bookDao.delete(Book.class, id);  }}

八 dao

BaseDao.java

package org.crazyit.common.dao;import java.util.List;import java.io.Serializable;public interface BaseDao<T>{  // 根據ID加載實體  T get(Class<T> entityClazz , Serializable id);  // 保存實體  Serializable save(T entity);  // 更新實體  void update(T entity);  // 刪除實體  void delete(T entity);  // 根據ID刪除實體  void delete(Class<T> entityClazz , Serializable id);  // 獲取所有實體  List<T> findAll(Class<T> entityClazz);  // 獲取實體總數  long findCount(Class<T> entityClazz);}

BaseDaoHibernate3.java

package org.crazyit.common.dao.impl;import java.io.Serializable;import java.util.List;import org.crazyit.common.dao.BaseDao;import org.hibernate.*;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import org.springframework.orm.hibernate4.HibernateCallback;public class BaseDaoHibernate3<T> extends HibernateDaoSupport  implements BaseDao<T>{  // 根據ID加載實體  public T get(Class<T> entityClazz, Serializable id)  {    return getHibernateTemplate().get(entityClazz, id);  }  // 保存實體  public Serializable save(T entity)  {    return getHibernateTemplate().save(entity);  }  // 更新實體  public void update(T entity)  {    getHibernateTemplate().saveOrUpdate(entity);  }  // 刪除實體  public void delete(T entity)  {    getHibernateTemplate().delete(entity);  }  // 根據ID刪除實體  public void delete(Class<T> entityClazz, Serializable id)  {    delete(get(entityClazz , id));  }  @Override  @SuppressWarnings("unchecked")  public List<T> findAll(Class<T> entityClazz)  {    return (List<T>)getHibernateTemplate().find("select en from "      + entityClazz.getSimpleName() + " en");  }  @Override  @SuppressWarnings("unchecked")  public long findCount(Class<T> entityClazz)  {    List<Long> list = (List<Long>)getHibernateTemplate().find(      "select count(*) from " + entityClazz.getSimpleName() + " en");    return list.get(0);  }  /**   * 使用hql 語句進行分頁查詢操作   * @param hql 需要查詢的hql語句   * @param pageNo 查詢第pageNo頁的記錄   * @param pageSize 每頁需要顯示的記錄數   * @return 當前頁的所有記錄   */  @SuppressWarnings("unchecked")  protected List<T> findByPage(final String hql,    final int pageNo, final int pageSize)  {    // 通過一個HibernateCallback對象來執行查詢    List<T> list = getHibernateTemplate()      .execute(new HibernateCallback<List<T>>()    {      // 實現HibernateCallback接口必須實現的方法      public List<T> doInHibernate(Session session)      {        // 執行Hibernate分頁查詢        List<T> result = session.createQuery(hql)          .setFirstResult((pageNo - 1) * pageSize)          .setMaxResults(pageSize)          .list();        return result;      }    });    return list;  }  /**   * 使用hql 語句進行分頁查詢操作   * @param hql 需要查詢的hql語句   * @param pageNo 查詢第pageNo頁的記錄   * @param pageSize 每頁需要顯示的記錄數   * @param params 如果hql帶占位符參數,params用于傳入占位符參數   * @return 當前頁的所有記錄   */  @SuppressWarnings("unchecked")  protected List<T> findByPage(final String hql , final int pageNo,    final int pageSize , final Object... params)  {    // 通過一個HibernateCallback對象來執行查詢    List<T> list = getHibernateTemplate()      .execute(new HibernateCallback<List<T>>()    {      // 實現HibernateCallback接口必須實現的方法      public List<T> doInHibernate(Session session)      {        // 執行Hibernate分頁查詢        Query query = session.createQuery(hql);        // 為包含占位符的HQL語句設置參數        for(int i = 0 , len = params.length ; i < len ; i++)        {          query.setParameter(i + "" , params[i]);        }        List<T> result = query.setFirstResult((pageNo - 1) * pageSize)          .setMaxResults(pageSize)          .list();        return result;      }    });    return list;  }}

BaseDaoHibernate4.java

package org.crazyit.common.dao.impl;import org.hibernate.*;import java.util.List;import java.io.Serializable;import org.crazyit.common.dao.*;public class BaseDaoHibernate4<T> implements BaseDao<T>{  // DAO組件進行持久化操作底層依賴的SessionFactory組件  private SessionFactory sessionFactory;  // 依賴注入SessionFactory所需的setter方法  public void setSessionFactory(SessionFactory sessionFactory)  {    this.sessionFactory = sessionFactory;  }  public SessionFactory getSessionFactory()  {    return this.sessionFactory;  }  // 根據ID加載實體  @SuppressWarnings("unchecked")  public T get(Class<T> entityClazz , Serializable id)  {    return (T)getSessionFactory().getCurrentSession()      .get(entityClazz , id);  }  // 保存實體  public Serializable save(T entity)  {    return getSessionFactory().getCurrentSession()      .save(entity);  }  // 更新實體  public void update(T entity)  {    getSessionFactory().getCurrentSession().saveOrUpdate(entity);  }  // 刪除實體  public void delete(T entity)  {    getSessionFactory().getCurrentSession().delete(entity);  }  // 根據ID刪除實體  public void delete(Class<T> entityClazz , Serializable id)  {    getSessionFactory().getCurrentSession()      .createQuery("delete " + entityClazz.getSimpleName()        + " en where en.id = ?0")      .setParameter("0" , id)      .executeUpdate();  }  // 獲取所有實體  public List<T> findAll(Class<T> entityClazz)  {    return find("select en from "      + entityClazz.getSimpleName() + " en");  }  // 獲取實體總數  public long findCount(Class<T> entityClazz)  {    List<?> l = find("select count(*) from "      + entityClazz.getSimpleName());    // 返回查詢得到的實體總數    if (l != null && l.size() == 1 )    {      return (Long)l.get(0);    }    return 0;  }  // 根據HQL語句查詢實體  @SuppressWarnings("unchecked")  protected List<T> find(String hql)  {    return (List<T>)getSessionFactory().getCurrentSession()      .createQuery(hql)      .list();  }  // 根據帶占位符參數HQL語句查詢實體  @SuppressWarnings("unchecked")  protected List<T> find(String hql , Object... params)  {    // 創建查詢    Query query = getSessionFactory().getCurrentSession()      .createQuery(hql);    // 為包含占位符的HQL語句設置參數    for(int i = 0 , len = params.length ; i < len ; i++)    {      query.setParameter(i + "" , params[i]);    }    return (List<T>)query.list();  }  /**   * 使用hql 語句進行分頁查詢操作   * @param hql 需要查詢的hql語句   * @param pageNo 查詢第pageNo頁的記錄   * @param pageSize 每頁需要顯示的記錄數   * @return 當前頁的所有記錄   */  @SuppressWarnings("unchecked")  protected List<T> findByPage(String hql,     int pageNo, int pageSize)  {    // 創建查詢    return getSessionFactory().getCurrentSession()      .createQuery(hql)      // 執行分頁      .setFirstResult((pageNo - 1) * pageSize)      .setMaxResults(pageSize)      .list();  }  /**   * 使用hql 語句進行分頁查詢操作   * @param hql 需要查詢的hql語句   * @param params 如果hql帶占位符參數,params用于傳入占位符參數   * @param pageNo 查詢第pageNo頁的記錄   * @param pageSize 每頁需要顯示的記錄數   * @return 當前頁的所有記錄   */  @SuppressWarnings("unchecked")  protected List<T> findByPage(String hql , int pageNo, int pageSize    , Object... params)  {    // 創建查詢    Query query = getSessionFactory().getCurrentSession()      .createQuery(hql);    // 為包含占位符的HQL語句設置參數    for(int i = 0 , len = params.length ; i < len ; i++)    {      query.setParameter(i + "" , params[i]);    }    // 執行分頁,并返回查詢結果    return query.setFirstResult((pageNo - 1) * pageSize)      .setMaxResults(pageSize)      .list();  }}

BookDao.java

package org.crazyit.booksys.dao;import java.util.List;import org.crazyit.booksys.domain.Book;import org.crazyit.common.dao.BaseDao;public interface BookDao extends BaseDao<Book>{}

BookDaoHibernate4.java

package org.crazyit.booksys.dao.impl;import java.util.List;import org.crazyit.booksys.dao.BookDao;import org.crazyit.booksys.domain.Book;import org.crazyit.common.dao.impl.BaseDaoHibernate3;import org.crazyit.common.dao.impl.BaseDaoHibernate4;public class BookDaoHibernate4 extends BaseDaoHibernate4<Book>  implements BookDao{}

上述就是小編為大家分享的Spring中Hibernate如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女