MyBatis 基础用法详解

目录

什么是MyBatis

前置工作

创建MyBatis项目

MyBatis的使用

1.查询

1.1全查询

1.2传参查询

2.删除

3.修改

4.添加


什么是MyBatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生 SQL 查询,将接口和 Java 的实体类映射成数据库中的记录。

前置工作

在MySQL数据库中创建好数据库,建立好相关的表

-- 创建数据库
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 timestamp default current_timestamp,
    updatetime timestamp default current_timestamp,
    `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 timestamp default current_timestamp,
    updatetime timestamp default current_timestamp,
    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 timestamp default current_timestamp,
		updatetime timestamp default current_timestamp,
  	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);

执行下述SQL语句后,能得到相应的数据

创建MyBatis项目

创建一个Spring项目,除了原来的三个依赖外

多添加 MyBatis Framework 和 MySQL Driver 这两个依赖, 后者是数据库驱动, 使用哪个数据库就用哪个

在启动项配置文件里  application.properties  设置MyBatis配置

# 设置数据库的相关连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
# 版本8之前版本的数据库使用 com.mysql.jdbc.Driver
# 版本8以及之后版本的数据库使用 com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置 MyBatis XML 存放路径和命名格式
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml
# 配置 MyBatis 执行时打印 SQL(可选配置)
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=debug

按照 MyBatis XML 存放路径 新建一个包, 路径与名字要一致

到这里, MyBatis的配置就算结束了

MyBatis的使用

MyBatis常规的写法包含了两个文件:

1.接口:        方法的声明(给其他层(Service)调用)

2.xml:        实现接口

1.查询

1.1全查询

首先 先构建一个实体类Userinfo

package com.example.demo.model;

import lombok.Data;

import java.time.LocalDateTime;

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

然后在dao包( 数据持久层 )里构建UserMapper接口

package com.example.demo.dao;

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

import java.util.List;

@Mapper // 数据持久层的标志
public interface UserMapper {

    List<Userinfo> getAll();
}

这样接口就写好了

接下来, 我们通过xml 来实现这个接口

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">
   
</mapper>

创建实现UserMapper接口的xml文件, 然后粘贴模板代码

这个mapper路径 必须要与接口的路径一致.  如下,修改后与我代码路径相符, 与模板路径不一致

然后例如我们要实现 查询操作

SQL语句不需要加分号 " ; "

这样就把通过xml实现接口的功能给完成了

接下来 我们来测试一下

在需要测试的类里,右键生成测试类

勾选要测试的方法, 然后确定

给测试类添加注解 @SpringBootTest

通过这个注解告诉当前的测试程序,当前的项目是运行在SpringBoot容器上的

然后运行测试类,查看结果

显然, 其结果与MySQL查询 是一致的

总结:

一共四步

1.首先创建好实体类(model层)

2.创建接口(dao层)  用来定义方法

3.创建xml文件(在resources.mybatis包里创建)  用来实现接口

4.生成测试类,测试结果

1.2传参查询

如果传递的是一个参数,然后根据这个参数来查询的话

例如我们要通过id来查询 Userinfo

接口:

通过注解 @Param 来设置参数名称, Mybatis xml文件以这个参数名称为准, 一般两者都设置为相同名称, 如有不同, 以前者为准

xml文件

通过  #{ }  或  ${ }  两者方式来设置占位符, 括号内的参数名称要与@Param设置的一致

测试类

我们假设传递的id值为1, 然后打印userinfo对象

这样就实现了传参查询

如果我们直接通过 ${ } 的方式来实现传参,它就是直接替换的,有存在SQL注入的风险

2.删除

先插入一条数据

删除操作的返回值是 int 值, 表示受影响的行数, 因此我们要用 Integer

接口:     

xml:       

测试类:  

成功实现了删除操作

3.修改

接口:

修改操作的返回值是受影响的行数,所以用Integer接收

xml实现:

测试:

测试通过, 因为有注解 @Transaactional 数据库也没有被真的修改

4.添加

添加操作返回的也是受影响的行数

接口:

xml实现接口:

测试:

测试结果:

如果获取的返回值,除了受影响的行数外, 还想获取 其对应的自增主键 id

接口不变,xml代码修改

这样就可以实现  将数据库中自增的主键 赋值给 设置的属性

然后测试中 再用get方法获取id 即可

我们再次插入相同的数据, 此时id 就自增为 4 了, 我们得到的返回值也是 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值