Springboot 中同时使用mybatis注解和springbean-xml配置方式

简介: 因为自己新建了一个应用,为了开发的速度,直接选用了springboot,但后来发现大部分读库的代码和同事已有的代码重复, 索性直接拿过来用。但问题是我已有的代码是通过纯注解的方式使用mybatis,同事代码是spring+xml来使用mybatis,经过几天的探索,发现一种两种方式结合使用的方法。

因为自己新建了一个应用,为了开发的速度,直接选用了springboot,但后来发现大部分读库的代码和同事已有的代码重复, 索性直接拿过来用。但问题是我已有的代码是通过纯注解的方式使用mybatis,同事代码是spring+xml来使用mybatis,经过几天的探索,发现一种两种方式结合使用的方法。

 我们在spring中用@Autowired获取mybatis mapper时,其实是Spring通过mybatis的sqlSessionFactory获取到的,mybatis-starter在启动过程中会在spring容器中注册好sqlSessionFactory, 但这starter并不会读取xml中配置的mapper。但如果你先让spring通过bean xml注册了sqlSessionFactory并读取了xml中的mapper配置,mybatis-stater中的autoconfigure就会失败,你用纯注解写的那个mapper就加载不上了。

 所以先让springboot在启动时候先执行完成mybatis-starter中的MybatisAutoConfiguration,这时候在spring容器中sqlSessionFactory已经注册好了,然后把关于mapper的springbean xml配置文件读取并配置,配置过程中spring会先尝试注册sqlSessionFactory,其实已经有了,就会用这个factory把xml中mapper再加载一遍,因为spring中默认都是单例, 所以不会重建mybatis-starter中创建的sqlSessionFactory, 这里非常关键的一点就是加载xml必须在MybatisAutoConfiguration完成后,具体配置代码如下。

import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource(locations={"classpath:application-bean.xml"})
@AutoConfigureAfter(MybatisAutoConfiguration.class)  //这里就是保证xml在MybatisAutoConfiguration完成配置的核心 
public class ApplicationConfig {
    private void test(){
    }
}

 application-bean.xml里就是用来注册mybatis mapper的spring bean配置文件。


application-bean.xml如下


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    <bean id="dataSource" class="here is your datasource class" init-method="init">
        <property name="user" value="xxx"/>
        <property name="passwd" value="xxxx"/>
    </bean>
    <bean id="mysqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--数据源配置,必须-->
        <property name="dataSource" ref="dataSource"/>
        <!-- mybatis的一些基本属性的配置 -->
        <property name="configLocation" value="classpath:mybatisConfig.xml"/>
        <!-- 如果mapper文件与mapper类放在相同的路劲下,则不需要配置路径 -->
        <property name="mapperLocations"
                  value="classpath*:/config/*mapper.xml"/>
    </bean>
    <!-- DAO接口所在包名,Spring会自动查找其下的类,并帮你自动生成相关bean -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="me.xindoo.dao" />
        <property name="sqlSessionFactoryBeanName" value="mysqlSessionFactory"></property>
    </bean>
</beans>


 把你的mapper.xml文件放到config目录下就可以了,这样你就可以xml或者注解随意切换了。 我的感觉简单sql用注解,配置简单迅速。 复杂sql可以用xml,排查问题方便。

目录
相关文章
|
15天前
|
SQL XML Java
Mybatis基础使用知识(注解)
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。 最后 mybatis 框架执行sql 并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
258 1
|
1月前
|
缓存 监控 Java
SpringBoot @Scheduled 注解详解
使用`@Scheduled`注解实现方法周期性执行,支持固定间隔、延迟或Cron表达式触发,基于Spring Task,适用于日志清理、数据同步等定时任务场景。需启用`@EnableScheduling`,注意线程阻塞与分布式重复问题,推荐结合`@Async`异步处理,提升任务调度效率。
406 128
|
3月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 &gt; Java系统属性 &gt; application.properties &gt; application.yml &gt; application.yaml。
730 0
|
15天前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
141 3
|
15天前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
159 2
|
1月前
|
XML Java 数据格式
常用SpringBoot注解汇总与用法说明
这些注解的使用和组合是Spring Boot快速开发和微服务实现的基础,通过它们,可以有效地指导Spring容器进行类发现、自动装配、配置、代理和管理等核心功能。开发者应当根据项目实际需求,运用这些注解来优化代码结构和服务逻辑。
204 12
|
1月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
323 4
|
1月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
118 0
探索Spring Boot的@Conditional注解的上下文配置
|
1月前
|
Java 测试技术 编译器
@GrpcService使用注解在 Spring Boot 中开始使用 gRPC
本文介绍了如何在Spring Boot应用中集成gRPC框架,使用`@GrpcService`注解实现高效、可扩展的服务间通信。内容涵盖gRPC与Protocol Buffers的原理、环境配置、服务定义与实现、测试方法等,帮助开发者快速构建高性能的微服务系统。
306 0
|
2月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
810 10