复习_杰信项目(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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章