springboot组件使用-mybatis组件使用

文章目录

    • springboot使用mybatis组件
      • 1. 添加依赖
      • 2. 配置数据源
      • 3. 创建实体类
      • 4. 创建Mapper接口
      • 5. 创建Mapper XML文件
      • 6. 使用Mapper
      • 7. 启动类配置
    • mybtis 动态SQL
      • 1. `@Mapper` 注解
      • 2. `@Select` 注解
      • 3. `@Insert` 注解
      • 4. `@Update` 注解
      • 5. `@Delete` 注解
      • 6. `@Results` 注解
      • 7. `@Param` 注解
      • 8. `@CacheNamespace` 注解
      • 9. `@Options` 注解
      • 10. `@ResultMap` 注解
      • 总结
    • mybatis XML标签
      • 1. `<mapper>` 标签
      • 2. `<select>` 标签
      • 3. `<insert>` 标签
      • 4. `<update>` 标签
      • 5. `<delete>` 标签
      • 6. `<resultMap>` 标签
      • 7. `<collection>` 标签
      • 8. `<include>` 标签
      • 9. `<if>` 标签
      • 10. `<choose>`、`<when>` 和 `<otherwise>` 标签
      • 11. `<foreach>` 标签
      • 12. `<trim>` 标签
      • 总结
    • 注意
    • 参考文献

springboot使用mybatis组件

在Spring Boot项目中加入MyBatis组件,可以方便地进行数据库操作。以下是详细的步骤:

1. 添加依赖

首先,在pom.xml文件中添加MyBatis和数据库驱动的依赖。例如,如果你使用的是MySQL数据库,可以添加以下依赖:

<dependencies><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><!-- MyBatis Starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>
</dependencies>

2. 配置数据源

application.propertiesapplication.yml文件中配置数据源信息。例如,在application.properties文件中添加以下配置:

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity

3. 创建实体类

创建与数据库表对应的实体类。例如:

package com.example.demo.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax protectedById;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private Integer age;// Getters and Setters
}

4. 创建Mapper接口

创建MyBatis的Mapper接口,并使用@Mapper注解标记。例如:

package com.example.demo.mapper;import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;@Mapper
public interface UserMapper {@Select("SELECT * FROM user")List<User> findAll();
}

5. 创建Mapper XML文件

src/main/resources/mapper目录下创建Mapper的XML文件。例如,创建UserMapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example.demo.mapper.UserMapper"><select id="findAll" resultType="com.example.demo.entity.User">SELECT * FROM user</select>
</mapper>

6. 使用Mapper

在Service层或Controller层中使用Mapper进行数据库操作。例如,在Service层中:

package com.example.demo.service;import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getAllUsers() {return userMapper.findAll();}
}

7. 启动类配置

确保在Spring Boot启动类上添加@MapperScan注解,以扫描Mapper接口。例如:

package com.example.demo;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

通过以上步骤,你就可以在Spring Boot项目中成功加入MyBatis组件,并进行数据库操作了。

mybtis 动态SQL

在 MyBatis 中,除了使用 XML 映射文件来定义 SQL 语句之外,还可以使用注解(Annotations)的方式来编写 SQL 语句。这种方式可以让 SQL 语句更紧密地与 Java 代码结合,使得代码结构更加清晰。下面是一些常用的 MyBatis 注解及其使用方法。

1. @Mapper 注解

@Mapper 注解用于标记一个接口为 MyBatis 的 Mapper 接口。这个接口将包含一系列的 CRUD 方法。

import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {// 方法定义
}

2. @Select 注解

@Select 注解用于定义一个 SELECT 语句。

import org.apache.ibatis.annotations.Select;
import com.example.demo.model.User;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")User getUserById(Long id);
}

3. @Insert 注解

@Insert 注解用于定义一个 INSERT 语句。如果需要获取自动生成的主键值,可以使用 @Options 注解。

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;@Mapper
public interface UserMapper {@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

4. @Update 注解

@Update 注解用于定义一个 UPDATE 语句。

import org.apache.ibatis.annotations.Update;@Mapper
public interface UserMapper {@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")void updateUser(User user);
}

5. @Delete 注解

@Delete 注解用于定义一个 DELETE 语句。

import org.apache.ibatis.annotations.Delete;@Mapper
public interface UserMapper {@Delete("DELETE FROM user WHERE id=#{id}")void deleteUser(Long id);
}

6. @Results 注解

@Results 注解用于定义结果映射。它可以帮助处理复杂的结果集,比如一对一(One-to-One)或一对多(One-to-Many)的关系。

import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.ResultMap;
import com.example.demo.model.User;
import com.example.demo.model.Address;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")@Results({@Result(property = "id", column = "id"),@Result(property = "name", column = "name"),@Result(property = "age", column = "age"),@Result(property = "address", column = "address_id",one = @One(select = "com.example.demo.mapper.AddressMapper.getAddressById"))})User getUserById(Long id);
}

7. @Param 注解

@Param 注解用于指定 SQL 语句中的参数名称。

import org.apache.ibatis.annotations.Param;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')")List<User> findUsersByName(@Param("name") String name);
}

8. @CacheNamespace 注解

@CacheNamespace 注解用于定义缓存的命名空间,可以指定缓存的实现类等。

import org.apache.ibatis.annotations.CacheNamespace;
import org.apache.ibatis.cache.decorators.Synchronized;@Mapper
@CacheNamespace(implementation = SynchronizedCache.class)
public interface UserMapper {// 方法定义
}

9. @Options 注解

@Options 注解用于定义 SQL 执行后的一些选项,如获取自动生成的主键等。

import org.apache.ibatis.annotations.Options;@Mapper
public interface UserMapper {@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id")void insertUser(User user);
}

10. @ResultMap 注解

@ResultMap 注解用于引用已经定义好的结果映射。

import org.apache.ibatis.annotations.ResultMap;@Mapper
public interface UserMapper {@Select("SELECT * FROM user WHERE id = #{id}")@ResultMap("UserResultMap")User getUserById(Long id);
}

总结

使用 MyBatis 的注解可以让你在 Java 代码中直接定义 SQL 语句,这种方式更加简洁,特别是在一些简单的 CRUD 操作中。然而,对于复杂的 SQL 逻辑或者需要高度定制化的映射关系,XML 映射文件仍然是一种非常好的选择。在实际开发中,可以根据具体情况选择最适合的方式来定义 SQL 语句和结果映射。

mybatis XML标签

MyBatis 是一个优秀的持久层框架,它支持定制化的 SQL、存储过程以及高级映射。在 MyBatis 中,XML 映射文件用于定义 SQL 语句、结果映射以及其他与数据库交互相关的配置。下面是 MyBatis 中常用的一些 XML 标签及其用途。

1. <mapper> 标签

<mapper> 标签用于定义一个映射器接口,它包含一系列 SQL 语句和结果映射。

<mapper namespace="com.example.demo.mapper.UserMapper"><!-- SQL 语句和结果映射定义 -->
</mapper>

2. <select> 标签

<select> 标签用于定义一个 SELECT 语句。

<select id="getUserById" parameterType="long" resultType="com.example.demo.model.User">SELECT * FROM user WHERE id = #{id}
</select>

3. <insert> 标签

<insert> 标签用于定义一个 INSERT 语句。

<insert id="insertUser" parameterType="com.example.demo.model.User">INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>

4. <update> 标签

<update> 标签用于定义一个 UPDATE 语句。

<update id="updateUser" parameterType="com.example.demo.model.User">UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
</update>

5. <delete> 标签

<delete> 标签用于定义一个 DELETE 语句。

<delete id="deleteUser" parameterType="long">DELETE FROM user WHERE id=#{id}
</delete>

6. <resultMap> 标签

<resultMap> 标签用于定义复杂的结果映射关系,它可以处理一对一(One-to-One)、一对多(One-to-Many)或多对一(Many-to-One)的关系。

<resultMap id="UserResultMap" type="com.example.demo.model.User"><id property="id" column="id"/><result property="name" column="name"/><result property="age" column="age"/><association property="address" javaType="com.example.demo.model.Address" resultMap="AddressResultMap"/>
</resultMap>

7. <collection> 标签

<collection> 标签用于处理一对多关系。

<resultMap id="UserResultMap" type="com.example.demo.model.User"><id property="id" column="id"/><result property="name" column="name"/><collection property="orders" ofType="com.example.demo.model.Order" select="getOrdersById"/>
</resultMap>

8. <include> 标签

<include> 标签用于引用外部 SQL 片段。

<sql id="commonColumns">name, age</sql><select id="getAllUsers" resultType="com.example.demo.model.User">SELECT ${commonColumns} FROM user
</select>

9. <if> 标签

<if> 标签用于条件判断,可以动态地构建 SQL 语句。

<select id="findUsersByName" parameterType="string" resultType="com.example.demo.model.User">SELECT * FROM user WHERE 1=1<if test="name != null">AND name LIKE '%${name}%'</if>
</select>

10. <choose><when><otherwise> 标签

<choose><when><otherwise> 标签用于实现多条件判断。

<select id="findUsers" parameterType="com.example.demo.model.SearchCriteria" resultType="com.example.demo.model.User">SELECT * FROM user WHERE<choose><when test="name != null">name LIKE '%${name}%'</when><when test="age != null">age = ${age}</when><otherwise>1 = 1</otherwise></choose>
</select>

11. <foreach> 标签

<foreach> 标签用于处理集合参数,常用于批量操作。

<insert id="batchInsert" parameterType="java.util.List">INSERT INTO user(name, age) VALUES<foreach item="item" index="index" collection="list" open="(" separator=")," close=")">#{item.name}, #{item.age}</foreach>
</insert>

12. <trim> 标签

<trim> 标签用于动态拼接 SQL 语句,并提供去除前导或尾随空白的功能。

<select id="findUsers" parameterType="com.example.demo.model.SearchCriteria" resultType="com.example.demo.model.User">SELECT * FROM user WHERE<trim prefix="WHERE" prefixOverrides="AND|OR"><if test="name != null">AND name LIKE '%${name}%'</if><if test="age != null">OR age = ${age}</if></trim>
</select>

总结

以上是 MyBatis 中常用的 XML 标签及其用途。通过这些标签,可以灵活地定义 SQL 语句、结果映射以及其他与数据库交互相关的配置。掌握这些标签的使用方法,可以帮助你更好地利用 MyBatis 处理复杂的数据库操作。

注意

  • sql的配置有两种方式:动态SQL和xml配置
  • 推荐使用xml配置,原因如下:

某些场景下,可能需要对迁移到其他类型数据库,使用xml配置:

  1. 可以不需要改动代码, 而仅需复制一份xml, 针对新的类型的数据库进行兼容性改造。
  2. 新旧数据库切换时,在发生异常时,可以切换回旧的数据库操作,保证业务连续性。

参考文献

官网中文文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql中的锁机制详解

一、概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中&#xff0c;除了传统的计算资源&#xff08;如CPU、RAM、I/O等&#xff09;的争用以外&#xff0c;数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决…

一文讲懂Spring Event事件通知机制

目录 一 什么是spring event 二 怎么实现spring event 一 什么是spring event 我不会按照官方的解释来说什么是spring event&#xff0c;我只是按照自己的理解来解释&#xff0c;可能原理上会和官方有偏差&#xff0c;但是它的作用和功能就是这个&#xff0c;我更加偏向于从他…

Rust:Restful API 服务程序开发详述

0. 关于异步程序设计 0.1 对异步机制的理解 运行效率对于后端程序来讲很重要。我曾经以为&#xff0c;多线程机制是后端设计的终极方法&#xff0c;后来才发现&#xff0c;异步机制才是榨干 CPU 运行效率资源的关键所在。 我最初对于异步程序设计有误解&#xff0c;以为多线…

详解React setState调用原理和批量更新的过程

1. React setState 调用的原理 setState目录 1. React setState 调用的原理2. React setState 调用之后发生了什么&#xff1f;是同步还是异步&#xff1f;3. React中的setState批量更新的过程是什么&#xff1f; 具体的执行过程如下&#xff08;源码级解析&#xff09;&#x…

安卓13带有系统签名的应用不能正常使用webview 调用webview失败 系统应用app apk

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 android版本高一些的平台,经常会遇到一些权限安全问题,像客户的应用如果带有系统签名,会导致不能正常使用webview问题。 2.问题分析 我们log信息,可以发现下面的提示: Fo…

网络层ip协议

一.概念 ip协议主要是为了在复杂的网络环境中确定一个合适的路径来传输主机间的数据。简单来说就是用来确定主机的位置。 ip协议中的一些设备如下&#xff1a; 主机: 配有 IP 地址, 但是不进行路由控制的设备;路由器: 即配有 IP 地址, 又能进行路由控制;节点: 主机和路由器的统…

分库分表:应对大数据量挑战的数据库扩展策略

随着互联网技术的发展&#xff0c;数据量的爆炸性增长给数据库系统带来了前所未有的挑战。为了有效管理大规模数据并保持高性能&#xff0c;分库分表成为了一种常见的数据库扩展策略。本文将探讨分库分表的概念、动机、实施策略以及潜在的挑战和解决方案。 什么是分库分表&…

传统CV算法——边缘算子与图像金字塔算法介绍

边缘算子 图像梯度算子 - Sobel Sobel算子是一种用于边缘检测的图像梯度算子&#xff0c;它通过计算图像亮度的空间梯度来突出显示图像中的边缘。Sobel算子主要识别图像中亮度变化快的区域&#xff0c;这些区域通常对应于边缘。它是通过对图像进行水平和垂直方向的差分运算来…

5.2.数据结构-c/c++二叉树详解(下篇)(算法面试题)

本章所有代码请见&#xff1a;5.3.数据结构-c/c二叉树代码-CSDN博客 上篇:5.数据结构-c/c二叉树详解(上篇)&#xff08;遍历方法&#xff0c;完全二叉树&#xff09;-CSDN博客 目录 1 求二叉树 第k层的节点 2 查找一个节点是否在二叉树中 3 求二叉树节点的个数 4 求二叉树…

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中&#xff0c;如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹&#xff08;即该文件夹内没有任何文件或子文件夹&#xff09;&#xff0c;你可以使用rmdir命令。但是&#xff0c;如果mysql-8.0.31文件夹并非完全为空&#xff08;即它包含文件或子文件夹&#xf…

在js中观察者模式讲解

在JavaScript中,观察者模式(Observer Pattern)是一种设计模式,允许一个对象(被观察者,Subject)维护一个依赖它的对象列表(观察者,Observer),并在它自身状态发生变化时自动通知这些观察者。观察者模式的典型使用场景包括事件系统、数据绑定和实时更新等情况。 一 、…

.Net Core 笔试1

1、用两个线程一个输出字母一个输出数字&#xff0c;交替输出Chat数组 char[] aI "1234567".ToCharArray();char[] aC "ABCDEFG".ToCharArray();Task task1 null;Task task2 null;task1 Task.Run(() >{foreach (var item in aI){Console.WriteLine…

数据结构(邓俊辉)学习笔记】排序 1——快速排序:算法A

文章目录 1. 分而治之2. 轴点3. 构造轴点4. 单调性 不变性5. 实例 1. 分而治之 主题就是排序。实际上我们对于排序问题并不陌生。你应该记得在最开始的几章&#xff0c;我们就分别介绍过起泡排序、插入排序、选择排序以及归并排序&#xff0c;而在介绍散列技术时&#xff0c;我…

自定义TextView实现结尾加载动画

最近做项目&#xff0c;仿豆包和机器人对话的时候&#xff0c;机器人返回数据是流式返回的&#xff0c;需要在文本结尾添加加载动画&#xff0c;于是自己实现了自定义TextView控件。 源码如下&#xff1a; import android.content.Context import android.graphics.Canvas imp…

Html、Css3动画效果

文章目录 第九章 动画9.1 transform动画9.2 transition过渡动画9.3 定义动画 第九章 动画 9.1 transform动画 transform 2D变形 translate()&#xff1a;平移函数&#xff0c;基于X、Y坐标重新定位元素的位置 scale()&#xff1a;缩放函数&#xff0c;可以使任意元素对象尺…

【系统架构设计师-2010年】综合知识-答案及详解

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2题】【第3题】【第4~5题】【第6题】【第7~8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第21题】【第22题】【第…

高斯平面直角坐标讲解,以及地理坐标转换高斯平面直角坐标

高斯平面直角坐标系(Gauss-Krger 坐标系)是基于 高斯-克吕格投影 的一种常见的平面坐标系统,主要用于地理信息系统 (GIS)、测绘和工程等领域。该坐标系将地球表面的经纬度(地理坐标)通过一种投影方式转换为平面直角坐标,以便在二维平面中进行距离、面积和角度的计算。 一…

自动化抢票 12306

自动化抢票 12306 1. 明确需求 明确采集的网站以及数据内容 网址: https://kyfw.12306.cn/otn/leftTicket/init数据: 车次相关信息 2. 抓包分析 通过浏览器开发者工具分析对应的数据位置 打开开发者工具 F12 或鼠标右键点击检查 刷新网页 点击下一页/下滑网页页面/点击搜…

基于云原生向量数据库 PieCloudVector 的 RAG 实践

近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;已然成为最热门的话题之一。工业界出现了各种内容生成工具&#xff0c;能够跨多种模态产生多样化的内容。这些主流的模型能够取得卓越表现&#xff0c;归功于创新的算法、模型规模的大幅扩展&#xff0c;以及海…

HalconDotNet中的图像特征与提取详解

文章目录 简介一、边缘特征提取二、角点特征提取三、区域特征提取四、纹理特征提取五、形状特征提取 简介 图像特征提取是图像处理中的一个重要步骤&#xff0c;用于从图像中提取有意义的特征&#xff0c;以便进行进一步的分析和处理。HalconDotNet提供了多种图像特征提取方法&…