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

目录

一、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 查询数据库就建立成功了

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

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

相关文章

Spring Security--会话管理

就像登录qq一样&#xff0c;一个手机登录会将另外一个手机挤下线&#xff0c;这个就叫会话管理。 这个东西非常简单&#xff0c;在默认情况下可以登录n多次&#xff0c;一旦开启&#xff0c;就不允许登录多个。 什么是一个会话。 我们简单理解就是一个浏览器的同一个用户算一…

汉明码(Hamming Code)底层原理

汉明码&#xff08;Hamming Code&#xff09;底层原理 3Blue1Brown&#xff1a;Hamming Code【Part1】 3Blue1Brown&#xff1a;Hamming Code【Part2】 Hamming Code如何检查错误和定位错误&#xff1f; 检查错误通过奇校验或偶校验确定是否发生错误 定位错误通过依次对行和列…

将递归函数转成非递归函数的通用方法

看到过一道非常不错的面试题&#xff1a;不支持递归的程序语言如何实现递归程序&#xff1f; 之所以说这道题好&#xff0c;是因为&#xff1a; 首先&#xff0c;它不是纯粹考概念和死记硬背&#xff0c;求职者在回答问题之前需要进行一定的思考&#xff1b; 其次&#xff0c…

Debezium系列之:记录一次生产环境SQLServer数据库删除日志文件造成debezium connector数据不采集的解决方法

Debezium系列之:记录一次生产环境SQLServer数据库删除日志文件造成debezium connector数据不采集的解决方法 一、背景二、快速定位问题三、详细的解决步骤四、确认debezium connector恢复对数据库的数据采集五、经验总结一、背景 SQLServer数据库的日志把磁盘打满了,需要删除…

JAVA 实现 Redis 发布订阅

Redis 发布订阅 发布订阅&#xff1a;消息发布者发布消息 和 消息订阅者接收消息&#xff0c;两者之间通过某种媒介联系起来 例如订杂志&#xff0c;当自己订阅了爱格杂志&#xff0c;每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了…

C语言之结构体讲解

目录 结构体类型的声明 结构体初始化 结构体成员访问 结构体传参 对于上期指针初阶&#xff08;2&#xff09;我们后期还会讲数组指针是什么&#xff1f;大家可以先思考一下&#xff0c;后期我们会讲 1.结构体的声明 结构是一些值的集合&#xff0c;这些值被称为成员变量&am…

第二类曲线积分

文章目录 第二类曲线积分一、向量场是什么&#xff1f;二、向量场可视化三、计算1. 计算方式一2. 计算方式二 第二类曲线积分 因为之前学习第二类曲线的时候&#xff0c;不是很理解&#xff1b;所以最近看了mit的多元微积分课程&#xff0c;做一些课程笔记。 一、向量场是什么…

字符集和java的编码与解码

一、ASCII和GBK字符集 计算机存储一个英文字符需要一个字节。 ASCII字符集&#xff0c;包括128&#xff08;0000000B~1111111B&#xff09;个数据&#xff0c;存储英文字母和字符&#xff0c;对于欧美国家够用。 例如&#xff0c;存储字符’a’&#xff0c;查询ASCII得到为97&a…

C语言中的基本数据类型

C语言中的基本数据类型分别为以下几种 整型、浮点型、字符类型 整型又分为整型int、短整型short、长整型long 浮点型分为单精度浮点型float、双精度浮点型double 1、短整型short 2.整型 3.长整型 短整型、长整型、整形都是表示整形的&#xff0c;并且输出结果也都为10&…

【大数据之Hive】十一、Hive-HQL查询之基本查询

基础语法 select [all | distinct] select_expr,select_expr, ...from table)name --从什么表查[where where_condition] --过滤[group by col_list] --分组查询[having col_list] --分组后过滤[order by col_list] --排序[cluster by col_list | …

leetcode 152.乘积最大子数组

题目描述 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 来源&#xff1a;力扣&a…

C++入门攻略

C补足C语言部分缺陷 1.命名空间&#xff1a;1.1 命名空间namespace关键字1.命名空间中可以定义变量、函数、类型2.命名空间可以嵌套3.相同命名空间共存 1.2 命名空间的使用方式&#xff1a;1.名称加用域作用限定符的方式访问&#xff08;同上&#xff09;2.使用using引入某个空…

Java并发之 Lock 锁

一、Lock接口 1 Lock简介&地位&作用 锁是一种工具&#xff0c;用于控制对共享资源的访问Lock和synchronized是最常见的两个锁&#xff0c;他们都能够达到线程安全的目录&#xff0c;但是使用和功能上又有较大的不同Lock接口最常见的实现类就是ReentrantLock通常情况下…

C:\Users\BC>conda -V ‘conda‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

C:\Users\BC>conda -V ‘conda’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 注意&#xff01;&#xff1a;Anaconda安装路径和Scripts路径&#xff0c;两个都添加进去Path 解释&#xff1a;将 Anaconda 安装路径和 Scripts 路径都添加到系统的 PA…

文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题

四、一次聚会需要邀请多少人&#xff0c;才能让其中 3 人的生日很可能相同? 文心一言&#xff1a; 为了解决这个问题&#xff0c;我们需要先计算出所有可能的生日组合数&#xff0c;然后计算出其中生日相同的组合数。 已知需要邀请的人数为&#xff1a;23人 根据组合数公式…

k8s如何使用ceph rbd块存储(静态供给、存储类动态供给)

目录 前言安装ceph集群ceph集群创建rbd块存储rbd块存储不支持ReadWriteManyk8s配置rbd块存储&#xff08;静态供给&#xff09;创建secret创建pv创建pvck8s节点安装客户端依赖包部署pod查看pod验证是否持久化 k8s配置rbd块存储&#xff08;动态供给&#xff09;查看官网ceph集群…

【ARM AMBA AXI 入门 6 - AXI3 协议中的锁定访问之AxLOCK信号】

文章目录 1.1 Locked accesses 1.1 Locked accesses 当主机使用 AxLOCK 信号来指示事务是锁定的事务时&#xff0c;互连(Interconnect)必须确保只有该主机可以访问目标从属区域&#xff0c;直到来自同一主机的未锁定事务完成。互连中的仲裁器(arbiter)必须执行此限制。 在主机…

湖南大学CS-2017(另一张)期末考试解析

【特别注意】 答案来源于wolf 是我在备考时自己做的&#xff0c;仅供参考&#xff0c;若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 由于这张试卷没有电子版&#xff0c;我就直接拍我自己的作答了

Monocle2拟时基因富集分析

****Monocle2全部往期精彩系列&#xff1a;1、群成员专享&#xff1a;Monocle2更新&#xff08;就是重新梳理一下&#xff09;2、一键跑完monocle2&#xff1f;3、ggplot2个性可视化monocle2结果4、ggplot修饰monocle2拟时热图&#xff1a;一众问题全部解决5、Monocle2终极修改…

Day975.如何使用JWT结构化令牌 -OAuth 2.0

如何使用JWT结构化令牌 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于如何使用JWT结构化令牌的内容。 OAuth 2.0 规范并没有约束访问令牌内容的生成规则&#xff0c;只要符合唯一性、不连续性、不可猜性就够了。这就意味着&#xff0c;可以灵活选择令牌的形式&…