Spring集成MyBatis(自定义类和xml配置文件两种形式)

将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合,实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理.


spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。

我们需要spring创建以下对象
1.独立的连接池对象
2.SqlSessionFactory对象
3.创建出dao对象
上面三个对象的创建,使用xml的bean标签

1.Maven配置

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.0</version>
</dependency>
	<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.0.0</version>
</dependency>
将mybatis集成到spring之后,就可以被spring的ioc容器托管,再也不用自己创建SqlSessionFactory 、打开SqlSession等操作。其中最重要的配置就是定义好SqlSessionFactoryBean。

mybatis通过SqlSessionFactoryBean将SqlSessionFactory对象集成到spring中,它实现了InitializingBean接口,在SqlSessionFactoryBean初始化时解析配置并创建DefaultSqlSessionFactory对象。它还实现了FactoryBean,在getObject时返回我们创建好的DefaultSqlSessionFactory,使得DefaultSqlSessionFactory也被spring管理起来。
很多框架集成到spring的方法基本都是靠InitializingBean和FactoryBean这两个接口来实现的,很好的设计

2.集成到spring中

有两种方式

第一种方式:自定义类

	/**
	 * Mybatis会话工厂
	 * Mybatis Session Factory
	 * 声明mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory
	 */
	@Bean
	public SqlSessionFactoryBean mybatisSqlSessionFactoryBean(DataSource dataSource) throws IOException {
		//dataSource
		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
		bean.setDataSource(dataSource);
		//resolver
		PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
		bean.setMapperLocations(resolver.getResources("classpath*:mapper/**/*Mapper.xml"));
		//configuration配置类相当于mybatis的主配置文件configuration.xml
		org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
		configuration.setCacheEnabled(true);
		configuration.setLazyLoadingEnabled(false);//懒加载:关闭
		configuration.setMapUnderscoreToCamelCase(true);//mybatis驼峰映射
        configuration.setLogImpl(Log4jImpl.class);
		bean.setConfiguration(configuration);
		//自定义别名,mybatis会自动扫描这个包下的所有类,给所有的类生成别名,生成的别名就是这个类的简单类名(首字母可以是大写/小写)
		bean.setTypeAliasesPackage("org.techwebsite.domain");//自定义别名
		/***pagehelper分页插件*****/
		Interceptor interceptor = new PageInterceptor();
		Properties properties = new Properties();
		properties.setProperty("helperDialect", "mysql");//数据库
		properties.setProperty("offsetAsPageNum", "true");//是否将参数offset作为PageNum使用
		properties.setProperty("rowBoundsWithCount", "true");//是否进行count查询
		properties.setProperty("reasonable", "false");//是否分页合理化
		interceptor.setProperties(properties);
		//添加插件
		bean.setPlugins(new Interceptor[]{interceptor});
		return bean;
	}


	/**
	 *  MapperScannerConfigurer:在内部调用SqlSession的getMapper()生成每个dao接口的代理对象
	 *  或者使用注解@MapperScan(basePackages = "org.techwebsite.logic.mapper")//扫描mybatis的mapper文件
	 */
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer(){
		MapperScannerConfigurer msc = new MapperScannerConfigurer();
		msc.setBasePackage("org.techwebsite.logic.mapper");
		return msc;
	}

pagehelper官方:

Releases · pagehelper/Mybatis-PageHelper (github.com)

PageHelper分页使用详解_笔记大全_设计学院

用的当时的最新版6.0.0

第二种方式:xml配置文件

mybatis主配置文件

configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<configuration>
  <!--settings:控制mybatis全局行为-->
	<settings>
		<!-- 懒加载:开启-->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 积极加载:关闭 -->
		<setting name="aggressiveLazyLoading" value="false"/>
        <!--设置mybatis输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>

	</settings>
 
	<!--类别名-->
	<typeAliases>
		<!-- 批量定义别名,告诉mybatis要扫描的包  -->
		<!-- mybatis会自动扫描这个包下的所有类,给所有的类生成别名,生成的别名就是这个类的简单类名(首字母可以是大写/小写) -->
		<package name="com.example.eshop_manager.entity"/>
	</typeAliases>
</configuration>

applicationContext.xml (Spring核心配置文件)

 
<!--  开启包扫描 -->
<!-- 扫描这个包下所有的相关注解,需要被bean容器池管理的会自动帮你创建对象 -->
<context:component-scan base-package="com.example.eshop_manager"></context:component-scan>
 
 
<!-- 读取属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
 
<!-- 定义数据源,使用c3p0 -->
<bean id="dbSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${jdbc.driver}"></property>
	<property name="jdbcUrl" value="${jdbc.url}"></property>
	<property name="user" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
</bean>
 
<!-- 声明mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 数据源:set注入,把数据库连接池赋给了dataSource属性 -->
	<property name="dataSource" ref="dbSource"></property>
	<!-- 加载mybatis主配置文件的位置,因为是在spring中指定mybatis主配置文件,所以要用classpath:
            configLocation:属性是Resource类型的,负责读取配置文件
            赋值使用 value 指定文件的路径 -->
	<property name="configLocation" value="classpath:mybatis/configuration.xml" />
     <!-- 自动扫描XxxMapping.xml文件,**任意路径 -->
    <property name="mapperLocations" value="classpath*:com/tgq/**/mapper/*.xml"/>

     <!--配置pagehelper插件-->
        <!-- PageHelper 配置
        pagehelper.helperDialect=mysql
        pagehelper.reasonable=true
        pagehelper.supportMethodsArguments=true
        pagehelper.params=count=countSql
     -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>
                            helperDialect=mysql
                        </value>
                    </property>
                </bean>
            </array>
        </property>
</bean>
 



<!-- mapper扫描,从mapper包中扫描出mapper接口,
自动创建代理对象并且在spring的bean容器池中管理,遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录 中,自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
MapperScannerConfigurer:在内部调用SqlSession的getMapper()生成每个dao接口的代理对象
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 指定扫描的包名,如果扫描多个包,每个包中间使用半角逗号分隔
MapperScannerConfigurer会扫描这个包中所有的接口,把每个接口都执行一次getMapper()方法,
得到每个接口的dao对象,创建好的dao对象放入spring容器中,创建好的dao对象名称就是接口名首字母小写,例如studentDao-->
	<property name="basePackage" value="com.example.eshop_manager.dao"/>
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

参考:

分页配置:org.mybatis.spring.SqlSessionFactoryBean.setPlugins()方法的使用及代码示例_其他_大数据知识库

【MyBatis】spring整合mybatis教程(详细易懂)_无法自律的人的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨港飞燕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值