MyBatis Spring整合配置映射接口类与映射xml文件
spring整合MyBatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般会使用MapperScannerConfigurer,MapperScannerConfigurer会自动扫描basePackage指定的包,找到映射接口类和映射XML文件,并进行注入。配置如下:
1 <!-- 数据源 --> 2 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 3 <property name="driverClass" value="${${database.type}.jdbc.driverClassName}"/> 4 <property name="jdbcUrl" value="${${database.type}.jdbc.url}"/> 5 <property name="properties" ref="dataSourceProperties"/> 6 <property name="autoCommitOnClose" value="true"/> 7 <property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/> 8 <property name="initialPoolSize" value="${cpool.minPoolSize}"/> 9 <property name="minPoolSize" value="${cpool.minPoolSize}"/> 10 <property name="maxPoolSize" value="${cpool.maxPoolSize}"/> 11 <property name="maxIdleTime" value="${cpool.maxIdleTime}"/> 12 <property name="acquireIncrement" value="${cpool.acquireIncrement}"/> 13 <property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/> 14 </bean> 15 16 <!--基于注解的事务管理--> 17 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 18 <property name="dataSource" ref="dataSource"/> 19 </bean> 20 21 <tx:annotation-driven transaction-manager="transactionManager"/> 22 23 24 <bean id="lazySqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 25 <property name="dataSource" ref="dataSource"/> 26 <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> <!-- 采用configLocation方式 Mybatis配置文件保留 --> 27 </bean> 28 29 <!-- 扫描mybatis映射接口类 --> 30 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 31 <property name="basePackage" value="com.test.dsm"/> 32 <property name="sqlSessionFactoryBeanName" value="lazySqlSessionFactory"/> 33 </bean>
这个配置的前提条件是:映射接口类文件(.java)和映射XML文件(.xml)需要放在相同的包下(com.test.dsm)
如果myBatis映射XML文件和映射接口文件不放在同一个包下怎么办呢?(当然放在一个包里肯定可以)
如果在不同的包下,那就需要手动配置XML文件的路径了,只需要修改SqlSessionFactoryBean配置即可:
<bean id="lazySqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 当mybatis的xml文件和mapper接口不在相同包下时,需要用mapperLocations属性指定xml文件的路径。 *是个通配符,代表所有的文件,**代表所有目录下 --> <property name="mapperLocations" value="classpath:com/test/mapper/mysql/**/*.xml" /> <!-- 采用mapperLocation mybatis配置文件可以删除--> </bean>
添加一个mapperLocations属性,指定加载xml文件的路径。
classpath:表示在classes目录中查找,classpath就是指WEB-INF/classes/
这个目录的路径。需要声明的一点是,使用classpath:
这种前缀,就只能代表一个文件。;
*:通配符表示所有文件,则可以代表多个匹配的文件,不仅包含class路径,还包括jar文件中(class路径)进行查找
--注意: 用classpath*:需要遍历所有的classpath,所以加载速度是很慢的;因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*。
**:表示所有目录下,双星号**
表示在任意目录下,也就是说在WEB-INF/classes/
下任意层的目录,只要符合后面的文件路径,都会被作为资源文件找到;
MyBatis官网说明如下:http://mybatis.github.io/spring/factorybean.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库