0


深入解析Spring Boot集成MyBatis的多种方式

文章目录

在这里插入图片描述

🎉欢迎来到架构设计专栏~深入解析Spring Boot集成MyBatis的多种方式


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

1. 引言

Spring Boot作为一款快速开发、简化配置的框架,与MyBatis的结合使用是开发中常见的组合。本文将深入探讨Spring Boot集成MyBatis的多种方式,包括XML配置、注解配置以及MyBatis的动态SQL等,通过实例代码和详细解释,帮助读者选择适合自己项目的集成方式。
在这里插入图片描述

2. 传统的XML配置方式

2.1 引入依赖

首先,在

pom.xml

文件中添加MyBatis和数据库驱动的依赖:

<dependencies><!-- MyBatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- 数据库驱动 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency></dependencies>

2.2 配置数据源和MyBatis

application.properties

application.yml

中配置数据源和MyBatis:

spring:datasource:driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:h2:console:enabled:truemybatis:mapper-locations: classpath:/mapper/*.xml

在上述配置中,

spring.datasource

用于配置数据源,

mybatis.mapper-locations

指定了MyBatis的XML映射文件的位置。

2.3 编写Mapper接口和XML映射文件

创建一个User实体类:

publicclassUser{privateLong id;privateString username;privateString password;// 省略getter和setter}

创建一个UserMapper接口:

publicinterfaceUserMapper{UserselectUserById(Long id);voidinsertUser(User user);}

编写UserMapper的XML映射文件

UserMapper.xml

<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.example.mapper.UserMapper"><resultMapid="BaseResultMap"type="com.example.entity.User"><idcolumn="id"property="id"jdbcType="BIGINT"/><resultcolumn="username"property="username"jdbcType="VARCHAR"/><resultcolumn="password"property="password"jdbcType="VARCHAR"/></resultMap><selectid="selectUserById"resultMap="BaseResultMap">
        SELECT * FROM user WHERE id = #{id}
    </select><insertid="insertUser">
        INSERT INTO user (username, password) VALUES (#{username}, #{password})
    </insert></mapper>

2.4 使用Mapper

在Service或Controller中使用UserMapper:

@ServicepublicclassUserService{@AutowiredprivateUserMapper userMapper;publicUsergetUserById(Long id){return userMapper.selectUserById(id);}publicvoidcreateUser(User user){
        userMapper.insertUser(user);}}

这样,通过XML配置方式,我们完成了Spring Boot与MyBatis的集成。

3. 注解配置方式

3.1 引入依赖

同样,在

pom.xml

文件中添加MyBatis和数据库驱动的依赖:

<dependencies><!-- MyBatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- 数据库驱动 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency></dependencies>

3.2 配置数据源和MyBatis

application.properties

application.yml

中配置数据源和MyBatis:

spring:datasource:driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:h2:console:enabled:truemybatis:mapper-locations: classpath:/mapper/*.xml

3.3 编写Mapper接口

创建一个UserMapper接口,并使用注解配置SQL语句:

@MapperpublicinterfaceUserMapper{@Select("SELECT * FROM user WHERE id = #{id}")UserselectUserById(Long id);@Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")voidinsertUser(User user);}

3.4 使用Mapper

在Service或Controller中使用UserMapper:

@ServicepublicclassUserService{@AutowiredprivateUserMapper userMapper;publicUsergetUserById(Long id){return userMapper.selectUserById(id);}publicvoidcreateUser(User user){
        userMapper.insertUser(user);}}

通过注解配置方式,我们实现了Spring Boot与MyBatis的集成,使得Mapper接口的SQL语句更加直观。

4. MyBatis动态SQL

4.1 使用XML配置方式

动态SQL是MyBatis的一个强大特性,可以根据不同条件拼接SQL语句,从而实现更加灵活的查询。下面是一个简单的例子,使用MyBatis的动态SQL:

<!-- UserMapper.xml --><mappernamespace="com.example.mapper.UserMapper"><selectid="selectUsersByCondition"parameterType="java.util.Map"resultType="com.example.entity.User">
        SELECT * FROM user
        <where><iftest="username != null">
                AND username = #{username}
            </if><iftest="age != null">
                AND age = #{age}
            </if></where></select></mapper>

在上述代码中,我们使用

<where>

标签包裹条件判断,通过

<if>

标签判断是否需要拼接对应的条件语句。

4.2 使用注解配置方式

通过注解配置方式使用动态SQL:

// UserMapper.java@MapperpublicinterfaceUserMapper{@SelectProvider(type =UserSqlProvider.class, method ="selectUsersByCondition")List<User>selectUsersByCondition(Map<String,Object> condition);}
// UserSqlProvider.javapublicclassUserSqlProvider{publicStringselectUsersByCondition(Map<String,Object> condition){returnnewSQL(){{SELECT("*");FROM("user");if(condition.get("username")!=null){WHERE("username = #{username}");}if(condition.get("age")!=null){WHERE("age = #{age}");}}}.toString();}}

在上述代码中,通过

@SelectProvider

注解指定了使用的Provider类和方法,Provider类中动态生成SQL语句。

5. MyBatis的插件机制

MyBatis提供了插件机制,可以通过插件对SQL的执行过程进行干预和增强。以下是一个简单的插件示例:

// MyPlugin.java@Intercepts({@Signature(type =Executor.class, method ="update", args ={MappedStatement.class,Object.class})})publicclassMyPluginimplementsInterceptor{@OverridepublicObjectintercept(Invocation invocation)throwsThrowable{// 在原方法执行前进行处理System.out.println("Before update...");// 调用原方法Object result = invocation.proceed();// 在原方法执行后进行处理System.out.println("After update...");return result;}@OverridepublicObjectplugin(Object target){// 将插件应用到Executor对象上returnPlugin.wrap(target,this);}@OverridepublicvoidsetProperties(Properties properties){// 设置插件属性}}

在上述代码中,通过

@Intercepts

@Signature

注解指定了拦截的方法和参数类型,实现了

Interceptor

接口。在

intercept

方法中可以对原方法进行干预,

plugin

方法将插件应用到目标对象上。

6. 性能优化与拓展

6.1 缓存机制

MyBatis提供了一级缓存和二级缓存两种缓存机制。一级缓存是SqlSession级别的缓存,而二级缓存是Mapper级别的缓存。在需要优化查询性能时,可以考虑使用MyBatis的缓存机制。

6.2 批量操作

MyBatis支持批量插入、更新和删除操作,通过批量操作可以减少数据库交互次数,提高性能。

6.3 多数据源配置

在实际项目中,可能会遇到需要连接多个数据源的情况。Spring Boot和MyBatis提供了多数据源的支持,可以通过配置多个

DataSource

SqlSessionFactory

来实现。

7. 总结

本文深入解析了Spring Boot集成MyBatis的多种方式,包括XML配置、注解配置以及MyBatis的动态SQL等。通过实例代码和详细解释,读者能够更好地理解这些集成方式的使用场景和优劣。同时,了解了MyBatis的插件机制、缓存机制以及一些性能优化的方法。在实际项目中,根据具体需求选择合适的集成方式和优化策略,能够更好地发挥Spring Boot和MyBatis的优势,提升开发效率和系统性能。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_43546721/article/details/134981490
版权归原作者 IT·陈寒 所有, 如有侵权,请联系我们删除。

“深入解析Spring Boot集成MyBatis的多种方式”的评论:

还没有评论