• MyBatis 基础用法详解


    目录

    什么是MyBatis

    前置工作

    创建MyBatis项目

    MyBatis的使用

    1.查询

    1.1全查询

    1.2传参查询

    2.删除

    3.修改

    4.添加


    什么是MyBatis

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

    前置工作

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

    1. -- 创建数据库
    2. drop database if exists mycnblog;
    3. create database mycnblog DEFAULT CHARACTER SET utf8mb4;
    4. -- 使用数据数据
    5. use mycnblog;
    6. -- 创建表[用户表]
    7. drop table if exists userinfo;
    8. create table userinfo(
    9. id int primary key auto_increment,
    10. username varchar(100) not null,
    11. password varchar(32) not null,
    12. photo varchar(500) default '',
    13. createtime timestamp default current_timestamp,
    14. updatetime timestamp default current_timestamp,
    15. `state` int default 1
    16. ) default charset 'utf8mb4';
    17. -- 创建文章表
    18. drop table if exists articleinfo;
    19. create table articleinfo(
    20. id int primary key auto_increment,
    21. title varchar(100) not null,
    22. content text not null,
    23. createtime timestamp default current_timestamp,
    24. updatetime timestamp default current_timestamp,
    25. uid int not null,
    26. rcount int not null default 1,
    27. `state` int default 1
    28. )default charset 'utf8mb4';
    29. -- 创建视频表
    30. drop table if exists videoinfo;
    31. create table videoinfo(
    32. vid int primary key,
    33. `title` varchar(250),
    34. `url` varchar(1000),
    35. createtime timestamp default current_timestamp,
    36. updatetime timestamp default current_timestamp,
    37. uid int
    38. )default charset 'utf8mb4';
    39. -- 添加一个用户信息
    40. INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`, `createtime`, `updatetime`, `state`) VALUES
    41. (1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1);
    42. -- 文章添加测试数据
    43. insert into articleinfo(title,content,uid)
    44. values('Java','Java正文',1);
    45. -- 添加视频
    46. 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配置

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

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

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

    MyBatis的使用

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

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

    2.xml:        实现接口

    1.查询

    1.1全查询

    首先 先构建一个实体类Userinfo

    1. package com.example.demo.model;
    2. import lombok.Data;
    3. import java.time.LocalDateTime;
    4. @Data
    5. public class Userinfo {
    6. private int id;
    7. private String username;
    8. private String password;
    9. private String photo;
    10. private LocalDateTime createtime;
    11. private LocalDateTime updatetime;
    12. private int state;
    13. }

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

    1. package com.example.demo.dao;
    2. import com.example.demo.model.Userinfo;
    3. import org.apache.ibatis.annotations.Mapper;
    4. import java.util.List;
    5. @Mapper // 数据持久层的标志
    6. public interface UserMapper {
    7. List getAll();
    8. }

    这样接口就写好了

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

    MyBatis的xml文件模板如下

    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.example.demo.mapper.UserMapper">
    4. 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

  • 相关阅读:
    解决若依Ruoyi 插入数据返回1,实现主键回填,返回主键ID
    手写RPC框架Feign
    论文篇 | 2020-Facebook-DERT :利用transformers端到端的目标检测=>翻译及理解(持续更新中)
    加密货币为什么有价值?
    Flutter系列文章-实战项目
    sonarqube-9.6 & postgresql-13安装
    Flutter笔记:手写并发布一个人机滑动验证码插件
    基于SSH开发个人博客系统(论坛系统)
    关于#单片机#的问题:第七行打印完他就会获取到温湿度,单片机的连接也正常,reset也没用单片机中烧写的完整代码如下图
    关键词生成原创文章软件-原创文章生成软件
  • 原文地址:https://blog.csdn.net/weixin_60257917/article/details/134042108