使用MyBatis操作数据库及单元测试

目录

一.MyBatis介绍

二.MyBatis操作数据库步骤

三.单元测试

idea上生成测试

 配置mybatis日志

动态参数


一.MyBatis介绍

MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。

JDBC来操作数据库太复杂了,使用MyBatis 是因为它可以帮助我们更⽅便、更快速的操作数据库。

二.MyBatis操作数据库步骤

1.创建springboot工程,并导入mybatis的起步依赖、mysql的驱动包

2.创建用户表, 并创建对应的实体类User
   创建用户表
-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
USE mybatis_test;
-- 创建表[用户表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
 `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
 `username` VARCHAR ( 127 ) NOT NULL,
 `password` VARCHAR ( 127 ) NOT NULL,
 `age` TINYINT ( 4 ) NOT NULL,
 `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
 `phone` VARCHAR ( 15 ) DEFAULT NULL,
 `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now(),
 PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 
-- 添加用户信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

创建完成后查看数据库表的信息

3.建立数据库和Java对象的映射

package com.lele.demo.model;

import lombok.Data;

import java.util.Date;

@Data
public class UserInfo {

//和数据库中要一一对应
//  `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
// `username` VARCHAR ( 127 ) NOT NULL,
// `password` VARCHAR ( 127 ) NOT NULL,
// `age` TINYINT ( 4 ) NOT NULL,
// `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
//            `phone` VARCHAR ( 15 ) DEFAULT NULL,
// `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
//            `create_time` DATETIME DEFAULT now(),
// `update_time` DATETIME DEFAULT now(),


    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer delete_Flag;
    private Date create_Time;
    private Date update_Time;
}
4.创建对数据库的操作类
使用Mybatis对数据库的操作类,一般命名为xxxMapper
对数据库的操作就在这个类中完成
package com.lele.demo.mapper;

import com.lele.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

//MyBatis的注解
@Mapper
public interface UserInfoMapper {
    @Select("select * from userinfo")
    List<UserInfo> selectAll();
}
配置数据库连接字符串
Mybatis中要连接数据库,需要数据库相关参数配置
• MySQL驱动类
• 登录名
• 密码
• 数据库连接字符串
配置application.yml文件
 #数据库连接配置
spring:
 datasource:
 url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
 username: root
 password: root
 driver-class-name: com.mysql.cj.jdbc.Driver

测试结果:

三.单元测试

idea上生成测试

上面通过浏览器上测试的方式比较复杂,这里改用单元测试的方式。

在idea自动生成测试类,在需要写单元测试的类中进行如下操作。

 配置mybatis日志

mybatis:
    configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

配置上mybatis日志后,运行结果上会有执行语句的注释,更方便观察,也更方便观察出错原因。

查询单条信息并打印

动态参数

把SQL中的常量改成动态信息

参数重命名

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

判断单链表是否有环?中点如何判断?入环点如何判断?

首先我们需要克服我们一种错误的认知&#xff0c;链表有环&#xff0c;并不是有“死节”&#xff0c;如下所示&#xff0c;左侧的这种链表结构是不存在的&#xff0c;因为在相交的那个节点不可能有两个指针&#xff0c;只有像右侧这种结构才是存在的 判断链表是否有环的方法&am…

AI代码翻译神器,用AI翻译代码,轻松学习不同编程语言,已开源!

体验地址&#xff0c;github地址和部署地址在文章底部 AI代码翻译器的优势 近年来&#xff0c;随着技术的快速进步&#xff0c;人工智能技术展现出了在各个领域发挥作用的巨大潜力。AI代码翻译器作为一项创新技术&#xff0c;为开发者带来了全新的可能性。这项技术运用人工智…

Slurm随手记

写在前面&#xff1a;项目要用&#xff0c;随便记录一下 文章目录 简介快速开始框架命令建议MPI 参考资料&#xff1a; https://slurm.schedmd.com/quickstart.html https://blog.csdn.net/weixin_42279314/article/details/109677459 https://hpc.pku.edu.cn/_book/guide/slu…

在 2 万病例中识别出 31 例漏诊,阿里达摩院牵头发布「平扫 CT +大模型」筛查胰腺癌

作者&#xff1a;李宝珠 编辑&#xff1a;三羊 阿里达摩院联合国内外十余家医疗机构&#xff0c;发布 PANDA 大模型&#xff0c;实现胰腺癌早期筛查&#xff0c;在 2 万余真实世界连续病人群体中发现了 31 例临床漏诊病变。 尽管医学发展日新月异&#xff0c;但人们还是不免谈「…

AIGC绘画关键词 - 神兽类(一)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

【Linux系统编程】进程的认识

介绍&#xff1a; 进程是程序执行的实体&#xff0c;可将其理解为程序。比如&#xff1a;当我们使用文本编辑器Notepad应用程序来编写一篇文章时&#xff0c;此时&#xff0c;Notepad应用程序就被加载到了内存中&#xff0c;并且它占用的资源&#xff08;如内存、CPU等&#xf…

一篇文章带你进阶CTF命令执行

以下的命令是为了方便以后做题时方便各位读者直接来这里复制使用&#xff0c;刚开始还请先看完这篇文章后才会懂得下面的命令 ?ceval($_GET[shy]);&shypassthru(cat flag.php); #逃逸过滤 ?cinclude%09$_GET[shy]?>&shyphp://filter/readconvert.base64-…

三、W5100S/W5500+RP2040之MicroPython开发<DNS示例>

文章目录 1. 前言2. 相关网络信息2.1 简介2.2 DNS工作过程2.3 优点2.4 应用 3. WIZnet以太网芯片4. DNS解析示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPyt…

隐藏通信隧道技术——防御DNS隧道攻击

隐藏通信隧道技术——防御DNS隧道攻击 DNS协议 ​ DNS协议是一种请求/应答协议&#xff0c;也是一种可用于应用层的隧道技术。虽然激增的DNS流量可能会被发现&#xff0c;但是基于传统Socket隧道已经濒临淘汰及TCP、UDP通信大量被防御系统拦截的状况&#xff0c;DNS、ICMP、H…

消除企业级SSD写抖动的利器:擦写暂停技术

Erase/Program Suspension是1y以及3D Flash提供的一个新的命令接口。该命令可以在Erase/Program操作过程中将其暂停&#xff0c;然后执行其他的操作&#xff0c;并在某个时间重启之前暂停的操作。这篇文章将简述这种Suspension操作对SSD性能改善所起到的作用。 Erase/Program操…

Win系统安装MYSQL5.6安装版和5.7解压版

选择设置类型 双击运行mysql-installer-community-5.6.21.1.msi&#xff0c;这里选择是自定义安装&#xff0c;所以直接选择“Custom”&#xff0c;点击“Next”到下一步&#xff1a; “Developer Default”是开发者默 “Server only”仅作为服务器安装 “Client only”仅作为…

SQL基础:查询的基本使用

上一节我们讲述了记录的基本操作&#xff0c;这一节我们来单独讲一下查询。 查询基本结构 首先我们来看下查询的基本结构 SELECTcolumn1,column2,... FROMtable_name [WHEREcondition] [GROUP BYcolumn1, column2, ...] [HAVINGaggregate_function(column) condition] [ORDE…

存在重复元素

题目链接 存在重复元素 题目描述 注意点 无 解答思路 根据Set无法存储相同元素的特点判断nums中是否存在重复元素 代码 class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set new HashSet<Integer>();for (int x : nums) {if …

ADS学习笔记(二)——更新中

八、中途容性负载的时延累加 1.原理简述 中途容性负载产生的第一位影响就是下冲噪声&#xff0c;第二位影响是远端信号的接收时间被延迟。电容器与传输线的组合就像一个RC滤波器&#xff0c;所以传输信号10&#xff05;&#xff5e;90&#xff05;上升边将增加&#xff0c;信…

爬虫入门--爬取电影TOP250-附源码解析

爬取电影TOP250 1 知识小课堂1.1 什么是爬虫1.2 爬虫能做什么 2 代码解析2.1 运行环境2.2 过程解析2.2.1 第一步&#xff1a;引入两个模块2.2.2 找到网址2.2.3 拉去页面全内容 2.2.42.3 完整代码 1 知识小课堂 1.1 什么是爬虫 爬虫&#xff0c;也叫网络蜘蛛&#xff0c;如果把…

Python---端口和端口号的介绍

1. 问题思考 不同电脑上的飞秋之间进行数据通信&#xff0c;它是如何保证把数据给飞秋而不是给其它软件呢? 其实&#xff0c;每运行一个网络程序都会有一个端口&#xff0c;想要给对应的程序发送数据&#xff0c;找到对应的端口即可。 端口效果图: 2. 什么是端口 端口是传…

HarmonyOS自学-Day2(ArkTS生命周期)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;生命周期组件生命周期谁可以调用组件生命周期&#xff1f;组件生命周期有哪些&#xff1f; 页面生命周期谁可以调用页面生命周期&#xff1f;页面生命周期有哪些&#xff1f; 生命周期执行顺序&#xff08;非常重要&…

Jackson 注解及配置大全

Jackson JSON 框架中包含了大量的注解来让我们可以干预 Jackson 的 JSON 处理过程&#xff0c; 例如我们可以通过注解指定 java pojo 的某些属性在生成 json 时被忽略。。本文主要介绍如何使用 Jackson 提供的注解。 Jackson注解主要分成三类&#xff0c;一是只在序列化时生效的…

腾讯云服务器上传文件 :Permission denied (os error 13) ,由于权限无法上传

根据网上的修改云服务器上传文件目录的权限&#xff0c;或是用root权限上传本地文件&#xff0c;均失败。 正解办法&#xff1a; ubuntu:/home/wwwroot# sudo passwd root Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully首先修…

【lesson21】MySQL复合查询(2)子查询

文章目录 子查询测试要用到的表测试要用到的数据单行子查询案例 多行子查询案例 多列子查询案例 在from子句中使用子查询案例 合并查询union案例union all案例 子查询 子查询是指嵌入在其他sql语句中的select语句&#xff0c;也叫嵌套查询 测试要用到的表 测试要用到的数据 单…