Idea 创建分布式 Maven 项目步骤 和 SSM基本配置

Idea (2017.2版) 创建分布式 Maven 项目步骤 & SSM(SpringMVC + Spring + MyBatis) 基本配置;分布式项目主要用于比较大型的、多人合作的项目,小项目可能就没必要这样了。

前言:CSDN上看到一篇高阅读量的介绍Idea 分布式项目创建步骤的博客,比较复杂,但自己实际操作发现并没必要那么复杂,可能是因为Idea 的较新版本做了改进。

参考博客:https://blog.csdn.net/liudongdong0909/article/details/52270604

1)Maven 直接用的Idea 内置版本;创建空白工程ssm_distrituted。

(更新:有个更好的方式:直接把主工程作为父工程,其它两个子工程直接继承父工程即可。)


2)File - New - Module,用Maven - archetype-quickstart 创建父工程模块ssm_parent,用于管理公用Jar 包及其版本,只需要pom.xml 添加依赖即可;name 标签前加:<packaging>pom</packaging>;更新pom 后,需要在模块名上右键 -  Maven - Reimport,然后才会生效。


3)File - New - Module,用Maven - archetype-webapp 创建子工程模块ssm_web,注意要选父工程


4)File - New - Module,用Maven - archetype-webapp 创建子工程模块ssm_service,这个子工程负责服务层和数据层(当然数据层也可以再分离出来),是作为Jar 包给子工程ssm_web 用的,过程同第3步,只是还需要将packaging 改成jar,然后只需要把ssm_service 的依赖坐标添加到ssm_web 的pom.xml 即可。配置正确的话,按住Ctrl,鼠标点击依赖内容(如"com.qf") 是会跳转到ssm_service 的pom 文件的。

        <dependency>
            <groupId>com.qf</groupId>
            <artifactId>ssm_service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

  • 可用如下方法在ssm_web 模块 手动添加模块依赖:


  • 可在Maven 窗口手动创建(install) 模块的jar 包


  • 还有种笨办法:手动改ssm_service 的target 目录到ssm_web 的target 目录,可以运行。

5)配置Tomcat,配好后即可启动,访问静态资源。

6)以下是SSM 主要配置,按框架分;SpringMVC 在ssm_web: 

  • 在web.xml 配置 编码过滤器核心 DispatcherServlet 并指定配置文件位置
	<filter>
		<filter-name>encodingfilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingfilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<!-- 配置springmvc的核心servlet -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/spring-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
  • 在spring-mvc.xml 配置包扫描(子容器管理Controller Bean) & 注解驱动(开启后会注册常用的bean),静态资源忽略(也可配置<mvc:resources>),视图解析器(前缀/后缀)
	<!-- 扫描controller -->
	<context:component-scan base-package="com.qf.ssm.controller"/>

	<!-- 注解驱动 -->
	<mvc:annotation-driven/>
	
	<!-- 静态servlet 处理静态资源文件 -->
	<mvc:default-servlet-handler/>
	
	<!-- 配置视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 配置前缀 -->
		<property name="prefix" value="/"/>
		<!-- 配置后缀 -->
		<property name="suffix" value=".jsp"/>
	</bean>

7)Spring 

  • 在web.xml 配置容器初始化监听器classpath 后加* 表示除了扫描本工程的的classes 目录,还会扫关联Jar 工程的classes 目录。
	<!-- 告诉spring容器,spring的配置文件的位置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring/applicationContext-*.xml</param-value>
	</context-param>
	
	<!-- 初始化spring容器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
  • 在service 层配置applicationContext.xml:包扫描(父容器管理除Controller 以外的Bean)、数据源sqlSessionFactory (用于整合MyBatis) & dao层自动创建代理(即可不用dao 实现类)
	<context:component-scan base-package="com.qf.ssm.service"/> 
	
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>
		<property name="url" value="jdbc:mysql:///mydb"/>
	</bean>
	
    <!-- 扫描所有的dao层的接口,不需要指定 sqlSessionFactory -->
    <mybaits:scan base-package="com.qf.ssm.dao"/>

    <!--也可用比较长的写法 -->
    <!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.qf.dao"/>
        <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"></property>
    </bean>-->
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<!-- 数据源 -->
    	<property name="dataSource" ref="dataSource"/>
    	<!-- 映射文件的扫描 -->
    	<property name="mapperLocations" value="classpath*:com/qf/ssm/dao/mapper/*Mapper.xml"/>
    	<!-- 配置mybatis核心配置文件 -->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
    </bean> 
    ***** 上面映射文件扫描的classpath 不加*的话,会报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.qf.ssm.dao.IUserDao.queryByUserName,因为找不到Mapper.xml 文件加* 表示也会扫描jar 包内的classspath。

8)MyBatis,在servcie (dao) 层

  • mybatis-config.xml 配置插件别名,这两项也可放在applicationContext.xml 中配置。
	<!-- 扫描别名 -->
	<typeAliases>
		<package name="com.qf.ssm.entity"/>
	</typeAliases>
    <!-- 分页插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql"/>
            <!--reasonable 默认false,设为true 时,当pageNum(当前页) 小于1时,会自动为其赋值为1。-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>
  • 映射文件(也可把SQL 用注解写在IDao 方法上):resultMapSQL
<mapper namespace="com.qf.ssm.dao.IUserDao">
	<select id="queryByUserName" resultType="user">
		select * from user where username = #{username}
	</select>
</mapper>

9)按文件分:

1) log4j
2) jdbc.properties
3) springmvc.xml
a) 视图解析器
b) 静态资源忽略
c) 包扫描自定义bean(controller),注解驱动
4) applicationContext.xml

a) 包扫描自定义bean(service,dao)
b) 数据源
c) 事务管理器
d) 事务策略
e) AOP的配置
f) Spring和MyBatis整合(sqlSessionFactoryBean)

5) mybatis-config.xml / mapper.xml
a) 插件; 别名
6) web.xml
a) Springmvc 编码过滤器
b) Spring 监听器 -初始化Spring 容器 ContextLoaderListener,需要context-param

c) SpringMVC核心组件 DispatcherServlet,需要init-param(同context-param 配的两项一样

展开阅读全文

没有更多推荐了,返回首页