springboot整合mybatis

2023-09-22 10:58:27

整合Spring Boot与MyBatis框架的步骤如下:

步骤1:创建Spring Boot项目
  - 在IDE中创建一个新的Spring Boot项目。

步骤2:添加相关依赖
  - 在项目的pom.xml文件中添加以下依赖:
 

   <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

步骤3:配置数据库连接
  - 在application.properties或application.yml文件中添加数据库连接的相关配置:
 这里我就用properties 

  将username以及password还有db_name 换成自己的

   spring.datasource.url=jdbc:mysql://localhost:3306/db_name
    spring.datasource.username=db_username
    spring.datasource.password=db_password
    spring.datasource.driverClassName=com.mysql.jdbc.Driver

yml形式的

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_name?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: your_name
    password: your_password

此外还要进行classpath的配置:

如果你想指定MyBatis的Mapper文件所在的类路径,可以在配置文件中添加以下配置:

YAML格式:
 

mybatis:
  mapper-locations: classpath:com/example/mapper/*.xml


 

Properties格式:
 

mybatis.mapper-locations=classpath:com/example/mapper/*.xml

上述配置表示Mapper文件位于`com/example/mapper/`目录下,并且文件后缀为`.xml`。

此外,如果你的Mapper文件位于不同的路径下,也可以使用多个`classpath`来指定多个路径:

YAML格式:
 

mybatis:
  mapper-locations: 
    - classpath:com/example/mapper1/*.xml
    - classpath:com/example/mapper2/*.xml

Properties格式:
 

mybatis.mapper-locations=classpath:com/example/mapper1/*.xml, classpath:com/example/mapper2/*.xml

步骤4:创建实体类和Mapper接口以及配置类
  - 在src/main/java目录下创建实体类和Mapper接口,实体类用于映射数据库表的字段,Mapper接口用于定义CRUD操作的方法。

@Configuration
@MapperScan("com.fish.mapper")
public class MybatisConfiguration {
}

步骤5:编写Mapper.xml文件
  - 在src/main/resources目录下创建Mapper.xml文件,用于编写SQL语句和映射关系。
 

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mapper namespace="com.example.mapper.UserMapper">
        <resultMap id="UserResultMap" type="com.example.entity.User">
            <result column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="email" property="email"/>
        </resultMap>

        <select id="findById" parameterType="int" resultMap="UserResultMap">
            SELECT * FROM user WHERE id = #{id}
        </select>

        <insert id="save" parameterType="com.example.entity.User">
            INSERT INTO user (name, email) VALUES (#{name}, #{email})
        </insert>

        <update id="update" parameterType="com.example.entity.User">
            UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}
        </update>

        <delete id="deleteById" parameterType="int">
            DELETE FROM user WHERE id = #{id}
        </delete>
    </mapper>

当在MyBatis的Mapper.xml文件中编写SQL语句时,我们可以使用一些特殊的语法来实现动态的SQL拼接,比如:

1. If语句

<select id="getUserList" parameterType="com.example.entity.User" resultMap="UserResultMap">
    SELECT * FROM user
    WHERE 1=1
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="email != null">
        AND email = #{email}
    </if>
</select>

在上述示例中,<if>标签用于条件判断,根据传入的参数动态拼接SQL语句。如果传入的name不为null,则会拼接AND name = #{name},如果传入的email不为null,则会拼接AND email = #{email}。

2. Where语句与判断语句

<select id="getUserList" parameterType="com.example.entity.User" resultMap="UserResultMap">
    SELECT * FROM user
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="email != null">
            AND email = #{email}
        </if>
    </where>
</select>

在上述示例中,<where>标签用于条件拼接,其中的<if>标签用于判断是否拼接该条件。如果传入的name不为null,则会拼接AND name = #{name},如果传入的email不为null,则会拼接AND email = #{email}。使用<where>标签可以在没有满足条件时自动省略WHERE关键字,避免额外的空白。

3. Choose语句(类似于Java中的switch语句)

<select id="getUserList" parameterType="com.example.entity.User" resultMap="UserResultMap">
    SELECT * FROM user
    <where>
        <choose>
            <when test="name != null">
                AND name = #{name}
            </when>
            <when test="email != null">
                AND email = #{email}
            </when>
            <otherwise>
                AND age &gt;= #{age}
            </otherwise>
        </choose>
    </where>
</select>

在上述示例中,<choose>标签类似于Java中的switch语句,用于根据不同的条件拼接不同的SQL语句。如果传入的name不为null,则条件为AND name = #{name},如果传入的email不为null,则条件为AND email = #{email},否则条件为AND age >= #{age}。

在上述示例的XML文件中,你可以看到以下SQL语句涉及到的语法:

- `<select>`:用于查询数据。
- `<insert>`:用于插入数据。
- `<update>`:用于更新数据。
- `<delete>`:用于删除数据。
- `#{}`:占位符,用于传递参数。
- `resultMap`:映射关系,将数据库字段映射到实体类属性。
- `<result>`:用于定义映射关系,指定数据库列和实体属性的对应关系。

更多推荐

Spark

ApacheSpark是一种快速、通用、可扩展的大数据处理引擎,旨在处理大规模数据集并进行高效的数据分析。与HadoopMapReduce相比,Spark具有更高的性能和更丰富的功能,可以处理更复杂的数据处理任务。以下是ApacheSpark的一些基本概念:SparkCore:这是Spark的基本引擎,提供了分布式任务

计算机网络的分层体系结构

为什么要分层面对一个复杂系统时,将其划分成小的,功能独立的模块或子系统,能更好的解决问题付诸应用。有哪些好处各层之间是独立的灵活性好结构上可以分开易于实现和维护有利于功能复用能促进标准化工作计算机网络体系结构经历的阶段计算机网络分层体系结构的发展经历了以下主要阶段:早期的分层概念(1970s):分层体系结构的思想最早出

2023.9.11 关于传输层协议 UDP和TCP 详解

目录UDP协议TCP协议TCP十大核心机制确认应答超时重传连接管理(三次握手四次挥手)滑动窗口流量控制拥塞控制延时应答捎带应答面向字节流粘包问题TCP中的异常处理经典面试题对比TCP和UDP如何使用UDP实现可靠传输UDP协议源端口:指发送方的端口号目的端口:指接收方的端口号注意:端口号都是用两个字节来表示的,也就是1

前端开发学习指南

这篇文章很长,但的确是一篇非常干的干货,讲诉了HTML、JavaScript、CSS、jQuery使用的一些规范与建议,前端的同学可以认真阅读此文,并比较自己平时的一些习惯,看是否有改进的地方……HTML咋地了,DOCTYPE?不定义DOCTYPE是一种可以被判死刑的罪行。以前你可能用的是下面的DOCTYPE,不过你要

提前放电避雷针防雷综合应用方案

放电避雷针是一种利用电离空气提前放电的避雷装置,可以有效地保护建筑物、设备和人员免受雷电的危害。放电避雷针有多种类型,根据其放电机理和结构特点,可以分为以下几类:地凯科技预放电避雷针:这种避雷针利用雷云产生的空间电场强度,预先使周围的空气电离,空气离子在空间电场的作用下加速接近雷云,从而使迎面先导大大提前与雷云的下行先

Raft协议

前言最近在系统的实战springcloud,在学习nacos过程,我们知道nacos的底层用到了Raft协议。在Raft协议之前是一个paxos的协议,但是这个协议有点复杂,于是Stanford的两位教授决定设计一种较简单的一致性算法。参考自Raft动态演示网站我们一起来学习一下Raft协议。Raft前置概念term:

【CSS3】CSS3 3D 转换 ④ ( 3D 旋转 rotate3d | rotate3d 语法 | rotate3d 自定义轴旋转 | 元素旋转方向 - 左手准则 | 代码示例 )

文章目录一、3D旋转rotate3d1、rotate3d语法2、rotate3d自定义轴旋转3、元素旋转方向-左手准则二、代码示例1、代码示例2、执行结果一、3D旋转rotate3d3D旋转指的是在三维空间坐标系中,绕X轴,Y轴,Z轴进行旋转,同时还可以绕自定义轴进行旋转;2D旋转只能以某个点为中心进行旋转,3D旋转可

eSIM简介

翻译自eSIMeSIMeSIM被称为许多不同的名字。有人说嵌入式SIM,有人说电子SIM和其他的说eSIM。在行业标准最终确定并在该地区广泛采用之前,还会有其他名称出现。无论我们称之为什么,此SIM的基本思想是将SIM(UICC)作为用户设备(例如,M2M终端,移动电话等)的不可移除/固定组件分发。设备制造商对SIM卡

可以创业,也可以副业的网上长期挣钱的项目

在这个飞速发展的互联网时代,越来越多的人开始尝试在网上创业或者寻找一份可持续的副业来增加收入。不过在网上赚钱的难度是比较大的,不是轻易就能做到的,所以不付出一番努力,没有悟性和执行力,那么是很难做好的,那么有哪些靠谱的互联网长期赚钱项目呢?分享几个适合互联网创业或者副业的长期挣钱项目,希望能够对大家有所帮助。博客很多人

代码随想录二刷Day 15

102.BinaryTreeLevelOrderTraversalvector<int>()itisbasicallyconstructorofstd::vectorclassandwillcreateanewemptyvector.Youcanalsomentionthesizeofrequiredvectorinb

如何低成本、低门槛开发全屋智能系统?

近期,某个科技通讯巨头豪掷15亿重金,准备成立房地产公司以大力推动全屋智能的发展。从大部分科技公司频频押注全屋智能领域来看,全屋智能已然成为智能家居第一大发展趋势,是资本市场的重头戏。但全屋智能并不好做,不仅在于智能化水平跟不上消费端真实需求,而且连接、交互、生态这三道枷锁(即智能单品连接协议不统一、家庭联动场景互相割

热文推荐