大家聊springmvc+mybatis

Spring-mvc与mybatis框架整合
1.为什么选择spring-mvc与mybatis结合
Spring-mvc与struts都是主流的mvc框架,在这里我个人比较喜欢spring-mvc,简单说一下以下几点原因:
A.
Spring-mvc可以通过一套注解让普通类变成控制类,不用实现任何接口
需要一张配置表来mapping,也就是mvc的配置文件,具体工作流程如下:
请求dispatcherServlet(中央控制器)handlerMapping(寻找匹配)handlerAdapter(作用于mapping一样,主要解决一些内部接口统一的问题)handler(执行)modleAndView(数据和页面)viewResolver(将model数据放到view中,形成页面)view(jsp)

B. spring-mvc是基于方法的设计,struts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,效率略低一些。
C. struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。 spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量
D. spring3 mvc处理ajax的请求方便 ,只需一个注@ResponseBody,然后直接返回响应文本即可。效果如下:
/**
* 转json
*/
@ResponseBody
@RequestMapping(value=”/testSer7”)
public List test7() throws IOException{
List users=new ArrayList<>();
User user=new User();
user.setUsername(“张三”);
user.setPassword(“ok”);
User user1=new User();
user1.setUsername(“李四”);
user1.setPassword(“ok”);
users.add(user);
users.add(user1);
return users;
}
E. 另外spring-mvc有视图解析器,方便前台页面的交互,免去了配置文件的配置
所以本人比较喜欢spring-mvc,另外hibernate与mybatis,都是流行的orm框架,mybatis使用纯粹的sql语句,hibernate框架是全自动的,从建表,表关系的关联到数据的操纵,显然很方便,但是付出的代价是效率偏低。另外mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用。
所以把spring-mvc与mybatis整合,节省了不少代码,spring-mvc比起struts少了大量的action方法的配置,另外关于参数的获取与传递,四大作用域的获取也有很大的改变,mvc有自己的request,session等对象,获取方便,参数获取采用注解的方式,也解放了部分代码,另外mybatis采用代理模式,只需要一个dao接口,不需要实现类,就可以正常使用。只要保证配置文件中的id与方法名一致即可,比起ssh框架,这套框架组合可以说是省时,省力。

在这里,介绍一下spring-mvc与mybatis框架的整合步骤。
2.整合步骤
1.需要以下jar包:

这里写图片描述
包括spring核心jar,mybatis核心jar,jdbc jar,mvc相关jar包,以及结合的关联jar包。
2.建立一个web项目,并落实文件目录
这里写图片描述

Controller,entity,service,serviceImp,dao,这里不需要dao的实现类,因为mybatis自己有每一个实体类的xml映射文件,在里面就需要引入dao类和实体类,所以它相当于dao的实现类了,dao里的方法名必须和xml里的id一致。
3.配置各种文件
都配置在src下
Springmvc.xml: 1.扫描带注解方法的路径
2.加入handlerMapping,HanlderAdapter两个对象
3.让对静态资源的请求能够绕过dispatcherServlet的拦截
4.视图转换器

 <!-- 扫描带注解的方法路径 -->
<context:component-scanbase-package="ytu.group2.controller"/>
<!--加入handlerMapping,HanlderAdapter两个对象 -->

<mvc:annotation-driven>
<mvc:message-convertersregister-defaults="true">
<beanclass="org.springframework.http.converter.StringHttpMessageConverter">
                <propertyname="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                        <value>text/html;charset=UTF-8</value>
                    </list>
                </property>
            </bean>


</mvc:message-converters>

</mvc:annotation-driven>

<!-- 让对静态资源的请求能够绕过dispatcherServlet的拦截 -->
<mvc:default-servlet-handler/>
<!-- 视图转换器 -->
<beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/view/"p:suffix=".jsp"/>


Spring-mybatis.xml:1.默认的注解映射的支持
 2.开启事务注解驱动
                3.最重要的就是读取配置文件,创建datasource,sessionfactory,以及事
                  务管理

<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!-- 加入handlerMapping,HanlderAdapter两个对象-->
    <mvc:annotation-driven/>


    <!-- 开启事务注解驱动 -->
<tx:annotation-driventransaction-manager="transactionManager"proxy-target-class="true"/>
    <!-- 引入配置文件 -->

    <beanid="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <propertyname="location"value="classpath:jdbc.properties"/>
    </bean>

    <beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <propertyname="driverClassName"value="${driver}"/>
        <propertyname="url"value="${url}"/>
        <propertyname="username"value="${username}"/>
        <propertyname="password"value="${password}"/>
        <!-- 初始化连接大小 -->
        <propertyname="initialSize"value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <propertyname="maxActive"value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <propertyname="maxIdle"value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <propertyname="minIdle"value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <propertyname="maxWait"value="${maxWait}"></property>
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
        <propertyname="dataSource"ref="dataSource"/>
        <!-- 自动扫描mapping.xml文件 -->
        <propertyname="mapperLocations"value="classpath:ytu/group2/entity/*.xml"></property>
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 
    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
    -->
    <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <propertyname="basePackage"value="ytu.group2.dao"/>
        <propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property>
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <beanid="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <propertyname="dataSource"ref="dataSource"/>
    </bean>

<!-- 自动扫描 表明cn.gacl.java包及其子包中,如果某个类的头上带有特定的注解
@Component,@Repository,@Service,@Controller,就会将这个对象作为Bean注册进Spring容器。
-->
    <context:component-scanbase-package="ytu.group2">
    <context:exclude-filtertype="regex"expression="ytu.group2.controller.*"/>
        <!-- <context:exclude-filter type="annotation"  expression="org.springframework.stereotype.Controller" /> -->
    </context:component-scan>
</beans>
Spring.xml:两个标签,规定了配置文件的读取顺序
<importresource="spring-mybatis.xml"/>
<importresource="springmvc.xml"/>
4.打上各种注解
在action上配置@Controller注解,在service上配置@Service注解,在dao上配置@Repository注解。在他们的依赖关系属性上打上@Resource注解,表示按照名称搜索,如果按照名称搜不到,按照类型搜索。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值