中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

發布時間:2020-07-15 16:09:54 來源:網絡 閱讀:359 作者:jjjssswww 欄目:數據庫

1. 采用到的開源項目漫談

   Spring 迷人的依賴注入特性, 使其已經穩穩的占據在 JavaEE 項目引用開源項目列表中的上層位置。

   秉承低耦合高內聚的遵旨, Spring 提倡的對象工廠解耦類關系的思想已深入到每個攻城獅的心中。

   SpringMVC 做為 Spring 的干兒子,最讓我沉醉的是她強大的擴展能力,深邃的像大海一樣。

   前端無論是 freemarker/velocity/jsp...,后端 DAO 層無論是傳統的 ORM 還是新近上位的領域模型。

   她的態度始終如一,給你360度最貼心的呵護,有一人對你如此,此生足矣。

   官網地址:http://projects.spring.io/spring-framework/

   項目中關于 SpringMVC + Spring 的依賴:

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

       <!--spring mvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.3.RELEASE</version>
        </dependency>

        <!-- Spring-orm -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.3.3.RELEASE</version>
        </dependency>

        <!-- Spring AOP 動態代理 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   這上面我想說的是 AspectJ 這個東東, AspectJ 是最早、功能比較強大的 AOP 實現之一。

   在 Java 領域,AspectJ 中的很多語法結構基本上已成為 AOP 領域的標準。

   Spring 也有自己的 Spring-AOP,Spring-AOP 采用運行時生成代理類,底層可以選用 JDK 或者 CGLIB 動態代理。

   通俗點,AspectJ 在編譯時增強要切入的類,而 Spring-AOP 是在運行時通過代理類增強切入的類,效率和性能可想而知。

   所以 Spring 在 2.0 的時候就已經開始支持 AspectJ ,現在到 4.X 的時代已經很完美的和 AspectJ  結合到一起。

   有興趣的可以在接著讀讀:https://www.oschina.net/translate/comparative_analysis_between_spring_aop_and_aspectj?cmp

   Druid 出自阿里巴巴技術團隊之手,個人認為是比較好的數據庫連接池之一,尤其是監控部分是我的最愛。

   官方 github 地址:https://github.com/alibaba/druid/wiki/常見問題

   項目中的 web.xml 配置監控配置和監控界面:

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   <!--Druid 數據庫連接池監控-->
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

 

 Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   JPA 作為 Sun 公司引入的 ORM 規范,就像是 JDBC 之于各種數據庫驅動 Jar,

   不要去在意使用了什么樣的數據庫,用 JDBC 提供的規范方法去擼代碼即可。

   JPA 制定持久層規范,相同與抽象接口,有 ORM 框架擼具體的實現層。

   Sun 想實現 ORM 技術統一,可能不遠的將來,你不用在糾結選擇什么樣子的 ORM 框架。

   而現有熱門的 ORM 框架會漸漸失去光澤,這畢竟是個漫長的過程,讓我們拭目以待。

回到頂部

2. 方案整體一覽

   方案中所有的類都位于 SpringContext 中,由 Spring 統一進行管理。

   讓 Spring 統一管理的前提是你要告訴有這樣一個類需要它管理,目前我接觸到的告訴途徑有兩種。

   傳統的 xml 配置和注解方式,xml 配置和注解方式各有優劣,比如 xml 配置的優點:

   a. 如果你公司項目在引用另外一個公司的 jar,這時候,唯一可行方式為 xml 配置。

   b. 如果類之間的依賴關系變動頻繁,xml 配置是比較優秀的,改動代碼和改動配置文件,無論是技術上還是風險上,xml 都穩贏注解。

   注解聲明的方式優點:代碼和聲明在一起,開發的時候不用切來切去,比 xml 配置聲明要簡單明了的多。

   現在很多主流的框架都引入了注解,但也無法擯棄 xml 配置聲明的方式。

   

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   在這個方案中我使用干凈簡單注解的方式,controller 包下使用注解@controller,dao-impl 包下使用@Repository,service 包下使用@service。

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

  控制層注入服務實例,服務層注入數據訪問層對象,持久層對象由 JAP 進行注解,頁面通過控制層來傳輸和獲取數據。

  web.xml:

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案 View Code

  maven pom.xml:

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案 View Code

回到頂部

3. DAO 層的種種設計思路

   Controller 和 Service 層非常容易理解,這里不贅述了。

   DAO 層 中 BasePo 希望將一些共有的屬性抽象在父類當中(屬性由具體項目需求決定)。

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案 BasePO

   BaseDaoImpl 希望將一些公共的數據訪問方法實現在父類當中(我這里的方法可能有點少,可以由具體項目增加)。

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案 BaseDaoImpl

   使用 JAP 注解編寫業務使用到的持久層對象。

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

@Entity
@Table(name = "t_user")public class User extends BasePO {
    @Column(nullable = false)
    String name;
    @Column(nullable = false)
    String pwd;
   ....getter/setter }

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   配置啟動時掃描 POJO 的動作,至于是新建還是更新都有配置選項,可以自己查閱相關文檔。

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

    <!-- 配置hibernate session工廠,需添加 spring-orm -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
            </props>
        </property>

        <!-- 自動掃描注解方式配置的hibernate類文件 -->
        <property name="packagesToScan">
            <list>
                <value>com.rambo.sdh.pojo</value>
            </list>
        </property>
    </bean>

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   操縱數據庫最主要的事務管理,采用 AOP 聲明方式,在執行含有數據變動的方法前后進行攔截。

   采用 AOP 聲明方式進行攔截的好處,不用去關注數據庫事務的開啟和關閉,將重心放到業務邏輯上面。

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

<!-- 配置事務管理器 -->
    <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- 聲明式容器事務管理 ,transaction-manager指定事務管理器為transactionManager- -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*"/>
            <tx:method name="save*"/>
            <tx:method name="update*"/>
            <tx:method name="modify*"/>
            <tx:method name="edit*"/>
            <tx:method name="delete*"/>
            <tx:method name="remove*"/>
            <tx:method name="repair"/>
            <tx:method name="deleteAndRepair"/>

            <tx:method name="get*" propagation="SUPPORTS"/>
            <tx:method name="find*" propagation="SUPPORTS"/>
            <tx:method name="load*" propagation="SUPPORTS"/>
            <tx:method name="search*" propagation="SUPPORTS"/>
            <tx:method name="datagrid*" propagation="SUPPORTS"/>
            <tx:method name="*" propagation="SUPPORTS"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut id="transactionPointcut" expression="execution(* com.rambo.sdh.service..*Impl.*(..))"/>
        <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
    </aop:config>

Spring + SpringMVC + Druid + JPA(Hibernate impl) 給你一個穩妥的后端解決方案

   上面配置文件的大體意思是說,在包 com.rambo.sdh.service..*Impl.* 下所執行的已 add/save/update.....開頭的方法。

   方法在執行前后都會被 HibernateTransactionManager 攔截住,進行事務的開啟和關閉。

   當然還有一些其他的事情,有興趣可以 debug 源碼去一探究竟。

   貌似說的也差不多了,該方案為 javaweb 后端解決方案,前端用你想用的渲染技術即可。

   項目開源 GIT 地址已在最上面給出,如果有興趣的可以檢出到本地跑一跑,該方案中小公司其實都挺適合,上手和開發速度快。


向AI問一下細節

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

AI

凌云县| 康马县| 团风县| 阿克陶县| 隆回县| 三门峡市| 南阳市| 鄂托克前旗| 淄博市| 满洲里市| 吴旗县| 长宁县| 新巴尔虎左旗| 缙云县| 会泽县| 新民市| 兴国县| 德保县| 柞水县| 芷江| 连江县| 峨眉山市| 桓仁| 高平市| 句容市| 沙坪坝区| 安乡县| 分宜县| 湖口县| 武安市| 额敏县| 永平县| 长汀县| 临漳县| 佛坪县| 五河县| 十堰市| 出国| 聂荣县| 邹城市| 突泉县|