MyBatis查询数据库1(概念+创建项目+基础交互)

news2024/11/17 15:39:10

目录

1.MyBatis是什么?

2.为什么学习MyBatis?

3. 怎么学 MyBatis

4.第⼀个MyBatis查询

4.1 添加MyBatis框架支持

4.1.1老项目添加MyBatis

4.1.2 新项目添加MyBatis

4.2 配置连接字符串和MyBatis

4.2.1 配置连接字符串

4.2.2 配置 MyBatis 中的 XML 路径

5. 使用 MyBatis 的操作模式操作数据库

5.1 添加实体类

5.2 添加 Mapper 接口

5.3 添加 User Mapper.xml

5.4 添加 Controller


1.MyBatis是什么?

  1. MyBatis支持自定义SQL:MyBatis允许开发者编写自定义的SQL查询语句,从而更好地优化和控制数据库访问。与其他ORM框架不同,MyBatis不会自动创建SQL语句,而是将这一过程交给开发者,使得开发者能够更好地控制数据库查询逻辑。

  2. MyBatis对存储过程支持:MyBatis支持存储过程的调用,可以通过MyBatis执行存储过程,将Java对象与存储过程进行映射,并处理存储过程的输出参数。

  3. MyBatis支持高级映射:MyBatis提供了高级映射功能,允许开发者将复杂的数据库查询结果映射到Java对象中,从而简化数据的处理和转换。

  4. MyBatis去除JDBC代码:MyBatis屏蔽了大部分JDBC(Java Database Connectivity)代码,减少了繁琐的数据库操作,开发者只需关注SQL语句的编写和Java对象的映射。

  5. 参数设置和结果集获取:MyBatis简化了参数设置和结果集获取的过程,开发者只需在配置文件或注解中定义相应的映射关系,MyBatis会自动将Java对象和数据库记录进行转换。

  6. XML和注解配置:MyBatis支持两种方式来配置和映射数据库查询:一种是通过XML文件进行配置,另一种是通过注解来实现。开发者可以根据个人偏好来选择适合的方式。

  7. 映射原始类型、接口和Java POJO:MyBatis支持将原始数据类型、Java接口以及普通Java对象(POJO)与数据库记录进行映射。这种灵活性使得MyBatis适用于各种场景和项目规模。

总的来说,MyBatis是一个功能强大且灵活的持久层框架,通过简化数据库交互和提供丰富的映射功能,它大大提高了Java开发者的生产效率,并被广泛应用于各种Java项目中。

2.为什么学习MyBatis?

对于后端开发来说程序是由以下两部分组成:

  1. 后端程序
  2. 数据库

在之前的学习我们大多采用JDBC的方式来实现后端程序与数据库的交互,但是JDBC的流程关于繁琐

而MyBatis能够帮助我们更加快熟、便捷的完成后端程序与数据库的交互!

3. 怎么学 MyBatis

学习 MyBatis 两步走

  1. 搭建 MyBatis 开发环境

  1. 使用 MyBatis 模式和语法操作数据库

4.第⼀个MyBatis查询

开始搭建 MyBatis 之前,我们先来看⼀下 MyBatis 在整个框架中的定位,框架交互流程图:

MyBatis 也是⼀个 ORM 框架,ORM(Object Relational Mapping),即对象关系映射。在面向对象编程语言中,将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的互相转换:

  1.   将输入数据(即传入对象)+SQL 映射成原生SQL
  2.   将结果集映射为返回对象,即输出对象ORM 把数据库映射为对象

ORM 把数据库映射为对象:  

  1.     数据库表(table)--> 类(class)
  2.     记录(record,行数据)--> 对象(object)
  3.     字段(field) --> 对象的属性(attribute)

⼀般的 ORM 框架,会将数据库模型的每张表都映射为⼀个 Java 类。 也就是说使用 MyBatis 可以像操作对象⼀样来操作数据库中的表,可以实现对象和数据库表之间的转换,接下来我们来看 MyBatis 的使用吧。

4.1 添加MyBatis框架支持

添加 MyBatis 框架支持分为两种情况:⼀种情况是对自己之前的 Spring 项目进行升级,另⼀种情况是创建⼀个全新的 MyBatis 和 Spring Boot 的项目,下面我们分别来演示这两种情况的具体实现

4.1.1老项目添加MyBatis

<!-- 添加 MyBatis 框架 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>
        <!-- 添加 MySQL 驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

为什么我在这里添加了MySQL驱动呢?

MyBatis 就像⼀个平台(类似淘宝),而数据库相当于商家有很多种,不止有 MySQL,还有 SQL Server、Oracle等等.....因此这两个都是需要添加的,对比自身所使用的数据库来添加就行了

4.1.2 新项目添加MyBatis

我们创建完新的ssm项目,直接去启动时一定会报错, 因为你添加了数据库依赖而没有连接数据库(配置数据库的连接信息)

4.2 配置连接字符串和MyBatis

4.2.1 配置连接字符串

如果是 application.yml 添加如下内容:

# 数据库连接位置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    # 驱动
    driver-class-name: com.mysql.cj.jdbc.Driver

注意:这里的password和你数据库的吗密码是一样的!

 application.properties:

spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
#数据库密码
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

注意事项:如果使用 mysql-connector-java 是 5.x 之前的使用的是“com.mysql.jdbc.Driver” ,如果是大于 5.x 使用的是“com.mysql.cj.jdbc.Driver” 。

4.2.2 配置 MyBatis 中的 XML 路径

MyBatis 组成2部分:

  1. 接口(表的使用操作方法,给程序其他类调用的)
  2. xml  (实现接口,写具体SQL语句)
#mybatis 中 xml 保存路径
mybatis:
  mapper-locations:
    - classpath:mybatis/**Mapper.xml

5. 使用 MyBatis 的操作模式操作数据库

先创建数据库

-- 创建数据库
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);

 

5.1 添加实体类

先添加用户的实体类:

package com.example.demo.eneity;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-08-02
 * Time:16:44
 */
@Data
public class Userinfo {
    private int id;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private int state;
}

5.2 添加 Mapper 接口

package com.example.demo.mapper;

import com.example.demo.eneity.Userinfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-08-02
 * Time:16:48
 */

@Mapper// 和五大类注解是一样的
public interface UserMapper {
    Userinfo getUserById(@Param("id") Integer id);
}

5.3 添加 User 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.demo.mapper.UserMapper">

    <select id="getUserById" resultType="com.example.demo.eneity.Userinfo">
        select * from userinfo where id=${id}
    </select>
</mapper>

5.4 添加 Service

package com.example.demo.service;

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

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-08-02
 * Time:17:16
 */

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public Userinfo getUserById(int id){
        return userMapper.getUserById(id);
    }
}

5.4 添加 Controller

package com.example.demo.controller;

import com.example.demo.eneity.Userinfo;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2023-08-02
 * Time:17:22
 */

@RestController
@RequestMapping("/user")
public class UserController {


    @Autowired
    private UserService userService;

    @RequestMapping("/getuserbyid")
    public Userinfo getUserById(Integer id){
        if (id == null){
            return null;
        }
        return userService.getUserById(id);
    }
}

 

 

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

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

相关文章

PHM的设备故障模型如何构建?

预测性维护与健康管理&#xff08;Prognostics Health Management&#xff0c;PHM&#xff09;是现代工业中的一个关键概念&#xff0c;它旨在通过使用数据和先进的分析技术&#xff0c;实现设备故障的早期预测和预防&#xff0c;从而最大限度地提高设备的可用性和可靠性。而在…

DAY1,C高级(命令,Linux的文件系统,软、硬链接文件)

1.今日思维导图&#xff1b; 2.创建链接文件&#xff1b; 文件系统中的每个文件都与唯一的 inode 相关联&#xff0c;inode 存储了文件的元数据和数据块的地址&#xff0c;文件名与 inode 之间的链接关系称为硬链接或软链接。 硬链接文件的创建&#xff1a; ln 被链接文件的…

14-1_Qt 5.9 C++开发指南_网络编程及主机信息查询_HostInfo

Qt 网络模块提供了用于编写 TCP/IP 客户端和服务器端程序的各种类&#xff0c;如用于 TCP 通信的QTcpSocket 和 QTcpServer&#xff0c;用于 UDP 通信的 QUdpSocket&#xff0c;还有用于实现 HTTP、FTP 等普通网络协议的高级类如 QNetworkRequest&#xff0c;QNetworkReply 和Q…

【英杰送书-第六期】spring—加载监听器

前几天的时候&#xff0c;项目里有一个需求&#xff0c;需要一个开关控制代码中是否执行一段逻辑&#xff0c;于是理所当然的在yml文件中配置了一个属性作为开关&#xff0c;再配合nacos就可以随时改变这个值达到我们的目的&#xff0c;yml文件中是这样写的&#xff1a; switc…

SpringMVC学习记录

SpringMVC技术与servlet技术功能等同&#xff0c;均属于web层开发技术 SpringMVC简介 SpringMVC概述 SpringMVC是一种基于Java实现MIVC模型的轻量级web框架 优点 使用简单&#xff0c;开发便捷&#xff08;相比于servlet)灵活性强 SpringMVC是一种表现层框架技术 Spring…

万字长文解析深度学习中的术语

引言 新手在学习深度学习或者在看深度学习论文的过程中&#xff0c;有不少专业词汇&#xff0c;软件翻译不出来&#xff0c;就算是翻译出来也看不懂&#xff0c;因为不少术语是借用其他学科的概念&#xff0c;这里整理了一些在深度学习中常见的术语&#xff0c;并对一些概念进…

一文读懂Etcd及其原理和应用场景

文章目录 0. 前言1. ETCD的概念和设计2.ETCD的命令示例查看ETCD的版本信息列出ETCD集群中的成员检查ETCD集群的健康状态获取指定key的值设置指定key的值删除指定key及其对应的值监控指定key的变化将ETCD的数据备份到指定文件中 3. ETCD的使用场景4. ETCD的优缺点5. 配置文件示例…

Spring boot 集成 Skywalking 配置 || Skywalking 打不开【已解决】

一、Skywalking官网 Apache SkyWalking 1.下载Skywalking APM &#xff08;如果下载最新的&#xff0c;双击打开闪退&#xff0c;选老点的版本&#xff09; 2. 下载 Skywalking Agents 如果下载太慢&#xff0c;建议复制下载链接&#xff0c;然后用下载器下载&#xff0c;比…

Python因AI水涨船高,AIGC已经造出了一个全新的赛道 |2023中国开发者调查报告出炉

CSDN、《新程序员》在去年ChatGPT横空出世之后&#xff0c;发起了一份围绕开发者现状、人工智能和物联网、云原生、数据库、操作系统、芯片、开源的深度调查问卷&#xff0c;此问卷也融合了各个领域对生成式 AI 的应用进展&#xff0c;最终于近日正式形成一份长达 125 页的《20…

20230802-下载并安装android-studio

下载 android-studio 安装包 https://developer.android.google.cn/studio/ 安装android-studio 双击安装包 D:\Android Studio

Android Studio新版本logcat过滤说明

按包名过滤 //输入package:&#xff08;输入一个p就会有提示的&#xff09; &#xff0c;后面加上包名 比如: package:com.xal.runcontrol package:包名可以完整或者输部分包名即可 package:包名需要输完整准确 package~:正则表达式过滤 不了解正则表达式的可以参考&#…

Linux 操作系统 Red Hat Enterprise Linux 安装教程

文章目录 笔者的操作环境&#xff1a; 制作环境&#xff1a; Win32 Disk Imager 1.0.0 Windows 10 教育版 ISO&#xff1a; Red Hat Enterprise Linux 9.2 x86_64 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;是一种 Linux 操作系统。安装此操作系统的难题在于&a…

docker部署jenkins且jenkins中使用docker去部署项目

docker部署jenkins且jenkins中使用docker去部署项目 1、确定版本 2.346.1是最后一个支持jdk8的 2、编写docker-compose.yml并执行 在这个目录中新增data文件夹&#xff0c;注意data是用来跟docker中的文件进行映射的 docker-compose.yml version: "3.1" service…

软件测试这个行业究竟能做到多少岁?35岁真的是一个坎?

前言 在国内&#xff0c;软件测试行业是近10多年来随着互联网的飞速发展逐步兴起来的。 随着行业的发展&#xff0c;测试市场的人才缺口也越来越大&#xff0c;能够提供的就业机会也就越来越多&#xff0c;所以很多人都意气风发地投身到测试行业之中&#xff0c;憧憬这自己在这…

K8s影响Pod调度和Deployment

5.应用升级回滚和弹性伸缩

从Spring的角度看Memcached和Redis及操作

目录 Memcached和Redis的区别 适用场景 Memcached配置使用 Redis配置使用 在SpringBoot的框架里&#xff0c;有直连Redis的SDK却没有Memcached的&#xff0c;可见相比地位。不过各有各的适应场景&#xff0c;Redis这个单线程模型确实非常强。 Memcached和Redis的区别 共同…

【JavaWeb】 三大组件之过滤器 Filter

&#x1f384;欢迎来到边境矢梦的csdn博文&#xff0c;本文主要讲解Java 中三大组件之过滤器 Filter的相关知识&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&…

python 实现k-means聚类算法 银行客户分组画像实战(超详细,附源码)

想要数据集请点赞关注收藏后评论区留言留下QQ邮箱 k-means具体是什么这里就不再赘述&#xff0c;详情可以参见我这篇博客 k-means 问题描述&#xff1a;银行对客户信息进行采集&#xff0c;获得了200位客户的数据&#xff0c;客户特征包括以下四个1&#xff1a;社保号码 2&am…

性能调试【学习笔记】

什么是调优&#xff1f; 每执行一个Java命令&#xff0c;就分配一个JVM&#xff0c;调优时不要混淆。 根据需求进行JVM规划和预调优优化运行JVM的运行环境&#xff08;慢、卡顿&#xff09;解决JVM运行过程中出现的各种问题&#xff08;内存泄露、内存溢出OOM&#xff09; 生…

DSP定点数的概念和表示方法

1. 基本概念 (1) 计算机中定点数的三种表示方法&#xff1a;原码、补码和反码 (2) 在DSP中一般使用补码的形式来表示操作数 (3) 整型数的表示范围由DSP芯片的字长决定&#xff0c;比如16位或24位 (4) 注意&#xff0c;符号位的bit个数&#xff0c;不同类型的数以及不同的DS…