MyBatis操作数据库(查询功能)

news2024/11/26 4:35:52

目录

一、MyBatis的概念

二、配置MyBits环境

三、 MyBatis连接数据库查询操作(示例)

创建MySQL数据库表

配置MyBatis

配置连接数据库和MyBatis xml文件

​编辑

四、添加业务代码

实体类entity

数据持久层mapper

创建接口类

创建xml文件

 服务层Service

控制层controller


一、MyBatis的概念

         MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库工具。学习MyBatis可以帮助我们代替繁琐、复杂的使用JDBC去操作连接数据库,让我们更加快速、简单的去操作数据库。

二、配置MyBits环境

        MyBatis的创建是基于SpringBoot项目来创建的,较于SpringBoot项目的创建来说,只是增加了相关的MyBatis 依赖和数据库驱动。

        注意:添加MyBatis依赖后,不要忘记添加数据库驱动,因为操作数据库就必须要添加相关数据库的驱动才可实现操作数据库。MyBatis 与数据库驱动成对出现

以操作MySQL数据库为例:

创建MyBatis和SpringBoot类似,在选择相关项目会有所不同,差别如下

 

 

此时MyBatis项目还需要配置连接数据库的URL,否则项目启动会报错。

步骤:先创建数据库表,再进行MyBatis配置数据库的连接URL

三、 MyBatis连接数据库查询操作(示例)

创建MySQL数据库表

先创建MySQL数据库相关表,SQL语句如下:

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;
 
-- 使用数据数据
use mycnblog;
 
-- 创建表[用户表]
drop table if exists  userinfo;
create table userinfo(
    id int primary key auto_increment,
    username varchar(100) not null,
    password varchar(32) not null,
    photo varchar(500) default '',
    createtime datetime default now(),
    updatetime datetime default now(),
    `state` int default 1
) default charset 'utf8mb4';
 
-- 创建文章表
drop table if exists  articleinfo;
create table articleinfo(
    id int primary key auto_increment,
    title varchar(100) not null,
    content text not null,
    createtime datetime default now(),
    updatetime datetime default now(),
    uid int not null,
    rcount int not null default 1,
    `state` int default 1
)default charset 'utf8mb4';
 
-- 创建视频表
drop table if exists videoinfo;
create table videoinfo(
  	vid int primary key,
  	`title` varchar(250),
  	`url` varchar(1000),
		createtime datetime default now(),
		updatetime datetime default now(),
  	uid int
)default charset 'utf8mb4';
 
-- 添加一个用户信息
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`, `createtime`, `updatetime`, `state`) VALUES 
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1);
 
-- 文章添加测试数据
insert into articleinfo(title,content,uid)
    values('Java','Java正文',1);
    
-- 添加视频
insert into videoinfo(vid,title,url,uid) values(1,'java title','http://www.baidu.com',1);

配置MyBatis

此步骤需要进⾏两项设置,数据库连接字符串设置和 MyBatis 的 XML ⽂件配置

配置连接数据库和MyBatis xml文件

MyBatis 的 XML 中保存是查询数据库的具体操作 SQL,配置如下:


# 开发环境配置文件
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: xzf1314520
    driver-class-name: com.mysql.cj.jdbc.Driver

# 配置MyBatis的xml文件
mybatis:
  mapper-locations: classpath:mybatis/*Mapper.xml

 

四、添加业务代码

使用MyBatis来操作数据库有以下流程:

 创建项目目录如下:

 

业务代码编写顺序:实体类entity -->  数据持久层 mapper --> 服务层 service --> 控制层 controller

实体类entity

package com.example.demo.entity;

import lombok.Data;

import java.time.LocalDateTime;

@Data // 使用get和set 方法
public class UserInfo {
    private int id;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private int state;
}

数据持久层mapper

数据持久层mapper 需要创建接口和xml 文件配置

创建接口类

 UserMapper 接口代码如下:

package com.example.demo.mapper;

import com.example.demo.entity.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper // 随着Spring创建而加载
public interface UserMapper {
    UserInfo userId(@Param("id") Integer id);
}

创建xml文件

UserMapper.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.demo.mapper.UserMapper">

    <!--    实现接口方法名 + 返回类型:查询实体类的类名-->
    <select id="userId" resultType="com.example.demo.entity.UserInfo">
        select * from userinfo where id=${id} <!--大括号里面的id 为数据持久层mapper接口方法中 注解param映射的id-->
    </select>

</mapper>

 服务层Service

UserService.java

package com.example.demo.service;

import com.example.demo.entity.UserInfo;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired  // 属性注入(将数据持久层 的接口方法注入进行调用)
    private UserMapper userMapper;

    public UserInfo userId(Integer id){ // 此处UserInfo为实体类对象,userId 为数据持久层接口方法
        return userMapper.userId(id); // 返回接口方法中的id
    }
}

控制层controller

UserController.java

package com.example.demo.controller;

import com.example.demo.entity.UserInfo;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")

public class UserController {

    @Autowired // 调用service层的方法
    private UserService userService;

    @RequestMapping("/getid")
    public UserInfo userId(Integer id){ // 使用实体类对象和接口方法
        if(id == null){
            return null;
        }
        return userService.userId(id);
    }
}

 

最后运行启动类,在浏览器输入本地URL,查找id=1的数据库信息

 使用MyBatis 查询数据库就建立成功了

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

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

相关文章

偏向锁、轻量级锁、重量级锁、自旋锁、自适应自旋锁

1. 偏向锁 偏向锁就是在运行过程中&#xff0c;对象的锁偏向某个线程。即在开启偏向锁机制的情况下&#xff0c;某个线程获得锁&#xff0c;当该线程下次再想要获得锁时&#xff0c;不需要重新申请获得锁&#xff08;即忽略synchronized关键词&#xff09;&#xff0c;直接就可…

python 房价数据可视化以数据缺失处理、及回归算法

基本信息概述 房价数据为他国地区使用工具为JupyterLab、python3用到的包 绘图包&#xff1a;seaborn、matplotlib数据处理包&#xff1a;numpy、pandas统计计算包&#xff1a;math、scipy回归模型包&#xff1a;make_pipeline、 RobustScaler、ElasticNet,Lasso、KernelRidge…

设计模式(十四):行为型之策略模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

Python使用最新版pyinstaller将项目或程序打包成exe或者mac中的可执行文件

1、pyinstaller的说明&#xff1a; pyinstaller 能够在 Windows、Linux、Mac 等操作系统下将 Python 源文件打包&#xff0c;通过对源文件打包&#xff0c; Python 程序可以在没有安装 Python 的环境中运行&#xff0c;也可以作为一个独立文件方便传递和管理。 PyInstaller 支…

进程管道:父进程和子进程

在接下来的对pipe调用的研究中&#xff0c;我们将学习如何在子进程中运行一个与其父进程完全不同的另外一个程序&#xff0c;而不是仅仅运行一个相同程序。我们用exec调用来完成这一工作。这里的一个难点是&#xff0c;通过exec调用的进程需要知道应该访问哪个文件描述符。在前…

设计模式(十三):行为型之模板方法模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

S200, S1700, S5700交换机忘记密码怎么办(huawei)

目录 交换机忘记密码怎么办&#xff1f;如何修改或清除密码&#xff1f; 简介 一&#xff1a;修改了所有默认密码&#xff0c;还忘记了所有密码 二&#xff1a;忘记了Console口登录密码 方法一&#xff1a;通过STelnet/Telnet登录设备修改Console口密码 方法二&#xff1…

RV1126笔记三十六:PaddleOCR环境搭建一

若该文为原创文章,转载请注明原文出处。 在前面测试过PaddleOCR的文字识别功能,现在自己搭建训练模型并测试。 这篇主要是环境搭建,环境为win10无GPU. 1、创建环境 # 创建paddle环境 conda create -n paddle python=3.8 # 查看环境 conda env list # 切换环境 conda acti…

第三章 模型篇:模型与模型的搭建

写在前面的话 这部分只解释代码&#xff0c;不对线性层(全连接层)&#xff0c;卷积层等layer的原理进行解释。 尽量写的比较全了&#xff0c;但是自身水平有限&#xff0c;不太确定是否有遗漏重要的部分。 教程参考&#xff1a; https://pytorch.org/tutorials/ https://githu…

RK3588平台开发系列讲解(以太网篇)SGMII和RGMII接口特性

文章目录 一、MAC 与 PHY的连接二、MAC 与 PHY 在OSI 中位置2.1、网络层2.2、数据链路层2.3、物理层三、RGMII四、SGMII沉淀、分享、成长,让自己和他人都能有所收获!😄 一、MAC 与 PHY的连接 从硬件的角度看,以太网接口电路主要由MAC控制器和物理层PHY芯片两部分组成。 以…

Redis 五大数据类型/结构

Redis 五大数据类型/结构 操作文档 官方文档: https://redis.io/commands 中文文档: http://redisdoc.com/ Redis 数据存储格式 一句话: redis 自身是一个Map&#xff0c;其中所有的数据都是采用key : value 的形式存储 key 是字符串&#xff0c;value 是数据&#xff0c;数…

流媒体接入服务的一般模型

0x00 背景说明 媒体接入服务用来实现媒体资源(resource)的接收和发送&#xff0c;在有限范围内实现不同接入协议的转换。 0x01 一般模型 媒体传输通道的建立步骤通常分为两个阶段&#xff1a; 握手/协商媒体传输 其中&#xff0c;握手/协商操作通常包含&#xff1a; 媒体…

【GD32F303CCT6BlueBill开箱点灯教程】

【GD32F303CCT6BlueBill开箱点灯教程】 1. 搭建环境1.1 官方资料1.2 安装Keil 51.3 安装芯片选型插件pack包 2. 编译2.1 Keil4转换为Keil5工程2.2 选择芯片型号2.3 存储器类型2.4 选择下载器2.5 内存下载设置 3. 烧录3.1 Keil内烧录3.1.1 J-Link烧录3.1.2 ST-Link烧录3.1.3 CMS…

读书笔记:《远见:如何规划职业生涯3大阶段》

《远见&#xff1a;如何规划职业生涯3大阶段》&#xff0c;作者布赖恩&#xff0e; 费瑟斯通豪&#xff0c;豆瓣链接&#xff1a;https://book.douban.com/subject/27609489/ 主旨&#xff1a;描述职业生涯中3个截然不同但相互关联的阶段&#xff0c;教会我们如何不断储备职场燃…

【linux指南--命令大全】

系统的学习linux常用的命令&#xff0c;命令很全所以篇幅很长&#xff0c;可以作为你查阅命令的手册。也欢迎大佬们评论区补充。 文章目录 常见目录介绍配置文件系统操作帮助命令man 帮助help 帮助info 帮助 显示当前的目录名称文件查看建立目录删除空目录复制文件移动文件删除…

Qt下面窗口嵌套,嵌套窗口中包含:QGraphicsView、QGraphicsScene、QGraphicsIte

Qt系列文章目录 文章目录 Qt系列文章目录前言一、嵌套窗口二、注意事项 前言 我们有一个主窗口mainwindow,需要向其中放入新的界面&#xff0c;你可以自己定义里面内容。 Qt的嵌套布局由QDockWidget完成&#xff0c;用Qt Creator拖界面得到的dock布置形式比较固定&#xff0c;…

vmware设置centos客户机和windows宿主机共享文件夹

一、安装内核 kernel-devel 包 yum install gcc yum install kernel-devel-$(uname -r) 注意&#xff0c;如果自己修改过内核版本&#xff0c;需要确保 uname -r 显示的版本和实际使用的内核版本一致。 二、安装 vmware-tools 在vmware上点击菜单&#xff1a;虚拟机->安…

Android kotlin 实现仿京东多个item向左自动排队(横向、动手滑动、没有首尾滑动)功能

文章目录 一、实现效果二、引入依赖三、源码实现1、适配器2、视图实现一、实现效果 二、引入依赖 在app的build.gradle在添加以下代码 1、implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6,这个里面带的适配器,直接调用就即可 BaseRecyclerViewAdapt…

【图神经网络】图神经网络(GNN)学习笔记:Graph Embedding

图神经网络&#xff08;GNN&#xff09;学习笔记&#xff1a;Graph Embedding 为什么要进行图嵌入Graph embedding?Graph Embedding使用图嵌入的优势有哪些&#xff1f;图嵌入的方法有哪些&#xff1f;节点嵌入方法&#xff08;Node Embeddings&#xff09;1. DeepWalk2. LINE…

CTFShow-WEB入门篇命令执行详细Wp(29-40)

WEB入门篇--命令执行详细Wp 命令执行&#xff1a;Web29&#xff1a;Web30&#xff1a;Web31&#xff1a;web32&#xff1a;web33&#xff1a;web34&#xff1a;web35&#xff1a;web36&#xff1a;web37&#xff1a;web38&#xff1a;web39&#xff1a;web40&#xff1a; CTFSh…