Mybatis基于注解与XML开发

文章目录

  • [1 关于SpringBoot](#1 关于SpringBoot)
  • [2 关于MyBatis](#2 关于MyBatis)
    • [2.1 MyBatis概述](#2.1 MyBatis概述)
    • [2.2 MyBatis核心思想](#2.2 MyBatis核心思想)
    • [2.3 MyBatis使用流程](#2.3 MyBatis使用流程)
    • [3 MyBatis配置SQL方式](#3 MyBatis配置SQL方式)
    • [3.1 基于注解方式](#3.1 基于注解方式)
      • [3.1.1 说明](#3.1.1 说明)
      • [3.1.2 使用流程](#3.1.2 使用流程)
      • [3.1.3 常用注解](#3.1.3 常用注解)
    • [3.2 基于XML方式](#3.2 基于XML方式)
      • [3.2.1 相比注解优势](#3.2.1 相比注解优势)
      • [3.2.2 使用流程](#3.2.2 使用流程)
      • [3.2.3 常用标签](#3.2.3 常用标签)

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
  1. 定义pojo类,和数据表做好映射关系
  2. 编写Dao层接口,在接口中定义操作数据库的方法,在注解或者XML文件中实现具体的SQL语句。
java 复制代码
      @Mapper
      public interface UserMapper{
          @Insert("INSERT INTO user VALUES(NULL,#{username})")
          int insert(User user);
      }
  1. 使用
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抽取并引用,从而提高了SQL语句的复用性。
  • 更好的支持动态SQL
    动态SQL语句是根据运行时的参数来生成的SQL,复杂性较高,使用XML文件更加方便。

3.2.2 使用流程

  • 添加依赖:pom.xml

  • 配置数据源:application.propertis

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

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

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

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

  • 装配使用

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>
相关推荐
考虑考虑1 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261351 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊2 小时前
Java学习第22天 - 云原生与容器化
java
渣哥4 小时前
原来 Java 里线程安全集合有这么多种
java
间彧4 小时前
Spring Boot集成Spring Security完整指南
java
间彧5 小时前
Spring Secutiy基本原理及工作流程
java
Java水解6 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆8 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学8 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole8 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端