亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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();        }    }}

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区乱码aⅴ蜜桃女| 92福利视频午夜1000合集在线观看| 91天堂在线视频| 日韩中文字在线| 久久精品最新地址| 午夜精品美女自拍福到在线| 久久久久久久久久久国产| 欧美成人午夜免费视在线看片| 日韩有码在线播放| 超碰日本道色综合久久综合| 久久亚洲精品成人| 国产91免费观看| 69久久夜色精品国产69乱青草| 国产成人精品a视频一区www| 欧美激情女人20p| 日本精品久久久久影院| 午夜精品蜜臀一区二区三区免费| 欧美一级淫片丝袜脚交| 色噜噜久久综合伊人一本| 在线激情影院一区| 精品久久久久久久久久国产| 国产成人免费av电影| 在线观看视频亚洲| 欧美精品国产精品日韩精品| 日韩av观看网址| 久久色在线播放| 亚洲一品av免费观看| 日本精品视频网站| 久久99久久久久久久噜噜| 国产亚洲一区精品| 国产剧情久久久久久| 91精品久久久久久久久青青| 狠狠躁夜夜躁人人爽天天天天97| 久久久在线观看| 欧美亚洲视频在线观看| 91中文精品字幕在线视频| 日韩中文字幕在线播放| 欧美疯狂做受xxxx高潮| 日韩黄色高清视频| 精品电影在线观看| 4438全国成人免费| www.亚洲一区| 亚洲午夜激情免费视频| 在线电影欧美日韩一区二区私密| 亚洲女性裸体视频| 亚洲伊人久久大香线蕉av| 亚洲精品白浆高清久久久久久| 国产精品视频一区国模私拍| 在线视频欧美日韩| 91美女高潮出水| 久久精品99久久久香蕉| 2018中文字幕一区二区三区| 国产精品视频白浆免费视频| 777777777亚洲妇女| 成人性教育视频在线观看| 欧美电影《睫毛膏》| 亚洲天堂成人在线| 国产91亚洲精品| 欧美日韩国产一区二区三区| 久久男人资源视频| 美女撒尿一区二区三区| 精品久久久久久久久久久| 91精品视频播放| 日韩美女福利视频| 国产精品尤物福利片在线观看| 欧美大人香蕉在线| 日韩在线www| 久久视频国产精品免费视频在线| 欧美激情中文字幕在线| 亚洲成色777777女色窝| 国产精品自产拍在线观| 欧美日韩另类字幕中文| 日韩在线播放一区| 亚洲精品美女在线观看| 日韩电影大全免费观看2023年上| 欧美有码在线观看| 中文字幕亚洲精品| 国内成人精品一区| 国产一区二区三区在线看| 精品美女永久免费视频| 久久久精品久久久久| 亚洲最大av网| 亚洲福利在线视频| 亚洲欧美一区二区三区四区| 69av成年福利视频| 懂色av中文一区二区三区天美| 成人激情电影一区二区| 日韩中文视频免费在线观看| 国产精品一区二区性色av| 精品国产欧美一区二区五十路| 中文字幕久热精品视频在线| 欧美黑人xxxⅹ高潮交| 亚洲xxxx妇黄裸体| 一区二区三区 在线观看视| 欧美一区二区大胆人体摄影专业网站| 久久激情视频免费观看| 欧美中文字幕在线| 91久久嫩草影院一区二区| 欧洲成人免费视频| 在线精品国产欧美| www.xxxx欧美| 久久久久99精品久久久久| 亚洲国产精品中文| 国产精品免费一区豆花| 欧美日本高清一区| 国产精品扒开腿做爽爽爽的视频| 91九色国产在线| 亚洲色图美腿丝袜| 欧美极品欧美精品欧美视频| 91在线观看免费高清完整版在线观看| 日韩免费在线播放| 亚洲小视频在线| 97人人做人人爱| 亚洲国产成人久久综合| 国产不卡在线观看| 国产一区二区三区三区在线观看| 一区二区三区四区精品| 欧美日韩在线影院| 中文字幕av一区| 成人写真福利网| 自拍视频国产精品| 欧美日韩亚洲一区二区| 成人免费网站在线观看| 亚洲精品久久在线| 91精品久久久久久久久久久久久| 久久久久久九九九| 久久九九国产精品怡红院| 91精品在线观看视频| 欧美激情一区二区久久久| 日韩免费高清在线观看| 一区二区三区视频观看| 中文字幕亚洲欧美日韩在线不卡| 国产亚洲精品久久久久久| 一区二区亚洲精品国产| 亚洲欧美三级在线| 亚洲美女av在线| 久久不射热爱视频精品| 国产精品久久91| 亚洲成年网站在线观看| 久久久久久久久久av| 日韩av在线免费观看| 91老司机精品视频| 在线观看国产欧美| 国产精品入口日韩视频大尺度| 久久久久久美女| 亚洲精品色婷婷福利天堂| 日韩视频中文字幕| 成人网址在线观看| 最新69国产成人精品视频免费| 国产精品成人播放| 91高潮精品免费porn| 国产精品av网站| 欧美一级大片在线观看| 在线观看成人黄色| 91精品视频观看| 亚洲第一男人av| 欧美国产在线视频| 中文字幕不卡av| 亚洲欧美日韩精品久久亚洲区| 色青青草原桃花久久综合| 亚洲国产成人在线视频| 亚洲第一精品久久忘忧草社区| 亚洲天堂网站在线观看视频| 美女999久久久精品视频|