项目结构与数据库设计

  1. 项目结构
    图片说明
  2. 数据库设计
    图片说明

注意:员工的所属部门属性是部门属性的外键,要会写:
alter table staff add constraint foreign key(did) references department(id);

项目搭建

图片说明
1.先创建一个maven类无模板的父moudle 因为父moudle中无代码,所以删除src文件夹。
2.在父moudle中创建两个子moudle
3.在sm_service中引入依赖。Mybatis依赖和spring依赖,以及事务依赖

  • mybatis依赖
    mysql-connector-java、mybatis
  • spring依赖
    spring-core、spring-beans、spring-context、spring-aop、aspectjweaver
  • 事务依赖
    spring-jdbc、spring-tx、mybatis-spring

4.在sm_web中引入依赖

  • 引入sm_service依赖
  • 引入javax.servlet-api、jstl

5.在sm_web创建具体的包

  • 由于maven生成的文件中,没有java包,所以在main中新建一个文件夹并设置为resource文件夹.
    在java中创建com.imooc.sm包下,分别创建controller(用于放置处理页面请求类)和global(用于放置过滤器类)

  • 将素材放置在webapp文件夹中,
    图片说明

  1. 在sm_service创建具体的包
    在java中创建com.imooc.sm包下,创建service(业务层)、dao(持久层)、entity(实体类)
    图片说明

  2. spring全局配置

  • spring整合mybatis
    • 将spring.xml引入到sm_service的resources文件夹中,在spring.xml中,将 sqlsessionfactory和持久化操作对象交给spring进行管理。
    <!--spring整合mybatis-->

    <!--数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/sm?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
    <!--session工厂  -->
    <!--typeAliasesPackage 可以简化名称生成别名-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.imooc.sm.entity"/>
    </bean>
    <!--持久化对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.imooc.sm.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

</beans>
  • 声明式事务
    有三个部分:(1)事务管理器(2)通知(3)植入

    <!--声明式事务-->
      <!--事务管理器-->
      <bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
       </bean>
    
      <!--通知-->
      <tx:advice id="txAdvice" transaction-manager="transcationManager">
          <!--将get.find.search方法全部设置为只读。然后其他方法事务都为required,有事务时使用当前事务,无事务创建一个事务-->
          <tx:attributes>
              <tx:method name="get*" read-only="true"/>
              <tx:method name="find*" read-only="true"/>
              <tx:method name="search*" read-only="true"/>
              <tx:method name="*" propagation="REQUIRED"/>
          </tx:attributes>
      </tx:advice>
      <!--植入-->
      <aop:config>
          <!--任意返回值 com.imooc.sm.service.任意包下的.任意方法(任意输入值)-->
          <aop:pointcut id="txPointcut" expression="execution(* com.imooc.sm.service.*.*(..))"/>
          <!--将通知和植入关联起来-->
          <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    
      </aop:config>
  • 全局扫描

<!--自动扫描-->
    <context:component-scan base-package="com.imooc.sm"/>
    <aop:aspectj-autoproxy/>