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页面

编译后:
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提供应用程序的信息