複習_傑信項目(idea創建)

1.搭建項目

1.1 創建父工程和子工程

在這裏插入圖片描述

1.1.1 創建父項目

不選擇任何骨架,點擊next
在這裏插入圖片描述
組名+項目名稱
在這裏插入圖片描述
父工程創建成功後,建議刪除其中的src文件夾,結構如下:
在這裏插入圖片描述
配置pom.xml 通過座標導入jar包:


   <properties>
		 <spring.version>4.2.4.RELEASE</spring.version>
		<struts2.version>2.3.24</struts2.version>
		<hibernate.version>5.0.7.Final</hibernate.version>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
		<shiro.version>1.2.3</shiro.version>
		<cxf.version>3.0.1</cxf.version>
		<c3p0.version>0.9.1.2</c3p0.version> 
	</properties>
  <dependencies>
  	<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.4</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.1.37</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.9.1</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
		  <groupId>commons-fileupload</groupId>
		  <artifactId>commons-fileupload</artifactId>
		  <version>1.3.1</version>
		</dependency>
		<!-- jstl -->
 	    <dependency>
		  <groupId>jstl</groupId>
		  <artifactId>jstl</artifactId>
		  <version>1.2</version>
	    </dependency>
	    
	    <!-- shiro -->
	     <!-- apache shiro dependencies -->
	     <dependency>
	    	<groupId>org.apache.shiro</groupId>
	    	<artifactId>shiro-all</artifactId>
	    	<version>${shiro.version}</version>
	     </dependency>

      
       <!-- spring -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjweaver</artifactId>
		    <version>1.6.8</version>
		</dependency>
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-aspects</artifactId>
		    <version>${spring.version}</version>
		</dependency>
         <dependency>
	    	<groupId>org.springframework</groupId>
	    	<artifactId>spring-aop</artifactId>
	    	<version>${spring.version}</version>
	    </dependency>
	    
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context-support</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-web</artifactId>
		  <version>${spring.version}</version>
		</dependency>

		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-orm</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-beans</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-core</artifactId>
		  <version>${spring.version}</version>
		</dependency>
	<!-- struts2  begin -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>${struts2.version}</version>
			<exclusions>
				<exclusion>
					<artifactId>javassist</artifactId>
					<groupId>javassist</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-spring-plugin</artifactId>
			<version>${struts2.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-json-plugin</artifactId>
			<version>${struts2.version}</version>
		</dependency>
		<dependency>
	  		<groupId>org.apache.struts</groupId>
	  		<artifactId>struts2-convention-plugin</artifactId>
	  		<version>${struts2.version}</version>
	  	</dependency>
		<!-- struts2  end -->
		
		<!-- hibernate begin -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.2.1.Final</version>
		</dependency>
		<!-- hibernate end -->
		
		<dependency>
	  		<groupId>c3p0</groupId>
	  		<artifactId>c3p0</artifactId>
	  		<version>${c3p0.version}</version>
	  	</dependency>
		
		<dependency> 
			<groupId>org.apache.cxf</groupId> 
			<artifactId>cxf-rt-frontend-jaxws</artifactId> 
			<version>${cxf.version}</version> 
		</dependency> 
		<dependency> 
			<groupId>org.apache.cxf</groupId> 
			<artifactId>cxf-rt-transports-http</artifactId> 
			<version>${cxf.version}</version> 
		</dependency>
		
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
		
		<!-- Javamail -->
	    <dependency>
	      <groupId>javax.mail</groupId>
	      <artifactId>mail</artifactId>
	      <version>1.4.4</version>
	    </dependency>
		
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
		</dependency>
 		<dependency>
           <groupId>dom4j</groupId>
		   <artifactId>dom4j</artifactId>
		   <version>1.6</version>
	    </dependency>
	
		<dependency> 
			<groupId>org.apache.poi</groupId> 
			<artifactId>poi</artifactId> 
			<version>3.11</version> 
		</dependency>
		<dependency> 
			<groupId>org.apache.poi</groupId> 
			<artifactId>poi-ooxml</artifactId> 
			<version>3.11</version> 
		</dependency>
		<dependency> 
			<groupId>org.apache.poi</groupId> 
			<artifactId>poi-ooxml-schemas</artifactId> 
			<version>3.11</version> 
		</dependency>
	
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>4.1</version>
	      <scope>test</scope>
	    </dependency>
	   
	    <!-- <dependency>
	    	<groupId>mysql</groupId>
	    	<artifactId>mysql-connector-java</artifactId>
	    	<version>${mysql.version}</version>
	    </dependency> -->
	    <dependency>
	    	<groupId>com.oracle</groupId>
	    	<artifactId>ojdbc14</artifactId>
	    	<version>10.2.0.4.0</version>
	    </dependency>
	    <dependency>
	    	<groupId>javax.servlet</groupId>
	    	<artifactId>servlet-api</artifactId>
	    	<version>2.5</version>
	    	<scope>provided</scope>
	    </dependency>
	    <dependency>
	    	<groupId>javax.servlet.jsp</groupId>
	    	<artifactId>jsp-api</artifactId>
	    	<version>2.0</version>
	    	<scope>provided</scope>
	    </dependency>
	    <dependency>
	    	<groupId>net.sf.ehcache</groupId>
	    	<artifactId>ehcache-core</artifactId>
	    	<version>2.6.6</version>
	    </dependency>
  </dependencies>
  <build>
  	<plugins>
  		<plugin>
  			<groupId>org.apache.maven.plugins</groupId>
  			<artifactId>maven-compiler-plugin</artifactId>
  			<version>3.1</version>
          <configuration>
  				<source>1.7</source>
  				<target>1.7</target>
  			</configuration>
  		</plugin>
  	</plugins>
  </build>

因爲我們使用的阿里的maven倉庫是沒有oracle驅動的,所以我們需要將ojdbc14.jar手動上傳到我們的本地倉庫中

mvn install:install-file -Dfile="E:\ojdbc14.jar" -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar

在這裏插入圖片描述

依賴的jar下載完後,可以在external libraries中看到依賴的外部jar
在這裏插入圖片描述

1.1.2 創建子項目

1.jx_web工程是war工程,所以採用webapp
在這裏插入圖片描述
1.其餘的都是jar工程,所以都不用選擇骨架
在new→module時不要選中Create from archetype,點擊next,然後填一個ArtifactId(項目名),然後一直next就行了

注意:pom文件中要添加<packaging>jar</packaging>

在這裏插入圖片描述

1.2 子工程間的依賴關係

到上一步結束,我們已經有了父工程和子工程,但各個子工程之間是沒有任何關係的,此時我們需要建立子工程之間的依賴關係
Project Structure > Modules
在這裏插入圖片描述
在這裏插入圖片描述
參照上面的操作,我們依次給service和web都添加依賴

1.3 頁面的導入

將頁面導入jx_web項目中webapp中:
在這裏插入圖片描述


2.web.xml以及其他配置文件的

2.1 jx_web的web.xml修改
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

    <!--spring配置文件的加載的監聽器-->
    <context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>classpath:applicationContext.xml</param-value>
    </context-param> 
    
    <listener>
    	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener> 
    
    <!--2.懶加載   OpenSessionInviewFilter   noSession or session is closed-->
    <filter>
    	<filter-name>openSessionInViewFilter</filter-name>
    	<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
    	<init-param>
    		<param-name>singleSession</param-name>
    		<param-value>true</param-value>
    	</init-param>
    	<init-param>
    		<param-name>sessionFactoryBeanName</param-name>
    		<param-value>sessionFactory</param-value>
    	</init-param>

    </filter> 
    <filter-mapping>
    	<filter-name>openSessionInViewFilter</filter-name>
    	<url-pattern>/*</url-pattern>

    </filter-mapping> 
    
   <!-- Shiro Security filter  filter-name這個名字的值將來還會在spring中用到  -->
    <!-- <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetFilterLifecycle</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> -->
    <!--3.struts2核心控制器-->
     <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> 
    
    <!--CharacterEncodingFilter進行編碼過濾-->
    <filter>
    	<filter-name>characterEncodingFilter</filter-name>
    	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    </filter> 
    <filter-mapping>
    	<filter-name>characterEncodingFilter</filter-name>
    	<url-pattern>/*</url-pattern>
    </filter-mapping> 
</web-app>

詳解:
1.spring配置文件的加載的監聽器
(可參考spring第二天spring的web集成)

原始的讀取spring核心配置,初始化spring容器的方法:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

缺點:在創建Spring容器同時,需要對容器中對象初始化。而每次初始化容器的時候,都創建了新的容器對象,消耗了資源,降低了性能。
解決思路:保證容器對象只有一個
解決方案:將Spring容器綁定到Web Servlet容器上,讓Web容器來管理Spring容器的創建和銷燬。
分析:ServletContext在Web服務運行過程中是唯一的, 其初始化的時候,會自動執行ServletContextListener 監聽器 (用來監聽上下文的創建和銷燬),具體步驟爲:

編寫一個ServletContextListener監聽器,在監聽ServletContext到創建的時候,創建Spring容器,並將其放到ServletContext的屬性中保存(setAttribute(Spring容器名字,Spring容器對象) )。 我們無需手動創建該監聽器,因爲Spring提供了一個叫ContextLoaderListener的監聽器,它位於spring-web-4.2.4.RELEASE.jar中。

這個監聽器會在監聽ServletContext創建的時候,默認加載/WEB-INF/applicationContext.xml這個路徑的文件,所以我們還需要通過<context-param>標籤改下核心配置的路徑

2.OpenSessionInViewFilter
(可參考spring第五天_延遲加載問題 OpenSessionInView方案)
Hibernate後技術的核心是Session,session有兩種創建方式

  • openSession(每次獲取的session都是不同)
  • getCurrentSession(需要先將session綁定到當前線程中)

爲了保證事務的一致性,我們必須確保同一個線程中獲取session是同一個(HibernateTemplete底層用了getCurrentSession)

如果使用openSession我們就要手動關閉session(如果不關閉,session就會一直存在,造成資源的浪費),而使用getCurrentSession則無需手動關閉session,在進行事務提交時,會自動關閉session.

所以也就會發生一個問題,我們通常在service的方法中添加事務,例如userService.findById(id),在方法開始之初,session開啓事務,而在方法結束時,事務提交,同時session關閉,因爲session已經關閉了,而此時如果在action獲取值,會由於延遲加載,無法獲取到對象屬性,所以我們需要把session的關閉延長至action

3.struts2核心控制器
(可參考struts2第一天)


2.2 Spring核心配置文件

在不同的模塊中配置自己的spring配置,同時web子模塊中添加spring的總文件
在這裏插入圖片描述
內容如下:

<?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: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.xsd    
	http://www.springframework.org/schema/aop    
	http://www.springframework.org/schema/aop/spring-aop.xsd    
	http://www.springframework.org/schema/tx    
	http://www.springframework.org/schema/tx/spring-tx.xsd    
	http://www.springframework.org/schema/context    
	http://www.springframework.org/schema/context/spring-context.xsd">

</beans>

在Spring的主配置文件applicationContext.xml文件中,進行如下配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
		<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
		<property name="user" value="itcast" />
		<property name="password" value="itcast" />
</bean>
<!-- 2.sessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
<!-- 3.事務管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
	<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 4.txAdvice-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
		<tx:method name="save*"/>
		<tx:method name="insert*"/>
		<tx:method name="update*"/>
		<tx:method name="delete*"/>
		
		<tx:method name="get*" read-only="true"/>
		<tx:method name="find*"  read-only="true"/>
	</tx:attributes>
</tx:advice>

<!-- 5.aop-->
<aop:config>                                             bean(*Service)
	<aop:pointcut id="pointcut" expression="execution(* cn.itcast.jx.service.*Service.*(..))" />
	<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut" />
</aop:config>

1.ComboPooledDataSource:c3p0連接池的數據源

2.LocalSessionFactoryBean:spring集成Hibernate
可參考spring第五天_spring整合Hibernate
作用是將session工廠交給spring管理(這是spring整合hibernate的核心),之前的sessionFactory是在hibernate.cfg.xml文件中維護的

3.HibernateTransactionManager
可參考spring第四天_spring的事務管理機制
spring爲Hibernate提供的事務管理器

4.txAdvice(通知)
就是在aop編程中的通知,簡單來講就是定義了對方法進行了怎麼樣的加強

5.aop
aop編程思想,需要配置通知(如何增強)和切面(對誰增強)


2.3 Hibernate核心配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>
	<property name="dialect">
           org.hibernate.dialect.Oracle10gDialect
       </property>

	<property name="show_sql">true</property>
	<property name="format_sql">false</property>
	<property name="hbm2ddl.auto">update</property>
       <!--校驗模式  JPA  java persistent api-->
	<property name="javax.persistence.validation.mode">none</property>
</session-factory>

</hibernate-configuration>

2.4 Struts2配置

在這裏插入圖片描述
並且根據業務的模塊,再分別創建三個模塊對應的struts-*.xml文件,並且在主的struts.xml文件中包含這三個文件,具體配置如下:

struts-cargo.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.ui.theme" value="simple"/>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 船運模塊 -->
	<package name="cargo" namespace="/cargo" extends="struts-default">

	</package>
</struts>

struts-stat.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.ui.theme" value="simple"/>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 數據統計模塊 -->
	<package name="stat" namespace="/stat" extends="struts-default">
	
	</package>
</struts>	

struts-cargo.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.ui.theme" value="simple"/>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 系統管理模塊 -->
	<package name="sysadmin" namespace="/sysadmin" extends="struts-default">

	</package>
</struts>

在主的struts.xml文件中進行如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<!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.ui.theme" value="simple"/>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8" />

	<package name="default" namespace="/" extends="struts-default">

	</package>

	<!-- 分模塊開發 -->
	<include file="struts/struts-sysadmin.xml"></include>
	<include file="struts/struts-cargo.xml"></include>
	<include file="struts/struts-stat.xml"></include>
	
</struts>

3.SSH框架的運行(登錄功能的測試)

進行到上面一步後,我們可以測試下簡單的登錄功能(不涉及到dao層以及hibernate框架)

3.1 Action的編寫

在jx_web項目中,創建登錄的action,此時,由於系統在編寫的過程中,需要大量的使用系統信息,所以,在編寫的過程中,我們獨立了一個BaseAction作爲所有的Action的父類,未來,各個Action只需要繼承BaseAction即可。
在這裏插入圖片描述
具體的項目架構如下:
在這裏插入圖片描述

3.2 Action的配置

配置Action,在spring的applicationContext-action.xml中的配置如下:

<bean id="loginAction" class="cn.itcast.jx.action.LoginAction" scope="prototype"></bean>
<bean id="homeAction" class="cn.itcast.jx.action.HomeAction" scope="prototype"></bean>

在這裏插入圖片描述
因爲web.xml在初始化時只會讀取src下的applicationContext.xml,不會讀取這個applicationContext-action.xml,所以我們需要引入
在src下的applicationContext.xml中引入

<!-- 6加載其他的spring配置文件  -->
<import resource="classpath:spring/applicationContext-dao.xml"/>
<import resource="classpath:spring/applicationContext-service.xml"/>
<!-- <import resource="classpath:spring/applicationContext-action.xml"/> -->

在struts.xml中的配置如下:

<package name="default" namespace="/" extends="struts-default">
		<action name="login" method="login" class="loginAction">
			<result name="login">/WEB-INF/pages/sysadmin/login/login.jsp</result>
			<result name="success">/WEB-INF/pages/home/fmain.jsp</result>
		</action>	
		<action name="homeAction_*" method="{1}" class="homeAction">
			<result name="fmain">/WEB-INF/pages/home/fmain.jsp</result>
			<result name="title">/WEB-INF/pages/home/title.jsp</result>
			<result name="toleft">/WEB-INF/pages/${moduleName}/left.jsp</result>
			<result name="tomain">/WEB-INF/pages/${moduleName}/main.jsp</result>
		</action>
</package>

此處因爲(spring整合struts2)將action的創建交給spring管理,所以可以直接 class=‘bean的名稱’

測試運行
啓動tomcat,運行,觀察結果
在這裏插入圖片描述


4.模塊之間依賴的問題

我們在web的applicationContext.xml中引入dao模塊的applicationContext-dao.xml,報紅

通過dependencies建立的模塊依賴,只有一層,所用web模塊中只能獲取到service模塊的內容,無法獲取到dao模塊的內容

在這裏插入圖片描述
兩種解決方式

  • 1.還是通過dependencies(這種方式只能在idea工具中,互相依賴,無法對各個模塊進行打包)
    dao依賴util,domain,exception
    service依賴dao,util,domain,exception
    web依賴service,dao,util,domain,exception

  • 2.對模塊進行打包,安裝到maven倉庫,然後再各個模塊依次引入自己需要的jar包
    比如pom.xml(jx_dao)

<dependencies>
    <dependency>
        <groupId>cn.itcast.jx</groupId>
        <artifactId>jx_util</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>cn.itcast.jx</groupId>
        <artifactId>jx_domain</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>cn.itcast.jx</groupId>
        <artifactId>jx_exception</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

5.dao類的導入和配置

5.1 導入工具類

在這裏插入圖片描述

5.2 Dao中類的導入

在項目中,對數據庫的操作存在着相似性,所以我們對DAO進行了封裝,在開發過程中,編寫了如下的抽象類,統一的對數據庫進行操作,存放的位置如下:
在這裏插入圖片描述

5.3 DAO的配置

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="sqlDao" class="cn.jx.dao.common.SqlDao">
    <property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>

<bean id="baseDao" class="cn.jx.dao.impl.BaseDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

在這裏插入圖片描述
這邊由於在dao模塊的applicationContext-dao.xml中引用web模塊applicationContext.xml中定義的對象,所以也會報紅

6.電子報運(telexport)模塊

6.1 編寫jsp

第一步:首先,在home/title.jsp頁面添加“電子報運”模塊
在這裏插入圖片描述
第二步:在WEB-INF/pages文件夾中添加telexport文件夾,(將其他模塊的文件夾複製一份就ok了),具體目錄結構如下如下:
在這裏插入圖片描述
第三步:修改left頁面,代碼如下:
在這裏插入圖片描述
第四步:運行觀察結果:
在這裏插入圖片描述

6.2 數據庫建模和實體類編寫

--創建部門表
CREATE TABLE dept_p (
  DEPT_ID varchar2(40) PRIMARY KEY NOT NULL,
  DEPT_NAME varchar2(40) default NULL,
  PARENT_ID varchar2(40) default NULL,
  STATE number(11) default NULL
);
comment on column dept_p.STATE is '1代表啓用,0代表停用,默認爲1';
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('100', '傑信商貿集團', NULL, 1);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('3d00290a-1af0-4c28-853e-29fbf96a2722', '市場部', '100', 1);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('4028827c4fb6202a014fb6209c730000', '傑信總裁辦', NULL, 1);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('4028827c4fb633bd014fb64467470000', '傑信', NULL, NULL);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE)values  ('4028827c4fb645b0014fb64668550000','船運部cgx',   '4028827c4fb6202a014fb6209c730000', 1);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('73f3fa2f-66a2-4d16-8306-78d89003031b', '網絡部', '100', 1);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('97f88a8c-90fc-4d52-aed7-2046f62fb498', '總經辦', '100', 1);
insert into dept_p  (DEPT_ID, DEPT_NAME, PARENT_ID, STATE) values  ('aeb1c7d3-9a54-4f73-b0ec-0325b83aef45', '船運部', '100', 1);
commit;
select * from DEPT_P;

6.3 部門的CRUD的準備工作

創建cn.itcast.jx.domain包,在包中創建Dept類,具體代碼如下:

package cn.itcast.jx.domain;
public class Dept{
	private String id; //編號
	private String deptName;//部門名稱
	
	private Dept parent;//父部門  自關聯
	
	private Integer state;//狀態
    //getter和setter方法
    ......
}

【第二步】創建Dept.hbm.xml文件,具體配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.jx.domain">
	<class name="Dept" table="DEPT_P">
	    <id name="id" column="DEPT_ID">
	       <generator class="uuid"></generator>
	    </id>
	    
	    <property name="deptName" column="DEPT_NAME"></property>
	    <property name="state" column="STATE"></property>
	    <!-- 自關聯    子部門與父部門    多對一 -->
	    <many-to-one name="parent" class="Dept" column="PARENT_ID"></many-to-one>
	</class>
</hibernate-mapping>

【提示】

  1. 自關聯的配置:
  2. parent表示當前子部門的父親,一個父部門可以擁有多個子部門,而一個子部門只能屬於一個父部門,對於子部門而言是多對一的關係,所以,我們按照多對一的關係配置 自關聯 關係:
    具體配置如下:
<!-- 自關聯    子部門與父部門    多對一 -->
<many-to-one name="parent" class="Dept" column="PARENT_ID"></many-to-one>

配置Dept.hbm.xml

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <!-- 2.Hibernate的屬性 -->
    <property name="hibernateProperties">
        <props>
            <!-- 設置方言 -->
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <!-- 設置打印sql語句 -->
            <prop key="hibernate.show_sql">true</prop>
            <!-- 格式化sql語句 -->
            <prop key="hibernate.format_sql">true</prop>
            <!-- 自動建表 -->
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
    <property name="mappingLocations">
        <list>
            <value>classpath:cn/itcast/jx/domain/*.hbm.xml</value>
        </list>
    </property>
</bean>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章