1. 程式人生 > >Spring3+SpingMVC+Hibernate4全註解環境配置

Spring3+SpingMVC+Hibernate4全註解環境配置

我沒有使用maven,直接使用Eclipse建立動態Web專案,jar包複製在了lib下。這樣做導致我馬上概述的專案既依賴Eclipse和其專案結構,又依賴我複製在lib下的那些jar包版本。

jar包下載地址:http://pan.baidu.com/s/1gdARAy3

但是我現在還是會以這種形式闡述,因為對於接觸新事物而言的人,我覺得首先需要的是熱情,這樣才能有勇氣面對嘗試過程中的失敗。熱情從哪裡來?熱情從在事物獲得的每一點成就感而來,現在按照以下步驟,我們來獲得一點成就感,然後再討論技術層面的事情(我記得以前剛學Java的時候,如果沒有Eclipse那神奇的自動補全,我一定堅持不下來,早就轉行了。不切實際的艱苦只能浪費時間和磨練心性,它在某些時候不一定是必要的,它應當成為一個可選項而不是一條必經路)。

環境Spring3.2.0,Hibernate4.1.6,Eclipse 3.7,Tomcat5.5,JDK1.6.45,Oracle10g(不要對我的環境版本搭配和資料庫使用抱有異議,我本地恰好就是JDK1.6.45的,恰好Tomcat就是5.5的,恰好Oracle在新建專案前就已經安裝好了)。

這是一個SSH專案,所以我假設各位瞭解或聽過一些J2EE的術語,我們將躍過“從入門到精通”系列的引言,直接讓你來看看我到底是怎麼做的,還有那中間的波折。

首先,我在Eclipse下建立了一個動態Web專案,這時候除了目錄結構外,唯一有點內容的就是WEB-INF下的web.xml了,大話不多說,如果你已經把我貼了下載地址的jar包複製到了lib下,那麼在web.xml裡複製如下內容。

複製程式碼
 1 <listener>
 2         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 3     </listener>
 4 
 5     <context-param>
 6         <param-name>contextConfigLocation</param-name>
 7 <!--         <param-value>/WEB-INF/applicationContext.xml</param-value> 
--> 8 <param-value>classpath:applicationContext.xml</param-value> 9 </context-param> 10 <servlet> 11 <servlet-name>springMVC</servlet-name> 12 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 13 <init-param> 14 <param-name>contextConfigLocation</param-name> 15 <param-value>classpath*:spring-mvc.xml</param-value> 16 </init-param> 17 <load-on-startup>1</load-on-startup> 18 </servlet> 19 <servlet-mapping> 20 <servlet-name>springMVC</servlet-name> 21 <url-pattern>/</url-pattern> 22 </servlet-mapping> 23 <filter> 24 <filter-name>encodingFilter</filter-name> 25 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 26 <init-param> 27 <param-name>encoding</param-name> 28 <param-value>UTF-8</param-value> 29 </init-param> 30 <init-param> 31 <param-name>forceEncoding</param-name> 32 <param-value>true</param-value> 33 </init-param> 34 </filter> 35 <filter-mapping> 36 <filter-name>encodingFilter</filter-name> 37 <url-pattern>/*</url-pattern> 38 </filter-mapping>
複製程式碼

Very Nice!現在除了自動的xml頭,<welcome-file-list>,就是以上spring配置資訊了。這裡配置了Spring和SpringMVC,<listener>和contextConfigLocation是對spring的配置,前者是spring的監聽類,後者是spring配置檔案的路徑,這裡一目瞭然,毫無疑問。

然後從servlet開始,都是SpringMVC的配置,這裡先後配置了類似全域性Filter的類DispatcherServlet的路徑,然後是SpringMVC的配置檔案,我們將在那兒啟用我們的全註解功能。servlet-mapping就真的像Filter一樣,配置了需要攔截的請求路徑,最後是一些字符集配置,在領略到成就感之前不敘述了,免得打擊士氣。

和剛才配置的資訊一致的,我們在src下建立applicationContext.xml(這名字好長!雖然可以換掉它,但我在專案裡一看見這名字就知道它是幹什麼的了,所以不換了)和servlet-mvc.xml。

首先配置applicationContext:

複製程式碼
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />
        <property name="username" value="fm" />
        <property name="password" value="admin" />
    </bean>

    <!-- 配置Hibernate -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="packagesToScan" >
            <list>
                <value></value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.current_session_context_class">thread</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
    
    <context:annotation-config />
    <context:component-scan base-package="com.eap.filemanager.service" />
    <context:component-scan base-package="com.eap.pub.user.service.impl" />
    <context:component-scan base-package="com.eap.pub.user.dao" />
</beans>
複製程式碼

全部的內容,各位直接複製唄。這裡xml頭包括了註解的路徑,然後配置DataSource,配置Hibernate,最後一段就是啟用註解了,說是<context:annotation-config />在這個版本已經不需要寫了,反正我專案現在正在跑著,先複製上來再說。最後路徑掃描,我是定義到包的,因為萬用字元好像沒起作用,老是報錯,我就把所有需要掃描的包都寫上去了。

接下來是SpringMVC,配置SpringMVC之前,其實各位已經可以開始和資料庫進行互動操作了,可以編寫DAO的程式碼了,我再說一遍,DAO是Data Access Object,這一層該寫什麼不該寫什麼,這名字清清楚楚了已經!

servlet-mvc.xml

複製程式碼
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/util
      http://www.springframework.org/schema/util/spring-util.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!-- ViewResolver -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
<!-- 使用預設的註解對映 -->
    <mvc:annotation-driven />

    <!-- 自動掃描controller包中的控制器 -->
    <context:component-scan base-package="com.eap.filemanager.cmd" />
    
</beans>
複製程式碼

xml頭,ViewResolver,然後啟用註解,然後掃描。

這其中,第二部分的意思就是,SpringMVC裡有個跳轉型別叫做ModelAndView,它setView之後,就會自動跑到view名字+字尾的檔案上去,比如setView("index"),那麼在這個配置檔案下,就會自動跳轉到index.jsp上,而且是WEB-INF/jsp下的index.jsp上,WEB-INF下的jsp無法直接通過位址列訪問,所以這種控制可以讓容器對資源訪問許可權進行管理。

大功告成,最困難的配置檔案就這麼搞定了,我可是花了好多時間在網上搜了來著,現在你們已經擁有了基石般的配置檔案資訊,你可以在上面測試萬用字元啦等你覺得方便的任何內容。

好了,看配置檔案上的包也能知道,我的DAO是這麼寫的。

非常奇怪,使用@Controller和@Resource必須得實現介面,得這麼寫:

介面:

public interface IUserDao {
    public List query(String sql);
    public List queryByName(String name);
}

DAO程式碼:

複製程式碼
@Repository
public class UserDao implements IUserDao{
    
    Session session;
    
    @Autowired
    UserDao(SessionFactory sessionFactory){
        session = sessionFactory.getCurrentSession();
        session.beginTransaction();
    }
    
    public List query(String sql) {
        SQLQuery query = session.createSQLQuery(sql).addEntity(User.class);
        return query.list();
    }
    
    public List queryByName(String username){
        String sql = "select * from pub_user where username=?";
        SQLQuery query = session.createSQLQuery(sql).addEntity(User.class);
        query.setString(0, username);
        return query.list();
    }
}
複製程式碼

這裡我可是試了好多種方法,由於我喜歡直接寫sql語句,以充分利用關係資料庫的“關係”特性(畢竟關係型資料庫不是和物件無縫貼合的,要發揮其最大優勢應該從資料表之間的關係入手。有異議就提,最好論據充分,我需要證據不是結論,有了證據我也可以自己分析分析了,說不定我還知道點別的,能得出更有用的結論),所以我在這裡使用了SQLQuery,否則你可以直接session.createQuery(hql)。但是,這裡有一個問題,我繼承HibernateDAOSupport反而會獲取不到session或別的什麼東西。

我在這兒順便附上JavaBean的,完全註解。

複製程式碼
@Entity
@Table(name="pub_user")
public class User {
    @Id
    @Column(name = "id", unique = true, nullable = false)
    String id;
    @Column(name="username")
    String username;
    @Column(name="passwd")
    String passwd;
    @Column(name="user_ip")
    String userIp;

    //getter和setter...自己用Eclipse生成吧,我省略掉了
}
複製程式碼

DAO這樣寫,那麼我的Service就可以這麼寫了。一樣的先介面,再@Controller

public interface UserService {
    public List getUsers();
}
複製程式碼
@Service
public class UserServiceImpl implements UserService{
    @Resource
    IUserDao dao;
    
    public List getUsers(){
        List list = dao.query("select * from pub_user");
        return list;
    }
}
複製程式碼

你看哦,我這裡@Resource,必須寫在介面定義的變數上面,然後Spring會自己去找誰實現了它並且還是@Resource的。關於具體命名管理,還有一些內容就不說了,這個在我們這麼點程式碼的例子中根本就遇不到的。記得我說的,萬一有兩個DAO都實現了這個介面,那該怎麼辦呢,這就是命名管理要做的事情,自己去看吧(說不定你還沒看完這篇部落格就放棄Spring了,那麼寫上去真是多此一舉……什麼?你不會放棄?你不會放棄我也不寫啊,我又沒用到)。

接下來就是@Controller了,這裡不需要介面了,嘿嘿(我就說,UserDao都是UserDao<T>,裡面的save方法都不用定義具體型別了,幹嘛每個模組還要用不同的DAO?既然大家都用一個DAO,幹嘛還要依賴介面程式設計?我直接泛型<T>繼承了一個HibernateDAO後,Spring還不許我這麼訪問DAO。不用拿概念忽悠我,我知道內聚和耦合在什麼樣的規模下會展現出自身特性的怎樣的優缺點,但註解依賴介面程式設計的強制性讓我搭建環境的過程中走了很多彎路。好吧,也有可能明明有辦法不用建介面,只是我不知道罷了)。

相關推薦

Spring3+SpingMVC+Hibernate4註解環境配置

我沒有使用maven,直接使用Eclipse建立動態Web專案,jar包複製在了lib下。這樣做導致我馬上概述的專案既依賴Eclipse和其專案結構,又依賴我複製在lib下的那些jar包版本。jar包下載地址:http://pan.baidu.com/s/1gdARAy3但是

註解方式配置SpringMVC

http 步驟 package 什麽 -1 alt ges con 報錯 1.在J2EE三層的註解: 表現層:@Controller 業務層: @Service 持久層: @Repository 其他: @Component 註解起效需要幾方: 1.需要一個註解 2.直接貼

springmvc mybatis 基於註解事務配置注意事項

1.spring mvc 自動掃描註解的時候,不去掃描@Service <!-- xml --> <context:component-scanbase-package= "org.cn.xxx"> <context:exclude-filt

npm 環境變量配置

命令 內部 log cnblogs 系統設置 ejs 文件 con eight 我們要先配置npm的全局模塊的存放路徑以及cache的路徑,例如我希望將以上兩個文件夾放在NodeJS的主目錄下,便在NodeJs下建立”node_global”及”node_c

windows系統下nodejs安裝、環境配置及刪除NPM配置

例如 參考 -h clas shel fcm gpe tar tortoise nodejs安裝及設置NPM全局路徑 刪除NPM全局路徑配置 一、nodejs安裝及設置NPM全局路徑 第一步:下載安裝文件 下載nodejs,官網:http://nodejs.org/do

Spring3 MVC 註解(一)---註解基本配置及@controller和 @RequestMapping 常用解釋(轉)

nal context pac 配置 註解 com inf 如何 文件中 一:配置web.xml 1)問題:spring項目中有多個配置文件mvc.xml dao.xml 2)解決:在web.xml中 <init-par

Hadoop分布式集群環境配置

work red hat 新增 相關信息 配置過程 cor 成了 大數據集 service Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。 用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。 Hadoop實現

安裝Valet記錄,配置環境變量。

是否 blog 內容 raw code elf fff dev pin 1.安裝 Homebrew 軟件包管理工具,如果已經安裝,可以跳過此步驟 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.

註解配置SSM

新建Maven工程,打包方式 war: 修改pom.xml 檔案增加依賴: <dependencies> <!-- 配置spring-webmvc就不用配spring-context了 --> <dependency> <gro

Spring依賴注入(構造引數注入、集合,陣列屬性注入、XML自動注入 ,註解配置

依賴注入 構造引數注入        --> 常用的是方案一和方案二         MyBean類  YouBean類 <?xml version="1.0" encodin

Spring3.1完全基於註解配置@Configuration類中@Autowire無法注入問題解決

在上回介紹Spring3.1+Hibernate4.1.7基於註解配置的時候(《SpringMVC3.1+Hibernate4.1.7完全基於註解配置(零配置檔案)》)說過,在修改配置方式的時候遇到過不少問題。這裡介紹一下。 方式一 On

mybatis spring 註解配置

pom引入jar包 <!-- mybatis jar start --> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis<

Spring3hibernate4集中式宣告事務管理與註解式事務管理

雖然只加了這麼幾個包,但是來看看maven幫我們新增的最終依賴包,從這就可以看出maven管理專案的好處: 雖然不是每個包都被用到但是這樣就會減少管理jar的繁瑣,況且也可以手動的刪除這些jar,maven還是很不錯吧! [INFO]    antlr:antlr:jar:2.7.7:compile    

Spring Boot2.0整合Mybatis(自動生成註解方式,多環境配置)

本介紹Spring Boot2.0整合Mybatis,通過MyBatis Generator外掛自動生成mapper的sql註解及Provider類的過程,支援多環境的yml配置檔案首先用IDE開發工具(IDEA,STS,Eclipse)建立一個Spring Boot工程sp

Unity3D 釋出APK安卓環境配置步驟、安裝、教程(含Java/Android)(超流程)

Unity3D安卓環境配置執行 本文提供全流程,中文翻譯。Chinar堅持將簡單的生活方式,帶給世人!(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) C

Spring MVC之最簡專案配置(註解)

Environment: Java 1.8.0_131 maven 3.5.0 InteliJ IDEA 2017.1.4 tomcat 8.5.15 簡介 Spring 的目的在於簡化Java EE應用程式的開發,依賴注

SSH註解-annotation詳細配置

使用 Spring 2.5 註釋驅動的 IoC 功能 https://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/  只是參考.  先根據http://panyongzheng.iteye.com/blog/1103591配置好無註解,

Maven搭建MyEclipse10+Struts2.1+Spring3.3+Hibernate3.3註解框架

一、新建專案 1.        新建maven專案 New ->project 選擇Maven project next 在filter輸入webapp 選擇maven-archetype-webapp Group id輸入inscribe,artifac

springmvc+spring3.1+hibernate4配置事務不起作用

在學習SpringMVC的過程中,使用springmvc+spring3.1+hibernate4的時候,採用宣告式的事物,但是在修改和刪除的時候,事務不起作用,具體的2個配置檔案如下; applicationContext.xml如下; <?xml version=

Spring3hibernate4註解式宣告事務管理

註解式宣告事務管理,指的是在java原始碼中利用註解的方式指定事務管理的方法。 applicationContext-common.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="ht