第八章 MyBatis-Spring整合
配置 MyBatis-Spring 项目需要以下几步:
1 配置数据源
2 配置SqlSessionFactory
3 可选择的配置爱 SQLSessionTemplate。在同时配置SqlSessionTemplate和SqlSessionFactory的情况下,优先采用SqlSessionTemplate。
4 配置Mapper,可以配置单个Mapper,也可以通过扫描的方法生成Mapper,比较灵活。Spring IoC会生成对应接口的实例,这样就可以通过注入的方式来获取资源了。
5 事务管理。
配置SqlSessionFactoryBean
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF8&allowMultiQueries=true"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
<property name="maxPoolSize" value="100"/>
<property name="minPoolSize" value="10"/>
<property name="maxIdleTime" value="60"/>
</bean>
<!-- mybatis 的 sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- mybatis mapper接口自动扫描、自动代理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.mapper" />
</bean>
<!-- 事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务传播行为 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="page*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="is*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 织入事务增强功能 -->
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.test.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
</aop:config>
<!-- 配置扫描spring注解(@Component、@Controller、@Service、@Repository)时扫描的包,同时也开启了spring注解支持 -->
<!-- 这个地方只需要扫描service包即可,因为controller包由springMVC配置扫描,mapper包由上面的mybatis配置扫描 -->
<context:component-scan base-package="com.test.service"></context:component-scan>
<!-- 开启spring aop 注解支持,要想aop真正生效,还需要把切面类配置成bean -->
<aop:aspectj-autoproxy/>
配置 mybatis-config
<configuration>
<settings>
<!-- 使用log4j2作为日志实现 -->
<setting name="logImpl" value="LOG4J2"/>
</settings>
<typeAliases>
<!-- 为指定包下的pojo类自动起别名 -->
<package name="com.test.pojo"/>
</typeAliases>
<mappers>
<!-- 自动加载指定包下的映射配置文件 -->
<package name="com.test.mapper"/>
</mappers>
</configuration>
配置 Spring-MVC
<!-- 配置扫描spring注解时扫描的包,同时也开启了spring注解支持 -->
<context:component-scan base-package="com.test" />
<!-- 开启springMVC相关注解支持 -->
<mvc:annotation-driven />
<!-- 开启spring aop 注解支持 -->
<aop:aspectj-autoproxy/>
<!-- 约定大于配置:约定视图页面的全路径 = prefix + viewName + suffix -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="defaultEncoding" value="UTF-8" />
<property name="maxInMemorySize" value="40960" />
</bean>
<!-- 资源映射 -->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/images/" mapping="/images/**" />
<mvc:resources location="/lib/" mapping="/lib/**" />
配置 web.xml
<!-- 初始化spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设置post请求编码和响应编码 -->
<filter>
<filter-name>characterEncodingFilter</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>
<init-param>
<!-- 为true时也对响应进行编码 -->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<!-- 设置为/*时才会拦截所有请求,和servlet有点区别,servlet设置为/*只拦截所有的一级请求,如/xx.do,而不拦截/xx/xx.do;servlet设置为/时才会拦截所有请求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:mybatis-beans.xml,
classpath:dispatcher-servlet.xml
</param-value>
</context-param>
<!-- 初始化springMVC容器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置完以上 文件后 就可以进行 开发步骤,在根据项目需求做一定的配置调整。