超细详解MyBatis操作数据库(1)

这篇具有很好参考价值的文章主要介绍了超细详解MyBatis操作数据库(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1.MyBatis 是什么?

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

存储过程:类似方法(包含多条sql/判断/变量声明…)
缺点: 1. 操作难度大 2. 没办法调试 3. 修改和扩展难…

2.回顾 JDBC 的操作流程

  1. 创建数据库连接池 DataSource
  2. 通过 DataSource 获取数据库连接 Connection
  3. 编写要执⾏的带 ? 占位符的 SQL 语句
  4. 通过 Connection 及 SQL 创建操作命令对象 Statement
  5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
  6. 使⽤ Statement 执⾏ SQL 语句
  7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量
  8. 处理结果集
  9. 释放资源

对于 JDBC 来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写。
MyBatis 可以帮助我们更⽅便、更快速的操作数据库。

3.MyBatis 在整个框架中的定位

框架交互流程图:
超细详解MyBatis操作数据库(1)

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

  1. 将输⼊数据(即传⼊对象)+SQL 映射成原⽣ SQL
  2. 将结果集映射为返回对象,即输出对象

ORM 把数据库映射为对象:

  • 数据库表(table)----> 类(class)
  • 记录(record,行数据)-----> 对象(object)
  • 字段(field) ----> 对象的属性(attribute)

⼀般的 ORM 框架,会将数据库模型的每张表都映射为⼀个 Java 类。也就是说使用 MyBatis 可以像操作对象⼀样来操作数据库中的表,可以实现对象和数据库表之间的转换。

4.MyBatis的使用

4.1创建数据库和表

-- 创建数据库
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);

4.2 添加MyBatis框架支持

添加 MyBatis 框架⽀持分为两种情况:
⼀种情况是对自己之前的 Spring 项目进行升级,另⼀种情况是创建⼀个全新的 MyBatis 和 Spring Boot 的项⽬。

4.2.1 老项目添加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>

更简单的操作⽅式是使用EditStarters插件

超细详解MyBatis操作数据库(1)

超细详解MyBatis操作数据库(1)

超细详解MyBatis操作数据库(1)

4.2.2 新项目添加MyBatis

超细详解MyBatis操作数据库(1)

4.3 配置连接字符串和MyBatis

此步骤需要进⾏两项设置,数据库连接字符串设置 和 MyBatis 的 XML ⽂件配置。

4.3.1 配置连接字符串

如果是 application.yml 添加如下内容:
注意空格!!!

# 数据库连接配置
spring:
 datasource:
 url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
 username: root
 #注意写自己数据库的密码
 password: 123456
 driver-class-name: com.mysql.cj.jdbc.Driver

如果是application.properties添加如下内容:

# 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
#注意写自己数据库的密码
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

注意事项:
如果使⽤ mysql-connector-java 是 5.x 之前的使⽤的是“com.mysql.jdbc.Driver”
如果是⼤于 5.x使⽤的是“com.mysql.cj.jdbc.Driver”
这里我们使用的是 version5.1.38

4.3.2 配置 MyBatis 中的 XML 路径

MyBatis 的 XML 中保存是查询数据库的具体操作 SQL,配置如下:

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
 mapper-locations: classpath:mybatis/*Mapper.xml

超细详解MyBatis操作数据库(1)

MyBatis组成:

  1. 接口(表的所有操作方法)
  2. XML实现接口

4.4 添加业务代码

超细详解MyBatis操作数据库(1)
超细详解MyBatis操作数据库(1)

4.4.1 添加实体类

添加⽤户表:
超细详解MyBatis操作数据库(1)

注意:MySQL中的datetime类型在Java中使用 LocalDateTime

添加用户的实体类:

import lombok.Data;
import java.time.LocalTime;

@Data
public class Userinfo {
		//private int id;
        private Integer id;
        private String username;
        private String password;
        private String photo;
        //注意这里createTime 和updateTime 和数据库中的字段大小写不一样
        private LocalDateTime createTime;
        private LocalDateTime updateTime;
        private int state;
}

4.4.2 添加 mapper 接口

超细详解MyBatis操作数据库(1)

4.4.3 添加 UserMapper.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>

namespace :UserMapper实现哪个mapper接口
xml 实现接口的全路径(包名+接口名)

超细详解MyBatis操作数据库(1)

IDEA插件,实现 mybaits 接口和 xml 的快速定位
超细详解MyBatis操作数据库(1)
超细详解MyBatis操作数据库(1)

UserMapper.xml 查询指定⽤户的具体实现 SQL:

@Mapper
public interface UserMapper {
    Userinfo getUserById(@Param("user_id") Integer id);

}
<?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.entity.Userinfo">
        select * from userinfo where id=${user_id}
    </select>
</mapper>

超细详解MyBatis操作数据库(1)

以下是对以上标签的说明:
mapper标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接⼝的全限定名,包括全包名.类名。
select查询标签:是⽤来执⾏数据库的查询操作的:
id:是和 Interface(接⼝)中定义的⽅法名称⼀样的,表示对接⼝的具体实现⽅法。
resultType:是返回的数据类型,也就是开头我们定义的实体类。

这里的 ${ } 和#{ } 后面会详细讲解

4.4.4 添加 Service

服务层 UserService 实现代码如下:

@Service
public class UserService {

    //属性注入  @Resource或者@Autowired
    @Autowired
    private UserMapper userMapper;

    public Userinfo getUserById(Integer id){
        return userMapper.getUserById(id);
    }

}

4.4.5 添加 Controller

控制器层 UserController 的实现代码如下:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/getuserid")
    public Userinfo getUserById(Integer id){
        if(id==null) return null;
        return userService.getUserById(id);
    }
}

以上代码写完,整个 MyBatis 的查询功能就实现完了,接下来使⽤ postman 来测试⼀下。

4.4.6 使用 postman 测试

userinfo表中的记录:
超细详解MyBatis操作数据库(1)

postman发送请求:
超细详解MyBatis操作数据库(1)超细详解MyBatis操作数据库(1)
可以看到查询实现效果成功

5.增、删、改操作

实现用户的增加、删除和修改的操作,对应使用 MyBatis 的标签如下:

  • insert标签:插⼊语句
  • update标签:修改语句
  • delete标签:删除语句

5.1 增加用户操作

使用SQL查询创建表结构

show create table userinfo;

创建的userinfo表的表结构:
超细详解MyBatis操作数据库(1)

  1. 在UserMapper interface中声明方法
    超细详解MyBatis操作数据库(1)
  2. 在mapper.xml中提供实现
    超细详解MyBatis操作数据库(1)

注意:赋值使用的是对象中的属性,不是数据库的字段
Userinfo中是createTime 数据库中的字段是createtime
超细详解MyBatis操作数据库(1)

  1. 单元测试
    第一步:在测试类上添加@SpringBootTest注解
    第二步:注入测试对象(这里我们注入UserMapper)
    第三步:写单元测试的业务代码
    超细详解MyBatis操作数据库(1)

添加成功:
超细详解MyBatis操作数据库(1)
超细详解MyBatis操作数据库(1)

此时拿不到用户的id (自增主键)
因为插入操作默认返回的是影响的行数,不能做到同时返回你要查询的数据。

特殊的添加:返回自增 id

默认情况下返回的是受影响的行数,如果想要返回自增 id,具体实现如下。
UserMapper interface 声明如下:

//添加用户并返回id
    int addGetId(Userinfo userinfo);

UserMapper.xml 实现如下:

 <insert id="addGetId"  useGeneratedKeys="true" keyProperty="id">
        insert into userinfo(username,password,createtime,updatetime)
        values(#{username},#{password},#{createTime},#{updateTime})
    </insert>

超细详解MyBatis操作数据库(1)

useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false
keyColumn:设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第⼀列的时候,是必须设置的。如果⽣成列不止⼀个,可以⽤逗号分隔多个属性名称。
keyProperty指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert语句的 selectKey ⼦元素设置它的值,默认值:未设置(unset)。如果⽣成列不⽌⼀个,可以⽤逗号分隔多个属性名称。

单元测试:超细详解MyBatis操作数据库(1)

此时除了影响行数外,还获取到了自增主键 id


5.2 修改用户操作

mapper 接⼝:

int upUser(Userinfo userinfo);

mapper.xml:

<update id="upUser">
        update userinfo set username=#{username} where id=#{id}
    </update>

单元测试:
超细详解MyBatis操作数据库(1)
结果:
超细详解MyBatis操作数据库(1)
超细详解MyBatis操作数据库(1)

5.3删除操作

mapper 接⼝:

int delById(@Param("id")Integer id);

mapper.xml:

<delete id="delById">
        delete from userinfo where id=#{id}
</delete>

超细详解MyBatis操作数据库(1)
超细详解MyBatis操作数据库(1)

6.开启mybatis sql日志打印

在application.properties中加入以下配置:

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
//设置日志级别为debug
logging.level.com.example.demo=debug

执行结果中带有Preparing,Parameters和Updates,更直观的看到 mybatis 执行的sql语句
超细详解MyBatis操作数据库(1)

7. @Transactional注解

单元测试有不污染数据库的功能,使用@Transactional来实现

工作原理是删除操作后,进行回滚,恢复到原来的数据

可以加在类前面也可以加在方法前面。
超细详解MyBatis操作数据库(1)

可以看到数据库中的记录没有改变

超细详解MyBatis操作数据库(1)文章来源地址https://www.toymoban.com/news/detail-439429.html

到了这里,关于超细详解MyBatis操作数据库(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用MyBatis操作数据库及单元测试

    目录 一.MyBatis介绍 二.MyBatis操作数据库步骤 三.单元测试 idea上生成测试  配置mybatis日志 动态参数 MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。 JDBC来操作数据库太复杂了,使用MyBatis 是因为它可以帮助我们更⽅便、更快速的操作数据库。 1. 创建springboot工程, 并导入

    2024年02月03日
    浏览(50)
  • MyBatis:使用注解让数据库操作更简单

    目录 一、简介 二、配置 三、基于注解的基本使用 四、测试 总结 在Java开发中,数据库操作是一个常见而重要的任务。为了方便地执行SQL语句,获取结果集,处理异常等,我们通常需要使用JDBC(Java Database Connectivity)API,这是一个标准的数据库访问接口。然而,使用JDBC也有

    2024年02月11日
    浏览(43)
  • Spring日志完结篇,MyBatis操作数据库(入门)

    目录 Spring可以对日志进行分目录打印 日志持久化(让日志进行长期的保存) MyBatis操作数据库(优秀的持久层框架) MyBatis的写法 开发规范: 单元测试的写法 传递参数 他的意思是说spring相关只打印INFO级别的标准,但是他也能获取到debug级别的日志 日志设置颜色(只能控制控制

    2024年02月04日
    浏览(37)
  • MyBatis动态SQL:打造灵活可变的数据库操作

    动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。 在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些信息的传入就需要使⽤动态标签 if来判断了 创建这样想学生表就可以进行测试了 下面是xml语句

    2024年02月12日
    浏览(45)
  • MyBatis 查询数据库之二(增、删、改、查操作)

    目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper(interface)里面添加增加方法的声明 3.2 在 XMl 中添加 标签和增加的 sql 代码 3.3 生成

    2024年02月14日
    浏览(45)
  • 数据库操作不再困难,MyBatis动态Sql标签解析

    MyBatis缓存原理 Mybatis的CachingExecutor与二级缓存 Mybatis plugin 的使用及原理 MyBatis四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 详解 MyBatis+Springboot 启动到SQL执行全流程 使用MyBatis,或者MyBatis-plus,有一项重要的开发技能就是写动态sql,动态sql能帮我们省略很多复杂逻

    2024年02月12日
    浏览(69)
  • 【MyBatis学习】MyBatis操纵数据库进行查询操作 ?MyBatis与JDBC想比怎么样,赶快与我一起探索吧 ! ! !

    前言: 大家好,我是 良辰丫 ,从今天开始我们就要进入MyBatis的学习了,请君与我一起操纵数据库,MyBatis到底是什么呢?我们慢慢往下瞧! ! !💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之框架学习 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我

    2024年02月09日
    浏览(50)
  • 使用mybatis和dynamic-datasource-spring-boot-starter动态切换数据源操作数据库

    记录 :415 场景 :使用mybatis和dynamic-datasource-spring-boot-starter动态切换数据源操作数据库。 版本 :JDK 1.8,Spring Boot 2.6.3,dynamic-datasource-spring-boot-starter-3.3.2,mybatis-3.5.9。 源码 :https://github.com/baomidou/dynamic-datasource-spring-boot-starter dynamic-datasource-spring-boot-starter :一个基于springboot的快

    2023年04月19日
    浏览(44)
  • 一文详解什么是数据库分片

        应用程序正在变得越来越好,它拥有更多的功能、更多的活跃用户,并且每天都会收集更多的数据。但数据库现在导致应用程序的其余部分变慢。数据库分片可能是问题的答案,但许多人不知道它是什么,最重要的是何时使用它。在本文中我们将讨论什么是数据库分片、

    2024年02月16日
    浏览(50)
  • 使用dynamic-datasource-spring-boot-starter动态切换数据源操作数据库(MyBatis-3.5.9)

    记录 :383 场景 :使用dynamic-datasource-spring-boot-starter动态切换数据源,使用MyBatis操作数据库。提供三种示例:一,使用@DS注解作用到类上。二,使用@DS注解作用到方法上。三,不使用注解,使用DynamicDataSourceContextHolder类在方法内灵活切换不同数据源。 源码: https://github.com/

    2024年01月20日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包