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

2023-08-02 20:11:56

目录

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);
    }
}

更多推荐

(一)探索随机变量及其分布:概率世界的魔法

文章目录🍋引言🍋什么是随机变量?🍋离散随机变量🍋连续随机变量🍋随机变量的概率分布🍋离散概率分布🍋0-1分布(Bernoulli分布)🍋二项分布(Binomial分布)🍋泊松分布(Poisson分布)🍋几何分布(Geometric分布)🍋连续概率分布🍋均匀分布(UniformDistributio

基于Java+微信小程序实现《微信阅读平台》

博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题

软件定义世界,工程引领未来——中山大学软件工程学院 软件工程导论大作业

目录软件工程,理解加深个人困惑软件与软件工程的定义学习思路的启发软件危机的认识及思考软件测试的初步认识科技前沿,守正创新代码有智能,教育有情怀深入浅出,引人入胜再接再厉,未来可期“软件定义世界”是软工人的响亮口号,“工程引领未来”是我在上完导论课后的总结与思考。软件工程导论课作为软件工程学院开设的特色课程以及专业必修课

03、JSP核心技术

1JSP的概述(熟悉)1.1JSP的概念JSP是JavaServerPages的简称,跟Servlet一样可以动态生成HTML响应,JSP文件命名为xxx.jsp。与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。1.2JSP的示例1.3JSP与Servlet的关系2JSP的

设计模式之模板模式

文章目录豆浆制作问题模板方法模式基本介绍模板方法模式原理类图对原理类图的说明-即(模板方法模式的角色及职责)模板方法模式解决豆浆制作问题模板方法模式的钩子方法模板方法模式的注意事项和细节豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口

强化学习从基础到进阶-案例与实践[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C、与生成对抗网络的联系等详解

【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现专栏详细介绍:【强化学习原理+项目专栏】必看系列:单智能体、多智能体算法原理+项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现对于深度强化学习这块规划为:基础单智能算法教学(g

【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka

作者简介前言博主之前写过一个完整的MQ系列,包含RabbitMQ、RocketMQ、Kafka,从安装使用到底层机制、原理。专栏地址:https://blog.csdn.net/joker_zjn/category_12142400.html?spm=1001.2014.3001.5482本文是该系列的清单综述,会拉通

Kafka实现高性能消息队列分析

ApacheKafka是一款开源的、分布式的、高吞吐量的流平台。它被广泛用于实时数据流的处理,包括实时流分析、实时日志处理、实时事件处理等。Kafka的主要设计目标是高吞吐量、可扩展性、容错性和持久性。在本篇文章中,我们将深入探讨Kafka如何实现高性能消息队列,包括服务端和客户端的架构,以及关键的设计和优化技术,如服

Kafka概论

前言任何消息中间件,除了基础组件架构外,核心特性无非三个,消息可靠性、消息模型、吞吐量,本文要聊的正是这些东西,其余诸如API、下载安装、集群搭建等都是死的,而且会随着版本的变动而改变,这类东西针对不同版本,查官方文档即可。目录前言1.概述1.1.特点1.2.架构2.消息模型2.1.发布订阅模式2.2.点对点2.3.消

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发

Java版工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离功能清单如下:首页工作台:待办工作、消息通知、预警信息,点击可进入相应的列表项目进度图表:选择(总体或单个)项目显示1、项目进度图表2、项目信息施工地图:1、展示当前角色权限下能看到的施工地图(

从统计语言模型到预训练语言模型---统计语言模型

语言模型从历史上来看,自然语言处理的研究范式变化是从规则到统计,从统计机器学习到基于神经网络的深度学习,这同时也是语言模型发展的历史。要了解语言模型的发展历史,首先我们需要认识什么是语言模型。语言模型的目标是建模自然语言的概率分布,即确定语言中任意词序列的概率,它提供了从概率统计角度建模语言文字的独特视角。语言模型在自

热文推荐