java4.6 Spring Boot整合MyBatis

news2024/11/30 0:26:45

Spring Boot 整合MyBatis

(一)基础环境搭建

1、数据准备

(1)创建博客数据库blog

CREATE DATABASE blog

在这里插入图片描述
在这里插入图片描述
(2)在博客数据库里创建文章表t_article

CREATE TABLE `t_article` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '文章编号',
  `title` varchar(200) DEFAULT NULL COMMENT '文章标题',
  `content` longtext COMMENT '文章内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

在这里插入图片描述

(3)在文章表t_article里插入数据记录

INSERT INTO `t_article` VALUES ('1', 'Spring Boot基础入门', '从入门到精通讲解...');
INSERT INTO `t_article` VALUES ('2', 'Spring Cloud基础入门', '从入门到精通讲解...');
INSERT INTO `t_article` VALUES ('3', '安卓开发权威指南', '从入门到精通讲解...');

在这里插入图片描述

(4)在博客数据库里创建评论表t_comment

CREATE TABLE `t_comment` (
  `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '评论编号',
  `content` longtext COMMENT '评论内容',
  `author` varchar(200) DEFAULT NULL COMMENT '评论作者',
  `a_id` int(20) DEFAULT NULL COMMENT '关联的文章编号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

在这里插入图片描述
(5)在评论表t_comment里插入数据记录

INSERT INTO `t_comment` VALUES ('1', '很全、很详细', '小明', '1');
INSERT INTO `t_comment` VALUES ('2', '赞一个', '李文', '3');
INSERT INTO `t_comment` VALUES ('3', '很详细,喜欢', '童文宇', '1');
INSERT INTO `t_comment` VALUES ('4', '很好,非常详细', '钟小凯', '2');
INSERT INTO `t_comment` VALUES ('5', '很不错', '张三丰', '2');
INSERT INTO `t_comment` VALUES ('6', '操作性强,真棒', '唐雨涵', '3');
INSERT INTO `t_comment` VALUES ('7', '内容全面,讲解清晰', '张杨', '1');

在这里插入图片描述

2、创建项目,引入相应启动器

(1)创建Spring Boot项目MyBatisDemo
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>net.huawei.boot</groupId>
    <artifactId>springbootmybatisdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBootMyBatisDemo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

更新Maven项目依赖
在这里插入图片描述
(2)创建评论实体类 - Comment
在net.huawei.boot根包里创建bean子包,在子包里创建Comment类
在这里插入图片描述

package net.huawei.boot.bean;

/**
 * 功能:评论实体类
 * 作者:
 * 日期:2023年06月06日
 */
public class Comment {
    private Integer id;
    private String content;
    private String author;
    private Integer aId;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Integer getaId() {
        return aId;
    }

    public void setaId(Integer aId) {
        this.aId = aId;
    }

    @Override
    public String toString() {
        return "Comment{" +
                "id=" + id +
                ", content='" + content + '\'' +
                ", author='" + author + '\'' +
                ", aId=" + aId +
                '}';
    }
}

全局配置文件中必须配置以下语句,否则查出数据为null
在这里插入图片描述
(3)创建文章实体类 - Article
在net.huawei.boot.bean包里创建Article类
在这里插入图片描述

package net.huawei.boot.bean;

import java.util.List;

/**
 * 功能:文章实体类
 * 作者:
 * 日期:2023年06月06日
 */
public class Article {
    private Integer id;
    private String title;
    private String content;
    private List<Comment> comments;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public List<Comment> getComments() {
        return comments;
    }

    public void setComments(List<Comment> comments) {
        this.comments = comments;
    }

    @Override
    public String toString() {
        return "Article{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", comments=" + comments +
                '}';
    }
}

3、编写配置文件

将全局配置文件application.properties更名为application.yaml
在这里插入图片描述
(1)在全局配置文件中进行数据库连接配置
在这里插入图片描述

(2)数据源类型配置(以阿里巴巴的Druid数据源为例)
在这里插入图片描述

(3)在全局配置文件里覆盖默认参数
在这里插入图片描述

(二)使用注解方式整合MyBatis

1、创建评论映射器接口 - CommentMapper

在这里插入图片描述

package net.huawei.boot.mapper;

import net.huawei.boot.bean.Comment;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 功能:评论映射器接口
 * 作者:
 * 日期:2023年06月06日
 */
@Mapper // 交给Spring容器管理
public interface CommentMapper {
    @Insert("insert into t_comment values(#{id}, #{content}, #{author}, #{aId})")
    int insert(Comment comment); // 插入评论记录

    @Delete("delete from t_comment where id = #{id}")
    int deleteById(Integer id); // 按标识符删除评论

    @Update("update t_comment set content = #{content}, author = #{author} where id = #{id}")
    int update(Comment comment); // 更新评论

    @Select("select * from t_comment where id = #{id}")
    Comment findById(Integer id); // 按标识符查询评论

    @Select("select * from t_comment")
    List<Comment> findAll(); // 查询全部评论
}

2、在测试类编写测试方法,测试评论映射器接口

在这里插入图片描述
在这里插入图片描述
(1)创建测试方法testFindById()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
要避免这个警告信息,修改一下全局属性配置文件
在这里插入图片描述
再运行测试方法,查看结果
在这里插入图片描述
在这里插入图片描述
再运行测试方法,查看结果
在这里插入图片描述
在这里插入图片描述
(2)创建测试方法testFindAll()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
(3)创建测试方法testInsertComment()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
在Navicat里打开评论表,看是否成功地添加了一条新记录
在这里插入图片描述
(4)创建测试方法testUpdateComment()
修改刚才插入的第8条记录
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
(5)创建测试方法testDeleteComment()
删除刚才插入的第8条记录
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
在Navicat里查看评论表t_comment
在这里插入图片描述

(三)使用配置文件方式整合MyBatis

1、创建文章映射接口 - ArticleMapper

在这里插入图片描述

package net.hw.lesson06;

import org.apache.ibatis.annotations.Mapper;

/**
 * 功能:文章映射器接口
 * 作者:
 * 日期:
 */
@Mapper
public interface ArticleMapper {
    Article findArticleById(Integer id);
    int updateArticle(Article article);
}

2、创建映射器配置文件 - ArticleMapper.xml

在resources目录里创建mapper目录,在mapper目录里创建ArticleMapper.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="net.hw.lesson06.mapper.ArticleMapper">
    <!--按id查询记录,文章表与评论表关联查询-->
    <select id="findArticleById" resultMap="articleWithComment">
        SELECT a.*, c.id c_id, c.content c_content, c.author, c.a_id
        FROM t_article a, t_comment c
        WHERE a.id = c.a_id AND a.id = #{id}
    </select>

    <!--结果集,一篇文章对应多个评论构成的集合-->
    <resultMap id="articleWithComment" type="Article">
        <id property="id" column="id"/>
        <result property="title" column="title"/>
        <result property="content" column="content"/>
        <collection property="commentList" ofType="Comment">
            <id property="id" column="c_id"/>
            <result property="content" column="c_content"/>
            <result property="author" column="author"/>
            <result property="aId" column="a_id"/>
        </collection>
    </resultMap>

    <!--更新记录-->
    <update id="updateArticle" parameterType="Article">
        UPDATE t_article
        <set>
            <if test="title != null and title != ''">
                title = #{title},
            </if>
            <if test="content != null and content != ''">
                content = #{content}
            </if>
        </set>
        WHERE id = #{id}
    </update>
</mapper>

3、在全局配置文件里配置映射器配置文件路径、

在这里插入图片描述

4、在测试类编写测试方法,测试文章映射器

注入文章映射器
在这里插入图片描述

(1)创建测试方法testFindArticleById()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
修改测试代码,再进行测试
在这里插入图片描述

(2)创建测试方法testUpdateArticle()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述

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

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

相关文章

安全可以被“看见”吗?华云安的答案是“可以,且持续验证”

科技云报道原创。 近年来&#xff0c;随着攻防对抗技术的不断升级&#xff0c;安全运营市场“新贵”不断涌现&#xff0c;从安全信息和事件管理&#xff08;SIEM&#xff09;、扩展检测与响应&#xff08;XDR&#xff09;&#xff0c;到攻击面管理&#xff08;ASM&#xff09;…

地震勘探基础(十三)之地震资料解释

地震资料解释 地震资料解释&#xff08;seismic interpretation&#xff09;就是把经过采集和计算机处理后的地震数据转变为地质信息的过程。也就是由已知实际观测的地震数据反演地下地质特征的过程&#xff0c;因此地震资料解释也可称为地震反演。 根据地震资料类型不同&…

【python】 用来将对象持久化的 pickle 模块

pickle 模块可以对一个 Python 对象的二进制进行序列化和反序列化。说白了&#xff0c;就是它能够实现任意对象与二进制直接的相互转化&#xff0c;也可以实现对象与文本之间的相互转化。 比如&#xff0c;我程序里有一个 python 对象&#xff0c;我想把它存到磁盘里&#xff…

有什么好用的电容笔?好用的苹果平替笔

目前市面上的电容笔品类众多&#xff0c;面对琳琅满目的电容笔&#xff0c;很多人一时之间无从下手&#xff0c;不知道口碑比较好的电容笔是什么牌子&#xff0c;因此小编根据电容笔热卖榜&#xff0c;给大家整理了一期电容笔测评&#xff0c;希望能给大家选购电容笔带来帮助和…

3DVR全景技术引领乡村发展新时代!

导语&#xff1a; 在当代社会&#xff0c;科技的迅猛发展与数字化的浪潮已经深入到各个行业&#xff0c;带来了许多新的机遇与挑战。 数字乡村的概念逐渐引起人们的关注与热议。数字乡村作为现代化与传统农业的结合产物&#xff0c;以数字技术和虚拟现实&#xff08;VR&#…

格灵深瞳发布“深瞳阿瞳目”,体育课离AI越来越近

向上探索更普适的大语言模型&#xff0c;向下寻找更具体的应用场景&#xff0c;AI厂商正在这两条路上狂奔。 在众多应用场景中&#xff0c;教育是AI最重要的应用方向之一。中国有2.91亿在校学生、1844.37万专任教师、2800万台校园终端设备&#xff0c;庞大的用户体量汇聚了海量…

聊一聊关于视频缩略图缓存策略

作者&#xff1a;一只修仙的猿 最近回归android业务开发&#xff0c;开发了如下图的视频剪辑时间轴&#xff08;图源&#xff1a;剪映&#xff09;&#xff1a; 对于时间轴上的缩略图&#xff0c;需要去解码器加载获取。若每次都去解码器获取&#xff0c;会导致缩略图加载卡顿&…

webpack处理图片资源(jpeg,jpg,png等)

在webpack5以前&#xff0c;我们处理图片资源通过 file-loader 和 url-loader 进行处理 现在 Webpack5 已经将两个 Loader 功能内置到 Webpack 里了&#xff0c;我们只需要简单配置即可处理图片资源 webpack.config.js配置 {test: /\.(png|jpe?g|gif|webp)$/,type: "as…

Kubernetes高级存储

Kubernetes高级存储 PV PVC k8s支持的存储系统很多&#xff0c;全部掌握不现实。为了屏蔽底层存储实现的细节&#xff0c;方便用户使用&#xff0c;k8s引入PV和PVC两种资源对象。 PV(Persistent Volume)持久化卷&#xff0c;对底层共享存储的抽象&#xff0c;一般由k8s管理员进…

如何通过Shopee大数据选品,在3分钟选出热销爆款!

近年来&#xff0c;随着互联网技术的不断发展&#xff0c;人工智能和大数据成为越来越多人们熟知的概念。通过大数据分析进行选品&#xff0c;能够快速精准地预判各行业类目的变化趋势&#xff0c;帮助我们有效地优化选品、做出正确的销售决策。 大数据选品是指通过Shopee多品类…

Linux——进程地址空间

目录 1、程序地址空间 1.1 研究背景 1.2 程序地址空间 1.3 空间布局图代码测试 1.4 用户空间及内核空间 1.5 Linux及windows对比 1.6 分析Linux下虚拟地址及物理地址 2、进程地址空间 2.1 地址空间概念 2.2 地址空间及页表映射分析 2.3 写时拷贝及虚拟地址再次分析 …

【Flowable】Flowable网关

网关用来控制流程的流向 1.排他网关 排他网关&#xff08;exclusive gateway&#xff09;&#xff08;也叫异或网关 XOR gateway&#xff0c;或者更专业的&#xff0c;基于数据的排他网关 exclusive data-based gateway&#xff09;&#xff0c;用于对流程中的决策建模。当执行…

类脑计算讲解

当前&#xff0c;人工智能的发展有两个主要路径&#xff0c;一个是沿计算机科学发展而来的深度学习途径&#xff0c;另一个是沿着模仿人脑发展而来的类脑计算途径。 类脑计算途径 这个方向是以模拟人脑神经网络计算为基础而发展出的一种新型芯片&#xff0c;通过模拟神经元和…

直播商品库功能(互动功能接收端JS-SDK)

功能概述 图&#xff1a;边看边买--效果截图 本模块主要处理商品库相关逻辑&#xff0c;如展示商品、商品推送和商品上下架等消息。 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要对SDK进行初始化配置&#xff0c;详细见参考文档。 在线文件引入方式 // scri…

【论文阅读】Lora

概述 目的在原有大模型上进行fine tune&#xff0c;训练个性化模型 idea&#xff1a;将pretrained model参数冻住&#xff0c;额外训练一个module进行调整&#xff0c;最终输出是原始输出经过module的输出。 技巧&#xff1a;通过低秩分解大大降低了需要训练参数的数量。矩阵…

简单AES加解密Demo——带你了解AES

1.AES简介 AES的全称是Advanced Encryption Standard&#xff0c;意思是高级加密标准。它的出现主要是为了取代DES加密算法的&#xff0c;因为我们都知道DES算法的密钥长度是56Bit&#xff0c;因此算法的理论安全强度是2的56次方。但二十世纪中后期正是计算机飞速发展的阶段&am…

外包的水太深了,18k的阿里外包不太敢去.....

有挺多测试员曾在BAT、网易这些大厂做过外包&#xff0c;想必大家也是非常关心此类问题&#xff0c;我就想介绍下“什么是外包&#xff1f;”&#xff0c;“外包公司的现状”&#xff0c;就“为什么这么多人鄙视外包测试岗&#xff1f;”、”阿里18K的外包测试岗能去吗&#xf…

phpstudy搭建dvwa(以及搭建dvwa问题解决)

目录 phpstudy 下载 问题解决 启动问题 DVWA 下载 安装 配置 phpstudy 下载 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; (xp.cn) 问题解决 启动问题 要使用dvwa靶场&#xff0c;Apache和myql都是需要启动的&#xff0c;但是可能会遇到mysql启动不…

三大抽样分布

1.三大抽样分布 本人博客&#xff1a;总体分布、样本分布、抽样分布的区别 每一个样本统计量&#xff08;本质是随机变量&#xff09;都有一个分布 以样本平均数为例&#xff0c;它是总体平均数的一个估计量&#xff0c;如果按照相同的样本容量&#xff0c;相同的抽样方式&am…

LVS负载均衡群集——NAT模式实例

目录 一、集群与分布式1.1 集群的含义1.2 LVS模型1.3 系统性能扩展方式1.4 群集的三种类型1.4.1 负载均衡群集1.4.2 高可用群集1.4.3 高性能运算群集 1.5 LVS 的负载调度算法①轮询&#xff08;Round Robin&#xff09;②加权轮询&#xff08;Weighted Round Robin&#xff09;…