天天看点

Java基础知识——SSM项目架构

Spring整合mybatis:

整合目的:不需要繁琐的创建SqlSessionFactory等,而只需要能够将DAO代理对象注入到Service对象调用方法即可。

所以我们需要:编写spring-mybatis配置类

三个作用:

1:dataSource 配置数据源

2:sqlSessionFactory配置工厂,加载数据源

3:配置MapperScannerConfigurer

MapperScannerConfigurer类似于component-scan,能够扫描Component等进行注入,但是区别在于,他会将扫描的接口全部创建为MapperFactoryBean。

MapperFactoryBean会结合SqlSessionFactory创建代理类并且实现UserMapper 接口,从而能够进行数据库操作

注入和代理

注意:如果是无配置文件的实现方式,可以直接利用MapperScannerConfigurer扫描

@Repository
public interface ProjectDao {
	/**获取所有项目信息*/
	@Select("select * from tms_projects")
	List<Project> findObjects();
           

而如果是配置文件型,两种方法

1:MapperScannerConfigurer扫描:配置文件和@Repository接口在同一包下且名字必须相同

2:需要在sqlSessionFactory进行配置,利用Factory扫描配置类

<property name="mapperLocations" >
				<list>
		<value>classpath:cn/tedu/ttms/*/dao/*.xml</value>	
				</list>
			</property>
           

并且,如果使用maven,会默认忽视所有xml文件,所以还需要在pom.xml中配置

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>				
           

原理:

WEB-INF/classes:java,resources里的源码打包进入和编译后的class文件

原来方式:但是仅仅会打包Java下的.java文件和resources里的所有文件,而.xml等文件会自动忽略。

目的:有时候,比如mybatis的mapper.xml文件,我们习惯把它和Mapper.java放一起,都在src/main/java下面,这样利用maven打包时,就需要修改pom.xml文件,来把mapper.xml文件一起打包进jar或者war里了,否则,这些文件不会被打包的。设置如上

注意点:

1:如果build中设置了打包方式,那么原来方式就会失效。所以记住要

<resource>
                <directory>src/main/resources</directory>
            </resource>
           

2:打包进来的xml文件不能是空文件否则无法解析(sax解析失败),也不能出错

数据库配置:

数据库分为5.0和8.0,区别在于

1:jar包改变。8.0需要使用mysql.connector.mysql8.0的jar包

2:需要使用com.mysql.cj.jdbc.Driver驱动

3:url需要声明useSSL=false,如果使用true加密协议,可能因为连接时间过长导致报错

spring-mybatis代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-4.3.xsd
       http://www.springframework.org/schema/data/jpa 
       http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<bean id="dataSource"
		  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
		<property name="url"
				  value="jdbc:mysql://localhost:3306/ttms?useSSL=false"/>
		<!-- 改为你的地址即可 -->
		<property name="username" value="root"/>
		<property name="password" value="123456789"/>
	</bean>

     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	   <property name="dataSource" ref="dataSource"></property>
	   <property name="configLocation" value="classpath:mybatis-config.xml"></property>
	   <!-- 自动扫描mapping.xml文件 -->
	   <property name="mapperLocations" >
			<list>
			<value>classpath:mapper/*/*.xml</value>
			<value>classpath:cn/tedu/ttms/*/dao/*.xml</value>		<!-- 第一个*:任意的一个目录      第二个*:任意的一个文件前缀-->
			</list>
		</property>
	 </bean>
    <!-- Mapper接口所在包,Spring会自动查找其下的Mapper并封装成Bean-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="cn.tedu.**.dao "/>
	</bean>
</beans>
           

Spring 整合SpringMVC:

目的:使得Spring中的@Service不需要再通过ClassPathXmlApplicationContext进行获取工厂获取Bean, 而是通过控制反转的方式进行注入@Contoller

所以我们需要配置:

一:配置web.xml,进行配置文件的启动

这里的目的是进行加载配置文件,通过init-param配置classpath:spring-*.xml,加载我们配置的所有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" version="2.5">
  <display-name>ttms1.01</display-name>
   <servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-*.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>
           

二:配置spring-mvc.xml,进行配置文件的启动

1:配置需要的视图解析器ViewResolver

2:进行注解扫描component-scan,扫描我们定义的@Controller(包含适配器和HandlerMapping注解)

3:开启注解和类型转换[非必须]

<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
        class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    </bean>
           

完整的spring-mvc代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
xmlns="http://www.springframework.org/schema/beans" 
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="  
   http://www.springframework.org/schema/beans   
   http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
   http://www.springframework.org/schema/mvc   
   http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
   http://www.springframework.org/schema/tx   
   http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
   http://www.springframework.org/schema/context  
   http://www.springframework.org/schema/context/spring-context-4.3.xsd" >  

<context:component-scan base-package="cn.tedu.ttms" >
</context:component-scan>
<!-- spring mvc 注解及类型转换 -->
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
</bean>
<!-- spring mvc 视图解析器 -->    
<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".jsp"></property>
</bean>  
<!-- 配置文件上传的视图解析器 -->
<bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<!-- 默认编码 -->
	<property name="defaultEncoding" value="utf-8" />
	<!-- 文件大小最大值 -->
	<property name="maxUploadSize" value="10485760000" />
	<!-- 内存中的最大值 -->
	<property name="maxInMemorySize" value="40960" />
</bean>  
           

maven项目的结构:

编译前:

注意webapp=WEB_INF+各种资源如图片,js,css

views通常是jsp页面

Java基础知识——SSM项目架构

编译后:

classpath=WEB_INF/classes

WEB-INF/classes:java,resources里的源码打包进入和编译后的class文件

WEB-INF/lib:pom.xml中引入的jar包

META-INF:描述jar文件中的信息的一个目录,理解为所有jar中META-INF目录的集合

jar文件:class文件的zip压缩存档,有META-INF目录,含有manifest.mf的文件,包含了jar文件的内容描述,在应用程序运行时向JVM提供应用程序的信息

Java基础知识——SSM项目架构