SpringMVC配置文件的处理流程(整合MyBatis)

第一步.引入maven依赖

分别是groupId : artifactId :version
org.springframework:spring-webmvc:5.0.6.RELEASE
jstl :jstl :1.2
javax.servlet:javax.servlet-api:3.1.0(scope:provided)
org.springframework:spring-context-support:5.0.6.RELEASE
org.springframework:spring-jdbc:5.0.6.RELEASE
org.springframework:spring-tx:5.0.6.RELEASE
mysql:mysql-connector-java:5.1.34
org.mybatis:mybatis:3.4.6
org.mybatis:mybatis-spring:1.3.2
com.alibaba:druid:1.1.10
com.github.pagehelper:pagehelper:5.
ch.qos.logback:logback-classic:1.2.3
org.projectlombok:lombok:1.16.20

第二步.配置前端控制器DispatcherServlet

  <servlet>
      <servlet-name>et1812</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>et1812</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>

第三步.配置Spring的配置文件

  3.1 <context:component-scan base-package="com.etoak" />

3.2 <mvc:annotation-driven />
3.3 视图解析器
3.4 配置数据源
3.5 整合MyBatis
3.5.1 SqlSessionFactoryBean
dataSource:3.4数据源
mapperLocations:sql文件位置
typeAliasesPackage:别名
plugins->分页插件
3.5.2 Mapper接口扫描
MapperScannerConfigurer
3.5.3 事务管理器

    <!-- 扫描bean的注解 -->
    <context:component-scan base-package="com.etoak" />

    <!-- 注解驱动 -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/pages/" />
      <property name="suffix" value=".jsp" />
    </bean>

    <!-- 数据源 -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
      <property name="driverClassName" value="${jdbc.driverClassName}" />
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.username}" />
      <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- 开始整合MyBatis -->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="mapperLocations" value="classpath:mappers/*.xml" />
      <property name="typeAliasesPackage" value="com.etoak.bean" />
      <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <props>
                        <prop key="reasonable">true</prop>
                    </props>
                </property>
            </bean>
        </array>
      </property>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="basePackage" value="com.etoak.mapper" />
    </bean>
    <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
    </bean>
    <tx:annotation-driven transaction-manager="tx" />

第四步.编码

创建数据库和表
编写表对应的Bean、Page类
写Mapper接口、Sql配置文件
写Service
写Controller
写JSP

关于事务的注意事项

@Transactional

  • 默认对非检查型异常(运行时异常)起作用;
  • 可以使用@Transactional的属性rollbackFor指定异常进行数据回滚;
    比如:@Transactional(rollbackFor = Exception.class)
    一定要熟悉事务传播特性、隔离级别
    举例说明
    1.运行时异常 下图代码会出现异常但不会往数据库中插入数据
	/**
	 * 主要测试事务的问题
	 */
	@Override
	//@Transactional(rollbackFor = Exception.class)
	@Transactional
	public int addUser(User user) throws SQLException {
		int result = userMapper.addUser(user);
		log.info("添加结果,影响行数:{}", result);

		// throw new RuntimeException();
		 int i = 1 / 0;

		// 检查型异常,非运行时异常
		// throw new SQLException();

		return result;
	}

2.非运行异常
会报异常 但是数据却插进数据库了

	/**
	 * 主要测试事务的问题
	 */
	@Override
	//@Transactional(rollbackFor = Exception.class)
	@Transactional
	public int addUser(User user) throws SQLException {
		int result = userMapper.addUser(user);
		log.info("添加结果,影响行数:{}", result);

		// throw new RuntimeException();
		 int i = 1 / 0;

		// 检查型异常,非运行时异常
		 throw new SQLException();

		//return result;
	}

3.使用@Transactional的属性rollbackFor指定异常进行数据回滚
这样的话会报异常,也不会往数据库中插入数据

` /**
* 主要测试事务的问题
*/
@Override
@Transactional(rollbackFor = Exception.class)
//@Transactional
public int addUser(User user) throws SQLException {
int result = userMapper.addUser(user);
log.info(“添加结果,影响行数:{}”, result);

	// throw new RuntimeException();
	 int i = 1 / 0;

	// 检查型异常,非运行时异常
	 throw new SQLException();

	//return result;
}`

========================================================

今日收获:

1.<mvc:annotation-driven>

  <!-- 注解处理器映射器-->
   <!-- <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
 
   <!-- 注解处理器适配器-->
   <!-- <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
 
   <!-- 使用<mvc:annotation-driven/>可以代替上面的映射器和适配器;
   会自动注册RequestMappingHandlerMapping和   RequestMappingHandlerAdapter两个bean,这是SpringMVC为@Controllers分发请求所必须的,
   并提供了数据绑定支持、
   @NumberFormatannotation支持、
   @DateTimeFormat支持、
   @valid支持、读写XML的支持(JAXB)和JSON的支持(默认jackson)等功能。-->
   <mvc:annotation-driven />

2.整合Mybatis的配置:

尤其是对 typeAliasesPackage:别名的新认识
对应的某某Mapper.xml中的resultMap可以直接用
typeAliasesPackage对应value所在位置下的类名小写直接引用
,这个我今天才知道。。。。恍然大悟
开始整合MyBatis
1.SqlSessionFactoryBean
dataSource
mapperLocations:sql文件位置
typeAliasesPackage:别名
plugins->分页插件 Mapper接口扫描
2.MapperScannerConfigurer
3.事务管理器

	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations" value="classpath:mappers/*.xml" />
		<property name="typeAliasesPackage" value="com.etoak.bean" />
		<property name="plugins">
			<array>
				<bean class="com.github.pagehelper.PageInterceptor">
					<property name="properties">
						<props>
							<prop key="reasonable">true</prop>
						</props>
					</property>
				</bean>
			</array>
		</property>
	</bean>

SpringMVC的配置步骤详细解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值