简单的整合spring与mybatis

220 阅读3分钟

基本步骤

  • 导包

spring
mybatis
mybatis-spring
ojdbc(oracle) mysql-connector(mysql)
dbcp

  • 配置springmvc.xml文件,因为mybatis已经集成在spring中,所以mybatis的配置也在springmvc的配置文件中
    配置SqlSessionFactoryBean,这里是配置数据库连接池和sql映射文件位置
  • 实体类的编写
  • sql映射文件的编写
  • dao层接口的编写(mapper映射器)
  • springmvc配置文件中添加MapperScannerConfigurer,这里代表映射接口的包(替代原本的getMapper()方法),创建符合映射器接口的对象,然后将这个bean加入spring容器

具体步骤

第一次的spring配置文件

    <!-- 配置文件 -->
    <util:properties id="config" location="classpath:db.properties"></util:properties>
    <!-- 连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="#{config.driver}"></property>
        <property name="url" value="#{config.url}"></property>
        <property name="username" value="#{config.username}"></property>
        <property name="password" value="#{config.password}"></property>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定连接的数据库连接池 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 指定sql映射配置文件位置 -->
        <property name="mapperLocations" value="classpath:entity/*.xml"></property>
    </bean>
这里不在使用mybatis自带的连接池,而是用spring配置提供的连接池,然后创建sqlSessionFactoryBean的bean,然后再属性dataSource中加入数据库连接池的引用,在mapperLocations加入sql映射文件的位置,这里是classpath:entity/*.xml,代表在entity下的所有xml,在开发时,将类的相应的Sql映射文件放在entity中
mybatis中,不再需要编写一堆的相关于sqlSession创建的代码,因为通过这个配置,spring会帮你把sqlSession给创建好

第二次的spring配置文件

	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="dao"></property>
	</bean>
这个配置可以让spring找到dao层中你写的mapper映射器,通过这个接口来产生相应的符合接口条件的对象,然后存在spring容器中
值得注意的是,在这个配置文件中,没有加入组建扫描,可是,spring容器依然可以找到默认名字的dao接口(类名首字母小写)或者是@Repository注解重命名的bean(还记得这个持久层的组件注解吗),因为配置了这个MappersScannerConfiguer,它就扮演这组件扫描的角色,会在这个包下去查找接口

是否会有疑问,如果dao层存在不需要mybatis自动根据接口创建对象的接口时,怎么办?

以上的这种情况有可能出现,mybatis再好用,也是封装好的数据库框架,在效率上不如原生的jdbc,如果在一个业务中,大部分代码需要mybatis框架,少部分需要高效的部分需要jdbc,那么,根据解耦的原理,在dao层内要出现一个接口,然后通过一个自己编写的类来实现这个接口,这个时候,就不希望这个接口被mybatis所“看到”

这个时候,就需要自己编写一个注解:
MapperScannerConfiguer中,有一个name为annotationClass的属性,需要给他的值是自己写的一个注解的限定名

	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="dao"></property>
		<property name="annotationClass" value="annotation.MyDAOAnnotation"></property>
	</bean>

这是加进annotationClassMapperScannerConfiguer,这个注解只需要创建即可,不需要在里面添加任何逻辑代码,然后在dao层下,需要被mybatis解析的接口前加上这个注解,就可以完成接口的解析

另外一个集成方式:

  • 导包
  • springmvc配置文件(删除MapperScannerConfiguer配置)
  • 实体类
  • 映射文件
  • dao接口
  • dao实现类(依赖注入sqlSessionTemplate)
  • sqlSessionTemplate,调用该对象方法
  • 配置sqlSessionTemplate
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
	    <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
    </bean>
  • 组件扫描

博文是作者原本在其他平台的,现迁移过来