麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

spring4.x + hibernate4.x 配置詳解

2019-11-14 21:06:21
字體:
來源:轉載
供稿:網友
sPRing4.x + hibernate4.x 配置詳解

關于spring和hibernate的使用以及特征等等,在此不再啰嗦,相信大家也都知道,或者去搜索一下即可。

本篇博文的內容主要是我最近整理的關于spring4.x 和 hibernate 4.x 相關配置和使用方式,當然spring3.x以及hibernate4.x也可以借鑒。

首先是配置文件 web.xml 增加以下代碼即可

<!-- 加載spring相關的配置文件 -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath*:/applicationContext.xml</param-value>    </context-param>        <!-- 啟用spring監聽 -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>

然后建立applicationContext.xml 文件 ,src下。 文件內容如下,注釋我盡量寫的很詳細

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd       http://www.springframework.org/schema/aop       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd       http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context-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/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd">    <!-- 引入properties文件 -->    <context:property-placeholder location="classpath*:/appConfig.properties" />    <!-- 定義數據庫連接池數據源bean destroy-method="close"的作用是當數據庫連接不使用的時候,就把該連接重新放到數據池中,方便下次使用調用 -->    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"        destroy-method="close">        <!-- 設置JDBC驅動名稱 -->        <property name="driverClass" value="${jdbc.driver}" />        <!-- 設置JDBC連接URL -->        <property name="jdbcUrl" value="${jdbc.url}" />        <!-- 設置數據庫用戶名 -->        <property name="user" value="${jdbc.username}" />        <!-- 設置數據庫密碼 -->        <property name="passWord" value="${jdbc.password}" />        <!-- 設置連接池初始值 -->        <property name="initialPoolSize" value="5" />    </bean>    <!-- 配置sessionFactory -->    <bean id="sessionFactory"        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">        <!-- 數據源 -->        <property name="dataSource" ref="dataSource" />        <!-- hibernate的相關屬性配置 -->        <property name="hibernateProperties">            <value>                <!-- 設置數據庫方言 -->                hibernate.dialect=org.hibernate.dialect.MySQLDialect                <!-- 設置自動創建|更新|驗證數據庫表結構 -->                hibernate.hbm2ddl.auto=update                <!-- 是否在控制臺顯示sql -->                hibernate.show_sql=true                <!-- 是否格式化sql,優化顯示 -->                hibernate.format_sql=true                <!-- 是否開啟二級緩存 -->                hibernate.cache.use_second_level_cache=false                <!-- 是否開啟查詢緩存 -->                hibernate.cache.use_query_cache=false                <!-- 數據庫批量查詢最大數 -->                hibernate.jdbc.fetch_size=50                <!-- 數據庫批量更新、添加、刪除操作最大數 -->                hibernate.jdbc.batch_size=50                <!-- 是否自動提交事務 -->                hibernate.connection.autocommit=true                <!-- 指定hibernate在何時釋放JDBC連接 -->                hibernate.connection.release_mode=auto                <!-- 創建session方式 hibernate4.x 的方式 -->                hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext                <!-- javax.persistence.validation.mode默認情況下是auto的,就是說如果不設置的話它是會自動去你的classpath下面找一個bean-validation**包                     所以把它設置為none即可 -->                javax.persistence.validation.mode=none            </value>        </property>        <!-- 自動掃描實體對象 tdxy.bean的包結構中存放實體類 -->        <property name="packagesToScan" value="tdxy.bean" />    </bean>    <!-- 定義事務管理 -->    <bean id="transactionManager"        class="org.springframework.orm.hibernate4.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" />    </bean>        <!-- 定義 Autowired  自動注入 bean -->    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>         <!-- 掃描有注解的文件  base-package 包路徑 -->    <context:component-scan base-package="tdxy"/>        <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <!-- 事務執行方式                REQUIRED:指定當前方法必需在事務環境中運行,                如果當前有事務環境就加入當前正在執行的事務環境,                如果當前沒有事務,就新建一個事務。                這是默認值。              -->            <tx:method name="create*" propagation="REQUIRED" />            <tx:method name="save*" propagation="REQUIRED" />            <tx:method name="add*" propagation="REQUIRED" />            <tx:method name="update*" propagation="REQUIRED" />            <tx:method name="remove*" propagation="REQUIRED" />            <tx:method name="del*" propagation="REQUIRED" />            <tx:method name="import*" propagation="REQUIRED" />            <!--                 指定當前方法以非事務方式執行操作,如果當前存在事務,就把當前事務掛起,等我以非事務的狀態運行完,再繼續原來的事務。                 查詢定義即可                read-only="true"  表示只讀             -->            <tx:method name="*" propagation="NOT_SUPPORTED" read-only="true" />        </tx:attributes>    </tx:advice>    <!-- 定義切面,在 * tdxy.*.service.*ServiceImpl.*(..) 中執行有關的hibernate session的事務操作 -->    <aop:config>        <aop:pointcut id="serviceOperation" expression="execution(* tdxy.*.service.*Service.*(..))" />        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />    </aop:config>    </beans>

applicationContext.xml 文件引用了一個properties文件 ,該文件也在src下,appConfig.properties 內容可以自己定義

########################數據庫連接信息#############jdbc.username = rootjdbc.password = adminjdbc.url = jdbc:mysql://localhost:3306/tdxy?useUnicode=true&characterEncoding=UTF-8jdbc.driver = com.mysql.jdbc.Driver

自己寫了一個test用的basedao

package tdxy.dao;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;/** *  * @Title: BaseDao.java * @Package tdxy.dao * @Description: TODO(baseDao 數據庫操作實現類) * @author dapeng * @date 2014年5月7日 下午5:09:22 * @version V1.0 */@Repositorypublic class BaseDao {    /**     * Autowired 自動裝配 相當于get() set()     */    @Autowired    protected SessionFactory sessionFactory;    /**     * gerCurrentSession 會自動關閉session,使用的是當前的session事務     *      * @return     */    public Session getSession() {        return sessionFactory.getCurrentSession();    }    /**     * openSession 需要手動關閉session 意思是打開一個新的session     *      * @return     */    public Session getNewSession() {        return sessionFactory.openSession();    }    public void flush() {        getSession().flush();    }    public void clear() {        getSession().clear();    }    /**     * 根據 id 查詢信息     *      * @param id     * @return     */    @SuppressWarnings("rawtypes")    public Object load(Class c, String id) {        Session session = getSession();        return session.get(c, id);    }    /**     * 獲取所有信息     *      * @param c      *             * @return     */    @SuppressWarnings({ "rawtypes" })    public List getAllList(Class c) {        String hql = "from " + c.getName();        Session session = getSession();        return session.createQuery(hql).list();    }    /**     * 獲取總數量     *      * @param c     * @return     */    @SuppressWarnings("rawtypes")    public Long getTotalCount(Class c) {        Session session = getNewSession();        String hql = "select count(*) from " + c.getName();        Long count = (Long) session.createQuery(hql).uniqueResult();        session.close();        return count != null ? count.longValue() : 0;    }    /**     * 保存     *      * @param bean      *                 */    public void save(Object bean) {        try {            Session session = getNewSession();            session.save(bean);            session.flush();            session.clear();            session.close();        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 更新     *      * @param bean      *                 */    public void update(Object bean) {        Session session = getNewSession();        session.update(bean);        session.flush();        session.clear();        session.close();    }    /**     * 刪除     *      * @param bean      *                 */    public void delete(Object bean) {        Session session = getNewSession();        session.delete(bean);        session.flush();        session.clear();        session.close();    }    /**     * 根據ID刪除     *      * @param c 類     *                 * @param id ID     *                 */    @SuppressWarnings({ "rawtypes" })    public void delete(Class c, String id) {        Session session = getNewSession();        Object obj = session.get(c, id);        session.delete(obj);        flush();        clear();    }    /**     * 批量刪除     *      * @param c 類     *                 * @param ids ID 集合     *                 */    @SuppressWarnings({ "rawtypes" })    public void delete(Class c, String[] ids) {        for (String id : ids) {            Object obj = getSession().get(c, id);            if (obj != null) {                getSession().delete(obj);            }        }    }}

不知大家有沒有注意 applicationContext.xml 這樣一句代碼

<!-- 設置自動創建|更新|驗證數據庫表結構 -->    hibernate.hbm2ddl.auto=update

這個意思是 只要在實體bean指定了entity,那么在數據庫會自動創建對應的表和表結構

test用的一個實體bean

package tdxy.bean;import java.io.Serializable;import javax.persistence.Entity;import javax.persistence.Id;/** *  * @ClassName: UserInfoBean * @Description: TODO(用戶信息類) * @author dapeng * @date 2014年5月7日 上午12:13:44 * @version V1.0 *  */@Entitypublic class UserInfoBean implements Serializable {    private static final long serialVersionUID = 7280747949998651159L;    @Id    private String id;    /**     * 昵稱     */    private String nickName;    private String pwd;    /**     * 等級     *      */    private String level;    /**     * 經驗值     */    private String emValue;    /**     * 性別(0 男 1女)     */    private String sex;    private String birthday;    private String QQ;    private String email;    /**     * 頭像     */    private String img;    /**     * 所在地     */    private String address;    /**     * 簽名     */    private String qmd;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getNickName() {        return nickName;    }    public void setNickName(String nickName) {        this.nickName = nickName;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public String getLevel() {        return level;    }    public void setLevel(String level) {        this.level = level;    }    public String getEmValue() {        return emValue;    }    public void setEmValue(String emValue) {        this.emValue = emValue;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public String getBirthday() {        return birthday;    }    public void setBirthday(String birthday) {        this.birthday = birthday;    }    public String getQq() {        return qq;    }    public void setQq(String qq) {        this.qq = qq;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public String getImg() {        return img;    }    public void setImg(String img) {        this.img = img;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getQmd() {        return qmd;    }    public void setQmd(String qmd) {        this.qmd = qmd;    }}

當應用成功啟動之后,數據庫會出現表和結構,即剛才定義的bean是一樣的,大家可以自己查看一下即可。

以下是test的Service

package tdxy.user.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import tdxy.bean.UserInfoBean;import tdxy.dao.BaseDao;import tdxy.util.TdxyUtil;@Servicepublic class UserInfoService {    @Autowired    private BaseDao baseDao;    public UserInfoBean queryUserInfoById(String id) {        return (UserInfoBean) baseDao.load(UserInfoBean.class, id);    }    public void addUserInfo(UserInfoBean userInfo) {        try {            userInfo.setId(TdxyUtil.getId());            userInfo.setAddress("32132");            baseDao.save(userInfo);        } catch (Exception e) {            e.printStackTrace();        }    }}

配置過程到此結束,希望大家一起討論共同進步。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品一区二区三区日本 | 国产精品99久久久久久宅女 | 中文字幕亚洲一区二区三区 | 18pao国产成人免费视频 | 久久久久久久久国产 | 精品国产一区二区三区四 | 国产乱一区二区三区视频 | 免看黄大片aa | 日本高清视频网站www | 黑人一区二区三区四区五区 | 国产精品久久国产精麻豆96堂 | 成人免费福利 | 国产日韩在线观看视频 | 日本不卡一区二区三区在线 | 成人毛片视频在线播放 | 亚洲婷婷日日综合婷婷噜噜噜 | 日韩精品久久久久久久九岛 | 精精国产xxxx视频在线播放7 | 国产精品99久久久久久久女警 | 亚洲网站在线 | 中文字幕在线观看视频一区 | 久久网一区二区 | 久久蜜桃精品一区二区三区综合网 | 国产精品久久久久久久四虎电影 | 国产欧美精品一区二区三区四区 | 小情侣嗯啊哦视频www | 性少妇chinesevideo| 欧美十区 | 国产成人精品一区二区视频免费 | 黄色特级视频 | 久久看视频 | 欧美爱爱视频网站 | 成年人福利视频 | 精品久久久一 | 精品一区二区6 | 噜噜噜在线 | 视频h在线 | 粉嫩粉嫩一区二区三区在线播放 | 毛片a级毛片免费播放100 | 久久精品伊人网 | 午夜激情视频网站 |