MyBatis框架-注解管理

概述

​ Mybatis是一个优秀的持久层框架(官网https://mybatis.org/mybatis-3/),底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis框架的简单应用架构,如图所示:

在当今的互联网应用中项目,mybatis框架通常会由spring家族进行资源整合,作为数据层技术实现数据交互操作。使用此框架程序员只需要通过注解或者修改xml配置文件的方式配置好需要执行的SQL语句,MyBatis框架会根据SQL语句生成对应的JDBC代码并对数据库中数据进行增删改查操作。

1 关于SpringBoot

​ SpringBoot是一个基于Spring框架的快速开发的脚手架,它能够帮助我们开发者快速搭建项目环境,并提供了一些建议的配置方式,降低了开发者程序的开发和部署难度。

2 关于MyBatis

2.1 MyBatis概述

​ MyBatis是Java的持久化框架,目的是为了使操作数据库更加方便、灵活、高效。可以通过Java注解和XML文件来映射Java对象和SQL语句,提供了非常灵活的SQL编写方式和动态SQL语句的创建方式,可以与Spring框架结合使用。

2.2 MyBatis核心思想

​ 将Java对象和数据库操作分离,通过注解和XML映射文件映射到数据库的字段上,并提供相应的API来操作数据库。可以自动将SQL语句转为JDBC代码,并根据指定的返回值类型生成对应的结果提供给开发者使用。

2.3 MyBatis使用流程

  1. 配置MyBatis环境

    在pom.xml中添加相关依赖:MyBatis Framework 和 MySQL Driver

  2. 配置文件中配置数据库的连接信息(application.properties)

    properties 复制代码
    spring.datasource.url=jdbc:mysql://localhost:3306/blog?characterEncoding=utf8&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=root
  3. 定义pojo类,和数据表做好映射关系

  4. 编写Dao层接口,在接口中定义操作数据库的方法,在注解或者XML文件中实现具体的SQL语句。

    java 复制代码
    @Mapper
    public interface UserMapper{
        @Insert("INSERT INTO user VALUES(NULL,#{username})")
        int insert(User user);
    }
  5. 使用

    java 复制代码
    // 1.自动装配
    @Autowired
    private UserMapper userMapper
    
    // 2.调用方法
    userMpper.insert(...)

3 MyBatis配置SQL方式

3.1 基于注解方式

3.1.1 说明

​ 基于注解方式省去了配置XML文件的编写工作,并且可以很方便的完成一些 简单的 CRUD操作,但是对于一些复杂的SQL语句使用起来会很冗余。

3.1.2 使用流程
  • maven工程)在pom.xml中添加MyBatis和MySQL相关的依赖

  • 在配置文件中(application.properties)配置数据库的连接信息

  • 创建实体类,和数据库中的表做好对应关系

  • 配置Mapper接口,在接口中添加@Mapper注解,告诉底层为此接口创建实现类,在实现类中定义数据访问的逻辑,执行与数据库的会话

  • 在接口中定义方法,在方法上使用注解标注SQL语句的类型,可以使用的注解有:@Insert、@Dlelete、@Update、@Select

    如果SQL语句中涉及到多个参数,可以使用@Param注解给每个参数取名。

  • 自动装配并在应用程序中使用即可

    java 复制代码
    @Autowired
    private XxxMapper xxxMapper;
    
    xxxMapper.接口中的方法(参数...);
3.1.3 常用注解
  • @Insert("SQL")
  • @Dlelete("SQL")
  • @Update("SQL")
  • @Select("SQL")

3.2 基于XML方式

3.2.1 相比注解优势
  • 更好的可读性

    XML文件具有良好的结构和语义,可以使JAVA代码和SQL语句彻底分离,便于管理和优化。注解配置SQL语句可能使JAVA代码变的冗长。

  • 更好的复用性

    将SQL语句写入XML文件中,通过 <sql>和<include>标签 将重复的SQL抽取并引用,从而提高了SQL语句的复用性。

  • 更好的支持动态SQL

    动态SQL语句是根据运行时的参数来生成的SQL,复杂性较高,使用XML文件更加方便。

3.2.2 使用流程
  • 添加依赖:pom.xml

  • 配置数据源:application.propertis

  • 配置xml文件的扫描路径:application.properties

  • 创建实体类,做好和数据表的对应关系

  • 定义接口,添加@Mapper注解,并定义接口中的方法

  • 创建xml文件,使用标签配置SQL

    xml 复制代码
    <mapper namespace="接口的完整路径">
    	<insert id="接口中定义的方法名"></insert>
    </mapper>
  • 装配使用

    java 复制代码
    @Autowired
    private XxxMapper xxxMapper;
    
    xxxMapper.接口方法(参数...);
3.2.3 常用标签
  • insert标签

  • delelte标签

  • update标签

  • select标签

    使用select标签需要指定 resultType 的属性值

  • foreache标签:用于动态删除

    xml 复制代码
    <delete id="xxx">
    	DELETE FROM xxx WHERE id in(
        	<foreache collection="对象类型" item="变量名" separator="分隔符">
        		#{变量名}
        	</foreache>
        )
    </delete>
  • set标签和if标签:用于动态修改

    xml 复制代码
    <update id="xxx">
    	UPDATE xxx 
        <set>
        	<if test="属性名!=null">字段名=#{属性名},</if>
            <if test="属性名!=null">字段名=#{属性名},</if>
            <if test="属性名!=null">字段名=#{属性名}</if>
        </set>
    </update>
  • sql标签和include标签:用于SQL语句的复用

    xml 复制代码
    <!--1.重复SQL抽取-->
    <sql id="selectSql">
        SELECT * FROM xxx
    </sql>
    
    <select id="xxx" resultType="xxx">
        <include refid="selectSql"></include>
    </select>
    
    <select id="yyy" resultType="yyy">
        <include refid="selectSql"></include> WHERE id&gt;5
    </select>
相关推荐
程序员清风13 分钟前
阿里二面:Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 有什么影响?
java·后端·面试
幼稚园的山代王13 分钟前
Prompt Enginering(提示工程)先进技术
java·人工智能·ai·chatgpt·langchain·prompt
周某某~22 分钟前
二.单例模式‌
java·单例模式·设计模式
摸鱼仙人~25 分钟前
深入理解Java单例模式:确保类只有一个实例
java·javascript·单例模式
hstar952741 分钟前
三十五、面向对象底层逻辑-Spring MVC中AbstractXlsxStreamingView的设计
java·后端·spring·设计模式·架构·mvc
pengyu1 小时前
【Java设计原则与模式之系统化精讲:壹】 | 编程世界的道与术(实战指导篇)
java·后端·设计模式
日月星辰Ace1 小时前
JVM 垃圾回收简介
java
掉头发的王富贵1 小时前
Arthas神器入门:动态调试Java应用,轻松搞定生产环境Bug!
java·后端·debug
Java陈序员1 小时前
再见 Navicat!一款开源的 Web 数据库管理工具!
java·react.js·docker
知其然亦知其所以然2 小时前
RAG 结果太水?用 RRF + Reranker 重排,效果翻倍提升!
java·后端·llm