当前位置: 首页 > article >正文

通关MyBatis(上)

作者:~小明学编程 

文章专栏:spring框架

格言:热爱编程的,终将被编程所厚爱。
在这里插入图片描述

目录

什么是MyBatis

如何使用Mybatis

添加依赖

创建数据库

配置数据库连接字符串

MyBatis的操作流程

数据持久层

配置mybatis的xml文件

mapper接口

服务层

控制层


什么是MyBatis

MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的记录。
简单来说 MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具,这也是我们为什么要学习mybatis的原因,为了更加简单方便的去操作数据库。

如何使用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);

这里我么创建了两个数据库作为后续的测试使用。

配置数据库连接字符串

# 开发环境配置文件
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: "0217"
    driver-class-name: com.mysql.cj.jdbc.Driver
# 配置 mybatis xml 保存路径
mybatis:
  mapper-locations: classpath:mybatis/**Mapper.xml

这是我们的yml文件,要想连接数据库肯定是少不了这一步的路径配置的。MyBatis 的 XML 中保存是查询数据库的具体操作 SQL。

MyBatis的操作流程

前面我们已经做好了连接数据库的准备,下面就是要处理数据持久层了。

 

数据持久层

配置mybatis的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.model.UserInfo">
        select * from userinfo where id=${id}
    </select>
</mapper>

mapper接口

@Mapper
public interface UserMapper {
    //@param 注解是为了表示 xml 当中,用 id 可以获取到,就是通过 $ 符和 # 来获取到
    public UserInfo getUserById(@Param("id") Integer id);
}

主体思想就是将我们xml文件中的查询语句和和我们的接口给对应起来。

服务层

@Service
public class UserService {
    @Resource
    private UserMapper userMapper;
    public UserInfo getUserById(Integer id) {
        return userMapper.getUserById(id);
    }
}

服务层中就是将我们的准备好的接口给封装起来,这样我们想要使用的时候直接拿来就可以用了,方便对我们的接口进行统一的管理。

控制层

@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.kler.cn/news/16757.html

相关文章:

  • 二本做程序员有出路吗
  • python异常及其捕获
  • BM50-两数之和
  • ovs-vsctl 命令详解
  • js判断是否为null,undefined,NaN,空串或者空对象
  • 第一章--第一篇--了解 ChatGPT
  • 框架学习之KOCA框架简介
  • 【python基础语法八】正则表达式
  • MIT教授Tegmark:GPT-4敲响警钟,百年后人类何去何从丨智源大会嘉宾风采
  • 数据帧去掉VlanTag的代码(802.1Q)
  • go 语言环境安装(Windows 系统下安装)
  • ( 数组和矩阵) 566. 重塑矩阵 ——【Leetcode每日一题】
  • osg::Drawable类通过setDrawCallback函数设置回调函数的说明
  • 构建ChatGPT 镜像,并将其部署到 Docker 容器中。
  • 基于Matlab刻度盘识别角度计算
  • C++:计算机操作系统:多线程:高并发中的线程
  • ViveNAS - 一个基于LSM tree的文件存储实现 (一)
  • C++ srand()和rand()用法
  • hadoop伪分布式搭建教程
  • 【react从入门到精通】React JSX详解
  • pytorch学习率设置——optimizer.param_groups、对不同层设置学习率、动态调整学习率。
  • Java中几种常量池面试总结
  • OVS常用命令与使用总结
  • Python_PyStray结合Tkinter显示系统托盘图标
  • SpringMVC与SpringWebFlux
  • 【Spring Security】| 从0到1编写一个权限认证 | 学会了吗?
  • MEET开发者 | 选择和努力一样重要,专访杭州三汇测试工程师齐雪莲
  • c++标准模板(STL)(std::array)(三)
  • 高程实验8队列
  • ROS Noetic版本 rosdep找不到命令 不能使用的解决方法