MyBatis【创建与使用】

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: MyBatis【创建与使用】

🍎一. MyBatis


🍒1.1. MyBatis 是什么?


MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO(Plain Old Java Objects,普通⽼式 Java 对象)为数据库中的记录


简单来说 MyBatis 是更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具(中间商)


🍒1.2 没有使用MyBatis时的操作流程


这是因为 JDBC 的操作太繁琐了,我们回顾⼀下 JDBC 的操作流程:


创建数据库连接池 DataSource

通过 DataSource 获取数据库连接 Connection

编写要执⾏带 ? 占位符的 SQL 语句

通过 Connection 及 SQL 创建操作命令对象 Statement

替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值

使⽤ Statement 执⾏ SQL 语句

查询操作:返回结果集 ResultSet,更新操作:返回更新的数量

处理结果集

释放资源


从上述操作流程可以看出,对于 JDBC 来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写。于是我们就想,那有没有⼀种⽅法,可以更简单、更⽅便的操作数据库呢?答案是肯定的,这就是我们要学习 MyBatis 的真正原因,它可以帮助我们更⽅便、更快速的操作数据库’


🍒1.3 MyBatis的操作与数据库之间的流程


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


ace2a0fc22304967930554aa38a35c95.png



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


将输⼊数据(即传⼊对象)+SQL 映射成原⽣ SQL

将结果集映射为返回对象,即输出对象


ORM 把数据库映射为对象:


●数据库表(table)–> 类(class)

●记录(record,⾏数据)–> 对象(object)

●字段(field) --> 对象的属性(attribute)

●⼀般的 ORM 框架,会将数据库模型的每张表都映射为⼀个 Java 类


e14198b6d08a41aea6581fda793cd2a8.png


也就是说使⽤ MyBatis 可以像操作对象⼀样来操作数据库中的表,可以实现对象和数据库表之间的转换,接下来我们来看 MyBatis 的使⽤吧


🍎二.创建MyBatis项目


🍒2.1 idea创建


1.选择框架Spring Assistant框架(没有这个框架选择可以创建Spring的框架即可)


cccbb4025d354730a276fc4978df6480.png


2.选择Maven项目和java的jdk版本


8d1427166f3b4f8c9a3c529fbafbbf52.png


3.选择项目需要添加的依赖


e6b3be9fea66413286d29682968f44da.png

🍒2.2 配置文件信息


🍉2.2.1 添加MySQL 驱动和MyBatis 框架

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

🍉2.2.2 配置数据库连接信息’

# 开发环境配置文件
# 配置数据库连接
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: jj1432644716
    driver-class-name: com.mysql.cj.jdbc.Driver
# 开启 MyBatis SQL 打印
logging:
  level:
    com:
      example:
        demo: debug
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
=

application.yml输入以下代码在


# 当前运行的环境(配置文件)
spring:
  profiles:
    active: dev


🍉2.2.3 配置MyBaits在 application.xml保存路径


application.yml输入以下代码



# 配置 mybatis xml 保存路径 **Mapper.xml(是在**Mapper.xml后的文件名的目录下保存)
mybatis:
  mapper-locations: classpath:mybatis/**Mapper.xml

🍒2.3 创建数据库和表(文章表)

-- 创建数据库
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';
-- 添加⼀个⽤户信息
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);

🍒2.4 创建对象


我们可以创建一个单独的包来存储对象model


创建一个用户对象,我们记得使用@Data注解(带有set,get,tostring等方法)

@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private String createtime;
    private String updatetime;
    private int state;
}

🍒2.5 创建Mapper接口


@Mapper //mybatis interface
public interface UserMapper {
}


我们先实现一个查询用户id的方法

Mapper //mybatis interface
public interface UserMapper {
    // 查询方法{根据用户id查询用户}
    // @Param("id")是mybatis中设置xml文件的SQL中查询id
    public UserInfo getUserById(@Param("id") Integer id);
}    

🍒2.6 在配置文件中配置UserMapper.xml文件


我们需要自己在配置文件目录下创建一个mybatis包


292ec37ffa8e4122b1d30b89123f637e.png

<?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">
<!-- namepace 要设置是实现接口所在的具体包加类名 -->
<mapper namespace="com.example.demo.mapper.UserMapper">

3d3dc12b63dd4517bfbab292e7462bd4.png



🍎三. MyBatis的使用


🍒3.1 添加 Service 和 controller


1.添加 Service


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

2.添加controller

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


🍒3.2 在UserMapper.xml中进行SQL语句编写


 <!-- 根据用户id 查询用户信息 -->
    <select id="getUserById" resultMap="BaseMap">
           select * from userinfo where id=#{id}
    </select>

🍒3.3 在postman进行访问查询


44a9bc40bd994f6b8292c5c5e4760523.png

这是我们创建后的项目目录


b7d7ad8a69c9413ba745985bf8c7a73a.png

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL Java 数据库连接
19MyBatis - MyBatis修改操作
19MyBatis - MyBatis修改操作
30 0
|
7月前
|
SQL 安全 Java
65MyBatis - MyBatis中 # 与 $ 的区别
65MyBatis - MyBatis中 # 与 $ 的区别
21 0
|
7月前
|
SQL XML Java
mybatis基本构成&mybatis与hibernate的区别&添加mybatis支持
mybatis基本构成&mybatis与hibernate的区别&添加mybatis支持
|
3月前
|
缓存 Java 数据库连接
|
9月前
|
SQL XML Java
MyBatis配置中的#「」和$「」有什么区别?
Mybatis提供到的#号和$号,都是实现动态SQL的一种方式,通过这两种方式把参数传递到XML之后,在执行操作之前,Mybatis会对这两种占位符进行动态解析。
59 0
|
4月前
|
缓存 Java 数据库连接
Mybatis-1.常见配置
Mybatis-1.常见配置
|
4月前
|
SQL Java 数据库连接
MyBatis与MyBatis-Plus的区别?
MyBatis与MyBatis-Plus的区别?
74 0
|
7月前
|
Java 关系型数据库 MySQL
18MyBatis - MyBatis添加操作
18MyBatis - MyBatis添加操作
29 0
|
9月前
|
SQL druid Java
Mybatis的配置
Mybatis的配置
62 0
|
XML Java 数据库连接
MyBatis是什么?使用方式?
其他知识:Java EE三层架构:表现层、业务层、持久层
124 0
MyBatis是什么?使用方式?