SpringBoot整合MyBatis——增删改查

1、概述

1.1 基本概念

  MyBatis是一款优秀的持久层框架,它支持简单的自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 pojo为数据库中的记录。
  Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。它默认配置了很多框架的使用方式,也就是说Spring Boot 整合了所有的框架。

1.2 JDBC和MyBatis的区别

1.2.1 JDBC使用步骤

详情
(1)导入jar包(存放了大量Java工具类的压缩包)————该jar包要与数据库版本匹配;
(2)注册驱动
(3)使用工具类,连接数据库 ————获取和数据库的连接;
(4)通过程序操作数据库 ————在程序中执行SQL语句;
(5)通过程序处理结果 ————数据库把结果返回给Java程序,Java程序再去解析结果。
(6)释放资源

1.2.2 JDBC缺点

(1)数据库连接的创建和释放频繁而造成系统资源浪费从而影响系统的性能;
(2)修改sql就要修改代码,系统不易维护;

1.2.3 MyBatis优点

(1)MyBatis内部整合了JDBC,简化了持久层开发;
(2)MyBatis可以自动的封装结果集的对象,满足ORM中的一个条件,所以将MyBatis称之为半自动化的ORM映射框架
(3)MyBatis有缓存机制,一级缓存/二级缓存,提高用户的查询效率;
(4)MyBatis支持多种类型的数据库,整合简单。

1.2.4 MyBatis缺点

(1)实现数据的封装,resultMap封装复杂;
(2)针对于单表的CRUD的操作不够便捷,SQL都需要手写;
(3)个别的情况下二级缓存配置不生效。

2、入门案例

2.1 创建项目

  创建Module
在这里插入图片描述
  设置模块配置信息
在这里插入图片描述

2.2 设计数据库

  创建数据库
在这里插入图片描述
  创建表

CREATE TABLE user(
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(20) not NULL,
  sex varchar(10) not NULL,
  age int(11) not NULL,
  PRIMARY KEY (id)
) CHARSET=utf8;

  添加数据
在这里插入图片描述

2.3 编辑pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>spring_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <!--项目坐标:组ID、项目名、版本号
        作用:
            1、可以在本地仓库中定位项目
            2、可以作为依赖项被其他项目引用 -->

    <properties>
        <!--指定JDK版本-->
        <java.version>1.8</java.version>
        <!--跳过测试类打包-->
        <skipTests>true</skipTests>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <!--“spring-boot-starter”是Spring的启动器。在内部已经将整合的配置写好了,拿来就可以使用-->
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!--添加lombok的jar依赖包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--支持热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!--引入数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--springBoot数据库连接  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--spring整合mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
    </dependencies>

    <!--build标签
        springboot项目在打包部署发布时,需要依赖maven工具API
        如果不添加该插件,则直接影响项目的发布
    -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.5.3</version>
            </plugin>
        </plugins>
    </build>
</project>

2.4 构建层级代码结构

![在这里插入图片描述](https://img-blog.csdnimg.cn/6e1![在这里插入图片描述](https://img-blog.csdnimg.cn/9535bc6d42354ed3ae052a3a30c0bb73.png)ca3261a9d44a8b09b4f15ee4ca419.png)

2.5 编辑核心配置文件(application.yml)

#端口配置
server:
  port: 8090

#配置数据源
spring:
  datasource:
    #如果使用高版本驱动 则添加cj
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/qyx?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#Spring整合Mybatis
mybatis:
  #定义别名包
  type-aliases-package: com.example.pojo
  #导入映射文件(指定映射文件的路径)
  mapper-locations: classpath:/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  #打印日志
  logging:
    level:
      com.example.mapper: debug

2.6 创建主启动类(RunApp.java)

package com.example;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mapper")
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class,args);
    }
}

2.7 编辑pojo类(User.java)

  根据数据库中对应表中的字段名进行编辑

package com.example.pojo;

import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;

@Data
@Accessors(chain = true)
public class User implements Serializable {
    private Integer id;
    private String name;
    private String sex;
    private String age;
}

2.8 编辑mapper接口

  以 “ 查询指定数据库中所有数据 ” 为例

package com.example.mapper;

import com.example.pojo.User;
import org.springframework.stereotype.Controller;
import java.util.List;

@Controller
public interface UserMapper {
    //查询所有数据
    List<User> getAll();
}

2.9 编辑mapper.xml配置文件(映射器)

<?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">
    <!--查询所有数据-->
    <select id="getAll" resultType="User">
        select * from user
    </select>
</mapper>

2.10 编辑测试类

package com.example;

import com.example.mapper.UserMapper;
import com.example.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;

@SpringBootTest
public class Test1 {
    @Autowired
    private UserMapper userMapper;

    //查询所有数据
    @Test
    public void getAll(){
        List<User> all = userMapper.getAll();
        for (User user:all){
            System.out.println(user);
        }
    }
}

运行结果
在这里插入图片描述

2.11 实现动态sql查询

1、在UserMapper接口中添加selectById方法;
2、在UserMapper配置文件中添加select元素,并添加具体的sql语句;
3、在Test1测试类中添加selectById测试方法。
在这里插入图片描述
运行结果
在这里插入图片描述

2.12 实现修改操作

1、在UserMapper接口中添加updateById方法;
2、在UserMapper配置文件中添加update元素,并添加具体的sql语句;
3、在Test1测试类中添加updateById测试方法。
在这里插入图片描述
运行结果
在这里插入图片描述

2.13 实现动态SQL的修改操作

1、在UserMapper接口中添加updateByName方法;
2、在UserMapper配置文件中添加update元素,并添加具体的sql语句;
3、在Test1测试类中添加updateByName测试方法。
在这里插入图片描述
运行结果
在这里插入图片描述

2.14 利用注解实现增删改查操作

使用方式:
  在mapper接口中对应的业务方法前加对应的sql标签的注解,例如查询用注解@select(“sql语句”)。

package com.example.mapper;

import com.example.pojo.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Controller;
import java.util.List;

@Controller
public interface UserMapper {
    //查询所有数据
    @Select("select * from user")
    List<User> getAll();

    //根据id查询数据
    @Select("select * from user where id = #{id}")
    List<User> selectById(Integer id);

    //修改数据
    @Update("update user set sex='女' where id = 3")
    int updateById();

    //根据name修改数据
    @Update("update user set sex=#{sex} where name=#{name}")
    int updateByName(String sex,String name);
}

注意:
  若数据库中的字段名和Java项目的实体类中的属性名不一致时,需要使用@Results注解;
  @Results注解可以将查询结果集映射到实体类属性;
  使用方式:写在@select(“sql语句”)注解和业务方法中间;
  具体使用方式如下:

	 //查询所有数据
    @Select("select * from user")
    @Results({
            @Result(column = "id" ,property = "id"),
            @Result(column = "name" ,property = "name"),
            @Result(column = "sex",property = "sex"),
            @Result(column = "age",property = "age")
    })
    List<User> getAll();

  当使用该注解的情况较多时,可以使用@ResultMap注解,提高代码的复用性;
  具体使用方式如下:

 	//查询所有数据
    @Select("select * from user")
    @Results( id = "userMap" , value = {
            @Result(column = "id" ,property = "id"),
            @Result(column = "name" ,property = "name"),
            @Result(column = "sex",property = "sex"),
            @Result(column = "age",property = "age")
    })
    List<User> getAll();

    //根据id查询数据
    @Select("select * from user where id = #{id}")
    @ResultMap("userMap")
    List<User> selectById(Integer id);
  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值