初学Spring+SpinrgMVC+Mybatis

来源:互联网 发布:收费软件炒股最好 编辑:程序博客网 时间:2024/06/08 02:18

项目搭建

使用maven搭建,方便快捷,根据自己需要添加dependency

Spring整合Mybatis

在整合和之前回顾一下Mybatis的搭建流程,最好是回顾一下工作细节,目的是为了使整合过程不盲目有条理。

Mybatis回顾:

  • 全局配置文件(MybatisConfig.xml)
    配置数据源:jdbc相关配置,可以以properties文件的形式保存
    注册映射配置文件(mappers)
    别名设置(typeAlias)

  • bean类:数据库实体映射

  • mapper接口/对应的映射文件:操作数据库方法接口,其具体实现方法由映射配置文件(MappersConfig.xml)进行具体实现,eg

    <insert id="insertItem" parameterType="items">    INSERT INTO items VALUES(#{id}, #{name}, #{price}, #{detail})</insert><delete id="deleteItemByName" parameterType="string">    DELETE FROM items WHERE name = #{name};</delete><update id="updateItemPriceByName" parameterType="items">    UPDATE items SET price = #{price} WHERE name = #{name}</update><select id="findItemsAll" resultType="items">    SELECT * FROM items</select><select id="findItemByName" parameter="string" resultType="items">    SELECT * FROM items WHERE name = #{name}</select>

    其中的属性细节,自行查找Mybatis资料

  • 一切配置完成后,与数据库交互

    获取Mybatis全局配置文件;

    Mybatis采用工厂模式创建sqlSession,其中sqlSessionFactory是单例工厂,而创建工厂的sqlSessionFactoryBuilder不是单例的;
    它根据全局配置文件创建sqlSessionFactory,再由sqlSessionFactory创建sqlSession;

    sqlSession通过mapper.class获得所有操作数据库的方法,此时接口已经被实现;
    这里写图片描述

利用Spring特性整合Mybatis

Spring整合Mybatis的核心配置文件ApplicationContext-dao.xml,原型就是Spring的应用上下文配置文件,现利用依赖注入将Mybatis原生流程中使用的类以bean的形式注入整合类中。所以值得注意的是,该文件中的所有bean属性都不可自行更换,完全遵照类中的setter方法

  • 首先数据源配置可以通过注入一个数据源类

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    destroy-method="close">    <property name="driverClassName" value="${jdbc.driver}" />    <property name="url" value="${jdbc.url}" />    <property name="username" value="${jdbc.username}" />    <property name="password" value="${jdbc.password}" /></bean> 
  • 由上面的图片可以发现sqlSessionFactory的创建需要原全局配置文件,所以应注入数据源和全局配置文件

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    <property name="dataSource" ref="dataSource" />    <property name="configLocation" value="classpath:mybatis/mybatisConfig.xml" /></bean>
  • 最终mapper的获取需要sqlSession和mapper.class
    自动扫描指定路径下的所有mapper类,最终可以通过普通spring方式获取类实例(getBean( String beanName)),根据使用推测其中beanName默认类文件名首字母小写

    <bean id="mapperPackage" class="org.mybatis.spring.mapper.MapperScannerConfigurer">    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>            <property name="basePackage" value="mapper" /></bean>
  • 注意事项:bean类和映射配置文件同名对应在同一包中


Spring整合Server

很多SSM框架教程中都有对Server层的整合。首先Server层是对dao类的再度封装,通过对事务管理配置(ApplicationContext-transcation.xml)利用AOP很好地完成对各个dao方法的管理配置。

Controller与Server不能绝对割裂

曾经有这样的疑惑:url通过前端分发控制器路由至Controller,Controller可以完成所有的处理操作,为什么还要封装出Server层来面向数据业务(调用dao类方法)

  • 解耦:将Controller和Model的耦合度降到最小,这样说比较官方,举个笼统的例子。当一个dao方法被多个Controller使用的时候,倘若对dao方法进行修改,将要进行一系列繁琐的修改。但是良好的封装可以不影响到Controller中的内容而修改dao方法。反向修改道理相同。

  • 面向切面:以现在的认知来看,dao方法本是独立在Controller层中直接与数据库交互的方法,理解为功能点。但是当我们将这些方法按照业务需要进行封装,我们就可以将架构中的功能点连接成一个面,理解为业务面。这样方便我们面向业务进行全面的开发。(未完待续:目前对于面向切面理解的还不是很透彻,后期有新的理解认识再来添加


整合Contoller

Controller的整合融合在SpringMVC的搭建过程中

  • 核心是web.xml与name-servlet.xml的配合,注册定义bean,配置包扫描位置,配置基于注解的控制器,配置视图解析,静态资源等。

至此整合完毕,SSM框架搭建完成。在使用过程中功能针对具体层进行开发。

原创粉丝点击